From patchwork Fri Feb 24 00:54:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hui Li X-Patchwork-Id: 65559 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EA4D7385843D for ; Fri, 24 Feb 2023 00:55:10 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 74A46385842B for ; Fri, 24 Feb 2023 00:54:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 74A46385842B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [113.200.148.30]) by gateway (Coremail) with SMTP id _____8BxttjTCvhj9l4EAA--.8201S3; Fri, 24 Feb 2023 08:54:44 +0800 (CST) Received: from localhost.localdomain (unknown [113.200.148.30]) by localhost.localdomain (Coremail) with SMTP id AQAAf8BxTL7RCvhjSBE6AA--.40123S2; Fri, 24 Feb 2023 08:54:41 +0800 (CST) From: Hui Li To: gdb-patches@sourceware.org Subject: [PATCH] gdb: LoongArch: Added support for static data member in struct Date: Fri, 24 Feb 2023 08:54:41 +0800 Message-Id: <20230224005441.9104-1-lihui@loongson.cn> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-CM-TRANSID: AQAAf8BxTL7RCvhjSBE6AA--.40123S2 X-CM-SenderInfo: 5olk3xo6or00hjvr0hdfq/ X-Coremail-Antispam: 1Uk129KBjvJXoW7uF4DXF45Ar1fKrWrXF4DXFb_yoW8Wr18pF nrua4jkr48XFs7WFWqg395AF1Sk34fGry7KFnIqw1S9Fn8t34DuFyftrWjyr15GF1rK3W3 XFWqg34DAFWUWaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj qI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUU b78YFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s 1l1IIY67AEw4v_Jr0_Jr4l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVWUCVW8JwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwA2z4 x0Y4vEx4A2jsIE14v26r4j6F4UM28EF7xvwVC2z280aVCY1x0267AKxVW8JVW8Jr1le2I2 62IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020Ex4CE44I27wAqx4xG64xvF2IEw4 CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_JrI_JrylYx0Ex4A2jsIE14v26r1j6r4UMcvj eVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwCF04k20xvY0x0EwIxGrwCFx2IqxV CFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r10 6r1rMI8E67AF67kF1VAFwI0_Jr0_JrylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxV WUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG 6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_Gr UvcSsGvfC2KfnxnUUI43ZEXa7IU1wL05UUUUU== X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, LOTS_OF_MONEY, SPF_HELO_PASS, SPF_PASS, TXREP, URI_TRY_3LD autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" As described in C++ reference [1], static data members are not part of objects of a given class type. Modified compute_struct_member () to ignore static data member so that we can get the expected result. loongson@linux:~$ cat test.c #include struct struct_01 { static unsigned a; float b;}; unsigned struct_01::a = 66; struct struct_01 struct_01_val = { 99.00 }; int check_arg_struct(struct struct_01 arg) { printf("arg.a = %d\n", arg.a); printf("arg.b = %f\n", arg.b); return 0; } int main() { check_arg_struct(struct_01_val); return 0; } loongson@linux:~$ g++ -g test.c -o test++ loongson@linux:~$ gdb test++ Without this patch: ... (gdb) start ... (gdb) p check_arg_struct(struct_01_val) arg.a = 66 arg.b = 0.000000 $1 = 0 With this patch: ... (gdb) start ... (gdb) p check_arg_struct(struct_01_val) arg.a = 66 arg.b = 99.000000 $1 = 0 [1] https://learn.microsoft.com/en-us/cpp/cpp/static-members-cpp?view=msvc-170 Signed-off-by: Hui Li Reviewed-By: Tom Tromey --- gdb/loongarch-tdep.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c index f5ddad0ba65..b380bd7e2d4 100644 --- a/gdb/loongarch-tdep.c +++ b/gdb/loongarch-tdep.c @@ -520,6 +520,10 @@ compute_struct_member (struct type *type, { for (int i = 0; i < type->num_fields (); i++) { + /* Ignore any static fields. */ + if (field_is_static (&type->field (i))) + continue; + struct type *field_type = check_typedef (type->field (i).type ()); if (field_type->code () == TYPE_CODE_INT