From patchwork Mon Aug 8 20:29:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Evans X-Patchwork-Id: 14430 Received: (qmail 88316 invoked by alias); 8 Aug 2016 20:29:49 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 88304 invoked by uid 89); 8 Aug 2016 20:29:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD, SPF_PASS, UNWANTED_LANGUAGE_BODY autolearn=ham version=3.3.2 spammy=H*M:sk:f46d042, H*MI:sk:f46d042, defaults, 2510 X-HELO: mail-pa0-f73.google.com Received: from mail-pa0-f73.google.com (HELO mail-pa0-f73.google.com) (209.85.220.73) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 08 Aug 2016 20:29:38 +0000 Received: by mail-pa0-f73.google.com with SMTP id eq16so6061411pac.0 for ; Mon, 08 Aug 2016 13:29:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:message-id:date:subject:from:to; bh=4OQjRaHAN7qws/aunRSpPW/aYSsN3okLsXMyChHO7iE=; b=GnAzbX02cnF3ferFiTko1UfrOAqZYFtqXgfhRQE55mBlorYY7qbetPTqcqHEdKwYl/ I7PhLx17Ykui3xdQ9BGBdj6HtgzF7Ptl+DNw1FDqH8TBfnCQnFCFXrQmGBB7xUBC/Qbk QYlJsBxXgRjEP3gYmKp4epbSFSJTSxBv3WVGIUaQt+hXMJefrJreMIlI9oUkfaOf9fLd 2ffKEqtu5Q9dLC2xrpPusp2T5Rw8dooX2ob+4MAcZsVBVgFsAMV3RTzjwQW/dI9yFaqX tXn42SLj6SOlmOCXqkgfc1QWPI0FnUlGt6tKPbvMaMTnEWbO0d2RoyJkExFTQa+YrFMz TyGg== X-Gm-Message-State: AEkoouuAWjIUpTaCMOMnuFtQT9d2rj3odDfMYajC5GE2K2cxR/8jr1Zl8zT2Jqlh/FJYmBXF7IBFiz/IxYgEHJ867cKakdsJjdrdWLYZ8axxGOkdVV7bL0mCvicX/Qc5S1/xmwsKblOScKvjhTi/wecQ1KcVbgQ412y+j/tg3E8Hy0lXiFhRsg== MIME-Version: 1.0 X-Received: by 10.66.84.33 with SMTP id v1mr73887828pay.10.1470688176361; Mon, 08 Aug 2016 13:29:36 -0700 (PDT) Message-ID: Date: Mon, 08 Aug 2016 20:29:36 +0000 Subject: [PATCH 2/2] Fix backward compatibility in target feature specs From: Doug Evans To: gdb-patches@sourceware.org, palves@redhat.com X-IsSubscribed: yes Hi. Per discussion here: https://sourceware.org/ml/gdb-patches/2016-08/msg00103.html this patch restores making "end" a required spec, and defaults single bit fields to type "bool". This also fixes a typo in 32bit-mpx.xml, and adds a specific type to the "preserved" and "enabled" fields to minimize changes in the generated files. I think the size of _bndcfgu is wrong in 32bit-mpx.xml, but fixing that is the topic of a separate patch. 2016-08-08 Doug Evans * features/aarch64-core.xml (cpsr_flags): Elide "type" and specify "end" in all fields. * features/aarch64.c: Regenerate. * features/i386/32bit-mpx.xml (_bndcfgu): Specify type of "preserved" and "enabled" fields. Correct size of "enabled" field. * features/i386/64bit-mpx.xml (_bndcfgu): Specify type of "preserved" and "enabled" fields. * features/i386/i386-avx-mpx-linux.c: Regenerate. * features/i386/i386-avx-mpx.c: Regenerate. * features/i386/i386-avx512-linux.c: Regenerate. * features/i386/i386-avx512.c: Regenerate. * features/i386/i386-mpx-linux.c: Regenerate. * features/i386/i386-mpx.c: Regenerate. * xml-tdesc.c (tdesc_start_field): Require "end" spec. Single bit fields default to "bool" type. diff --git a/gdb/features/aarch64-core.xml b/gdb/features/aarch64-core.xml index 8f96296..7ff064d 100644 --- a/gdb/features/aarch64-core.xml +++ b/gdb/features/aarch64-core.xml @@ -44,23 +44,23 @@ - + - + - - - - + + + + - - + + - - - - + + + + diff --git a/gdb/features/aarch64.c b/gdb/features/aarch64.c index cec6956..e9eaed8 100644 --- a/gdb/features/aarch64.c +++ b/gdb/features/aarch64.c @@ -19,10 +19,10 @@ initialize_tdesc_aarch64 (void) feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.core"); type = tdesc_create_flags (feature, "cpsr_flags", 4); tdesc_add_flag (type, 0, "SP"); - tdesc_add_bitfield (type, "", 1, 1); + tdesc_add_flag (type, 1, ""); tdesc_add_bitfield (type, "EL", 2, 3); tdesc_add_flag (type, 4, "nRW"); - tdesc_add_bitfield (type, "", 5, 5); + tdesc_add_flag (type, 5, ""); tdesc_add_flag (type, 6, "F"); tdesc_add_flag (type, 7, "I"); tdesc_add_flag (type, 8, "A"); diff --git a/gdb/features/i386/32bit-mpx.xml b/gdb/features/i386/32bit-mpx.xml index b1c0615..8d319cf 100644 --- a/gdb/features/i386/32bit-mpx.xml +++ b/gdb/features/i386/32bit-mpx.xml @@ -25,8 +25,10 @@ - - + + + diff --git a/gdb/features/i386/64bit-mpx.xml b/gdb/features/i386/64bit-mpx.xml index 279b537..877cc0f 100644 --- a/gdb/features/i386/64bit-mpx.xml +++ b/gdb/features/i386/64bit-mpx.xml @@ -25,8 +25,9 @@ - - + + + diff --git a/gdb/features/i386/i386-avx-mpx-linux.c b/gdb/features/i386/i386-avx-mpx-linux.c index 941f2b3..4b27bfc 100644 --- a/gdb/features/i386/i386-avx-mpx-linux.c +++ b/gdb/features/i386/i386-avx-mpx-linux.c @@ -168,7 +168,7 @@ initialize_tdesc_i386_avx_mpx_linux (void) tdesc_add_bitfield (type, "base", 12, 31); tdesc_add_bitfield (type, "reserved", 2, 11); tdesc_add_bitfield (type, "preserved", 1, 1); - tdesc_add_bitfield (type, "enabled", 0, 1); + tdesc_add_bitfield (type, "enabled", 0, 0); type = tdesc_create_union (feature, "cfgu"); field_type = tdesc_named_type (feature, "data_ptr"); diff --git a/gdb/features/i386/i386-avx-mpx.c b/gdb/features/i386/i386-avx-mpx.c index d822aac..b27b40a 100644 --- a/gdb/features/i386/i386-avx-mpx.c +++ b/gdb/features/i386/i386-avx-mpx.c @@ -163,7 +163,7 @@ initialize_tdesc_i386_avx_mpx (void) tdesc_add_bitfield (type, "base", 12, 31); tdesc_add_bitfield (type, "reserved", 2, 11); tdesc_add_bitfield (type, "preserved", 1, 1); - tdesc_add_bitfield (type, "enabled", 0, 1); + tdesc_add_bitfield (type, "enabled", 0, 0); type = tdesc_create_union (feature, "cfgu"); field_type = tdesc_named_type (feature, "data_ptr"); diff --git a/gdb/features/i386/i386-avx512-linux.c b/gdb/features/i386/i386-avx512-linux.c index 47a3319..0d3ab22 100644 --- a/gdb/features/i386/i386-avx512-linux.c +++ b/gdb/features/i386/i386-avx512-linux.c @@ -168,7 +168,7 @@ initialize_tdesc_i386_avx512_linux (void) tdesc_add_bitfield (type, "base", 12, 31); tdesc_add_bitfield (type, "reserved", 2, 11); tdesc_add_bitfield (type, "preserved", 1, 1); - tdesc_add_bitfield (type, "enabled", 0, 1); + tdesc_add_bitfield (type, "enabled", 0, 0); type = tdesc_create_union (feature, "cfgu"); field_type = tdesc_named_type (feature, "data_ptr"); diff --git a/gdb/features/i386/i386-avx512.c b/gdb/features/i386/i386-avx512.c index 6e8cb55..1cb68a1 100644 --- a/gdb/features/i386/i386-avx512.c +++ b/gdb/features/i386/i386-avx512.c @@ -163,7 +163,7 @@ initialize_tdesc_i386_avx512 (void) tdesc_add_bitfield (type, "base", 12, 31); tdesc_add_bitfield (type, "reserved", 2, 11); tdesc_add_bitfield (type, "preserved", 1, 1); - tdesc_add_bitfield (type, "enabled", 0, 1); + tdesc_add_bitfield (type, "enabled", 0, 0); type = tdesc_create_union (feature, "cfgu"); field_type = tdesc_named_type (feature, "data_ptr"); diff --git a/gdb/features/i386/i386-mpx-linux.c b/gdb/features/i386/i386-mpx-linux.c index 298b7ff..43ea192 100644 --- a/gdb/features/i386/i386-mpx-linux.c +++ b/gdb/features/i386/i386-mpx-linux.c @@ -158,7 +158,7 @@ initialize_tdesc_i386_mpx_linux (void) tdesc_add_bitfield (type, "base", 12, 31); tdesc_add_bitfield (type, "reserved", 2, 11); tdesc_add_bitfield (type, "preserved", 1, 1); - tdesc_add_bitfield (type, "enabled", 0, 1); + tdesc_add_bitfield (type, "enabled", 0, 0); type = tdesc_create_union (feature, "cfgu"); field_type = tdesc_named_type (feature, "data_ptr"); diff --git a/gdb/features/i386/i386-mpx.c b/gdb/features/i386/i386-mpx.c index c19af55..e832d2e 100644 --- a/gdb/features/i386/i386-mpx.c +++ b/gdb/features/i386/i386-mpx.c @@ -153,7 +153,7 @@ initialize_tdesc_i386_mpx (void) tdesc_add_bitfield (type, "base", 12, 31); tdesc_add_bitfield (type, "reserved", 2, 11); tdesc_add_bitfield (type, "preserved", 1, 1); - tdesc_add_bitfield (type, "enabled", 0, 1); + tdesc_add_bitfield (type, "enabled", 0, 0); type = tdesc_create_union (feature, "cfgu"); field_type = tdesc_named_type (feature, "data_ptr"); diff --git a/gdb/xml-tdesc.c b/gdb/xml-tdesc.c index aa58385..eeaf79b 100644 --- a/gdb/xml-tdesc.c +++ b/gdb/xml-tdesc.c @@ -382,13 +382,19 @@ tdesc_start_field (struct gdb_xml_parser *parser, { struct tdesc_type *t = data->current_type; + /* Older versions of gdb can't handle elided end values. + Stick with that for now, to help ensure backward compatibility. + E.g., If a newer gdbserver is talking to an older gdb. */ + if (end == -1) + gdb_xml_error (parser, _("Missing end value")); + if (data->current_type_size == 0) gdb_xml_error (parser, _("Bitfields must live in explicitly sized types")); if (field_type_id != NULL && strcmp (field_type_id, "bool") == 0 - && !(start == end || end == -1)) + && start != end) { gdb_xml_error (parser, _("Boolean fields must be one bit in size")); @@ -400,29 +406,20 @@ tdesc_start_field (struct gdb_xml_parser *parser, "64 bits (unsupported)"), field_name); - if (end != -1) - { - /* Assume that the bit numbering in XML is "lsb-zero". Most - architectures other than PowerPC use this ordering. In the - future, we can add an XML tag to indicate "msb-zero" - numbering. */ - if (start > end) - gdb_xml_error (parser, _("Bitfield \"%s\" has start after end"), - field_name); - if (end >= data->current_type_size * TARGET_CHAR_BIT) - gdb_xml_error (parser, - _("Bitfield \"%s\" does not fit in struct")); - } + /* Assume that the bit numbering in XML is "lsb-zero". Most + architectures other than PowerPC use this ordering. In the + future, we can add an XML tag to indicate "msb-zero" numbering. */ + if (start > end) + gdb_xml_error (parser, _("Bitfield \"%s\" has start after end"), + field_name); + if (end >= data->current_type_size * TARGET_CHAR_BIT) + gdb_xml_error (parser, + _("Bitfield \"%s\" does not fit in struct")); - if (end == -1) - { - if (field_type != NULL) - tdesc_add_typed_bitfield (t, field_name, start, start, field_type); - else - tdesc_add_flag (t, start, field_name); - } - else if (field_type != NULL) + if (field_type != NULL) tdesc_add_typed_bitfield (t, field_name, start, end, field_type); + else if (start == end) + tdesc_add_flag (t, start, field_name); else tdesc_add_bitfield (t, field_name, start, end); }