From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13642 invoked by alias); 9 Mar 2012 04:25:10 -0000 Received: (qmail 13574 invoked by uid 22791); 9 Mar 2012 04:25:07 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from hagrid.ecoscentric.com (HELO mail.ecoscentric.com) (212.13.207.197) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 09 Mar 2012 04:24:54 +0000 Received: from localhost (hagrid.ecoscentric.com [127.0.0.1]) by mail.ecoscentric.com (Postfix) with ESMTP id 937252FB082E for ; Fri, 9 Mar 2012 04:24:52 +0000 (GMT) Received: from mail.ecoscentric.com ([127.0.0.1]) by localhost (hagrid.ecoscentric.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4-5o6W7Cq6BV; Fri, 9 Mar 2012 04:24:50 +0000 (GMT) Message-ID: <4F598611.4020506@eCosCentric.com> Date: Fri, 09 Mar 2012 04:25:00 -0000 From: Jonathan Larmour User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Lightning/1.0b3pre Thunderbird/3.1.16 MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: Fwd: Re: [patch] Add support for ARMv7M devices. Content-Type: multipart/mixed; boundary="------------050501030504090009070408" 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: 2012-03/txt/msg00320.txt.bz2 This is a multi-part message in MIME format. --------------050501030504090009070408 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 1326 Over a year ago, after discussion and some helpful pointers from Daniel, I submitted this patch: http://sourceware.org/ml/gdb-patches/2010-11/msg00142.html Unfortunately it fell by the wayside. This issue is coming to a head for the eCos project as we are updating our ARM toolchain (we avoid the bleeding edge). However that means we really need GDB to preserve backward compatibility, which it presently fails to do. We don't want to break backward compatibility with installed GDB stubs, and the XML solution is complicated for users, opaque, not really suitable for Eclipse (although there may be proprietary plugins around which try to solve this, that isn't relevant for public GDB). Most importantly the attached patch should flexibly work everywhere, and not break anyone's compatibility. And furthermore, it allows us a clean migration path to the changed 'g' packet length. So I'm attaching an updated version of the patch for current GDB trunk. If it helps, I do have an FSF assignment and, from prehistory, commit permissions. Jifl -- eCosCentric Limited http://www.eCosCentric.com/ The eCos experts Barnwell House, Barnwell Drive, Cambridge, UK. Tel: +44 1223 245571 Registered in England and Wales: Reg No 4422071. ------["Si fractum non sit, noli id reficere"]------ Opinions==mine --------------050501030504090009070408 Content-Type: text/plain; name="mprofile-backcompat.20120309.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="mprofile-backcompat.20120309.patch" Content-length: 6653 Index: arm-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/arm-tdep.c,v retrieving revision 1.358 diff -u -5 -p -r1.358 arm-tdep.c --- arm-tdep.c 2 Feb 2012 20:19:12 -0000 1.358 +++ arm-tdep.c 9 Mar 2012 04:19:39 -0000 @@ -41,10 +41,11 @@ #include "gdbtypes.h" #include "prologue-value.h" #include "target-descriptions.h" #include "user-regs.h" #include "observer.h" +#include "remote.h" #include "arm-tdep.h" #include "gdb/sim-arm.h" #include "elf-bfd.h" @@ -53,10 +54,11 @@ #include "gdb_assert.h" #include "vec.h" #include "features/arm-with-m.c" +#include "features/arm-with-m-fpa.c" #include "features/arm-with-iwmmxt.c" #include "features/arm-with-vfpv2.c" #include "features/arm-with-vfpv3.c" #include "features/arm-with-neon.c" @@ -9796,11 +9798,11 @@ arm_gdbarch_init (struct gdbarch_info in numerically greater than TAG_CPU_ARCH_V7). */ if (!tdesc_has_registers (tdesc) && (attr_arch == TAG_CPU_ARCH_V6_M || attr_arch == TAG_CPU_ARCH_V6S_M || attr_profile == 'M')) - tdesc = tdesc_arm_with_m; + is_m = 1; #endif } if (fp_model == ARM_FLOAT_AUTO) { @@ -9858,10 +9860,12 @@ arm_gdbarch_init (struct gdbarch_info in if (feature == NULL) return NULL; else is_m = 1; } + else + is_m = 0; tdesc_data = tdesc_data_alloc (); valid_p = 1; for (i = 0; i < ARM_SP_REGNUM; i++) @@ -10241,10 +10245,33 @@ arm_gdbarch_init (struct gdbarch_info in and does no harm, since nothing ever lists user registers. */ for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++) user_reg_add (gdbarch, arm_register_aliases[i].name, value_of_arm_user_reg, &arm_register_aliases[i].regnum); + if (is_m) + { + /* For backward-compatibility we allow two 'g' packet lengths with + the remote protocol depending on whether FPA registers are + supplied. M-profile targets do not have FPA registers, but some + stubs already exist in the wild which use a 'g' packet which + supplies them albeit with dummy values. The packet format which + includes FPA registers should be considered deprecated for + M-profile targets. + + The register sizes are fixed for these target descriptions in the + XML files, so we can hard-code them: r0-12,sp,lr,pc,xpsr for + tdesc_arm_with_m; and additionally f0-f7 and fps for + tdesc_arm_with_m_fpa. */ + + register_remote_g_packet_guess (gdbarch, + 17 * INT_REGISTER_SIZE, + tdesc_arm_with_m); + register_remote_g_packet_guess (gdbarch, + 18 * INT_REGISTER_SIZE + + 8 * FP_REGISTER_SIZE, + tdesc_arm_with_m_fpa); + } return gdbarch; } static void arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file) @@ -10289,10 +10316,11 @@ _initialize_arm_tdep (void) bfd_target_elf_flavour, arm_elf_osabi_sniffer); /* Initialize the standard target descriptions. */ initialize_tdesc_arm_with_m (); + initialize_tdesc_arm_with_m_fpa (); initialize_tdesc_arm_with_iwmmxt (); initialize_tdesc_arm_with_vfpv2 (); initialize_tdesc_arm_with_vfpv3 (); initialize_tdesc_arm_with_neon (); Index: features/arm-with-m-fpa.c =================================================================== RCS file: features/arm-with-m-fpa.c diff -N features/arm-with-m-fpa.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ features/arm-with-m-fpa.c 9 Mar 2012 04:19:39 -0000 @@ -0,0 +1,46 @@ +/* THIS FILE IS GENERATED. Original: arm-with-m-fpa.xml */ + +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" + +struct target_desc *tdesc_arm_with_m_fpa; +static void +initialize_tdesc_arm_with_m_fpa (void) +{ + struct target_desc *result = allocate_target_description (); + struct tdesc_feature *feature; + struct tdesc_type *field_type, *type; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.m-profile"); + tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "sp", 13, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "lr", 14, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "pc", 15, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "xpsr", 25, 1, NULL, 32, "int"); + + feature = tdesc_create_feature (result, "org.gnu.gdb.arm.fpa"); + tdesc_create_reg (feature, "f0", 16, 1, NULL, 96, "arm_fpa_ext"); + tdesc_create_reg (feature, "f1", 17, 1, NULL, 96, "arm_fpa_ext"); + tdesc_create_reg (feature, "f2", 18, 1, NULL, 96, "arm_fpa_ext"); + tdesc_create_reg (feature, "f3", 19, 1, NULL, 96, "arm_fpa_ext"); + tdesc_create_reg (feature, "f4", 20, 1, NULL, 96, "arm_fpa_ext"); + tdesc_create_reg (feature, "f5", 21, 1, NULL, 96, "arm_fpa_ext"); + tdesc_create_reg (feature, "f6", 22, 1, NULL, 96, "arm_fpa_ext"); + tdesc_create_reg (feature, "f7", 23, 1, NULL, 96, "arm_fpa_ext"); + tdesc_create_reg (feature, "fps", 24, 1, NULL, 32, "int"); + + tdesc_arm_with_m_fpa = result; +} Index: features/arm-with-m-fpa.xml =================================================================== RCS file: features/arm-with-m-fpa.xml diff -N features/arm-with-m-fpa.xml --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ features/arm-with-m-fpa.xml 9 Mar 2012 04:19:39 -0000 @@ -0,0 +1,12 @@ + + + + + + + + --------------050501030504090009070408--