From patchwork Fri Oct 20 19:15:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78286 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 EDA57386076C for ; Fri, 20 Oct 2023 19:16:32 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd34.google.com (mail-io1-xd34.google.com [IPv6:2607:f8b0:4864:20::d34]) by sourceware.org (Postfix) with ESMTPS id 807523857722 for ; Fri, 20 Oct 2023 19:16:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 807523857722 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 807523857722 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d34 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697829363; cv=none; b=YryfYP6/wBnE+K0NRtUmNq5Wt/ZnHr19+PK5TvacjPtP08GvH0kGYDteIo/73hYOwh79HGcYxRAx4rXrgbuBth2B6+57OG7PYQFjHoILKQIDzYgf71WLzIrFq2SVJuoEoT/YCVM1vMCeYXH0ROV3BmA0AWxPvvP8o1F9Kk3iN3s= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697829363; c=relaxed/simple; bh=82Txg0l21DZ6S3ITLNUUi0NK1Gp1MNlFK7KkF3U8klc=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=bBR5KlBww95id5oXV5WImL80imPY4vcN5qscVBS3ztWrmCnZh7V+t859QWRJWPX7BIva93xFzqajTpYUIZFT4uUMVCc+HbGhmIrNNpIQGsninwxoE1rdseSnmiCRm2e9C48hfIeohOgDbacPvDQWVHSM/8Gxpaw4JEnsd60NEOA= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd34.google.com with SMTP id ca18e2360f4ac-7a694a365d9so45821539f.0 for ; Fri, 20 Oct 2023 12:16:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1697829360; x=1698434160; darn=sourceware.org; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Q2KwESGVE8n28M3782IUtntX6P8Xu7wUzmJCy4fZjBc=; b=hJ2OKn1o+5x+me8M/NvN7icF4vsI8xO2eKIxxjQ4QrqsNU/2KjJEKeGlKYxjw+gTgQ 9m8aY4Gx9UuxJwOMoiAO93cAAB38SwjEoDs0CEixII/3IAyTtCMPmikzKPpTob9HCyfv PJcdVX7DQESYsyeG5azH3123en3SixkceYXG0TdjTEsGNfbOW9rR7ARztHLUCkgdxrO6 VNvpwLPcH21Dx6pW3Fmy59xm5vChqGMWpJbXaFPfvVSrdpmuc7nvy6L5qgRaDOWKb10t qJtISh8D/3MJ25aXgHNUapmsLEizFoJMnJN/1ed32opruhA+Wcx30/Puw6PuL/RfqB6y CQgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697829360; x=1698434160; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q2KwESGVE8n28M3782IUtntX6P8Xu7wUzmJCy4fZjBc=; b=FCIRq7RnLD2gXsPqy8viCc6PU8mawBINJ8YeXc4R8W3zg1oKxGtX6KJCVNWoNntG+q 7t9xcJnRUHOkKA0DZXY/BOBp2coyZOD5V9TrI4Ue3bnNzW9Q92tfb1RMADBSdVugojTE NQIN5CjyptvY27bzfuAt8CSp9t9TNX4KLmRK8qmjURVR9/1sHE1I4F+AzcMZZf1D/zZk OrrFI4G3F2+cW8GNAoPwxMT/xC3IctkO+uAdse+0sBD0WbdNUL0hqm8l8RMcHWSu6dLp FkuYrzomqYIhW1utzvK8acO4V6kCJciwBdcobM0aVCSa/18gEeMOnWVmD0Tv2fcPM8g3 ITbw== X-Gm-Message-State: AOJu0YxyXyYoexxT4imDnTYzhutpJM7StvCvtzxHCe4ZhimscI9Gspql R43PGxfJGHjbqsdBuW2z5KGREmgWG8Se6e+hKhRw9A== X-Google-Smtp-Source: AGHT+IFqTQkGsIkrUfOD1yDTakzOx7gopjnyLQ9KizLMQBqWqPB/elxCOgwOgbcgTC6VuKnrPxEkwA== X-Received: by 2002:a05:6602:2c42:b0:798:3e95:274f with SMTP id x2-20020a0566022c4200b007983e95274fmr3688379iov.19.1697829360659; Fri, 20 Oct 2023 12:16:00 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id q15-20020a0566380ecf00b00430bb70004dsm701765jas.103.2023.10.20.12.16.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Oct 2023 12:16:00 -0700 (PDT) From: Tom Tromey Date: Fri, 20 Oct 2023 13:15:54 -0600 Subject: [PATCH 3/5] Fix "finish" for vector types on ARM MIME-Version: 1.0 Message-Id: <20231020-arm-params-v1-3-19d4c89c11b6@adacore.com> References: <20231020-arm-params-v1-0-19d4c89c11b6@adacore.com> In-Reply-To: <20231020-arm-params-v1-0-19d4c89c11b6@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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.30 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 On a big-endian ARM system, "finish" printed the wrong value when finishing from a function that returned a vector type. Similarly, calls to a function also resulted in the wrong value being passed. I think both the read- and write-functions here should ignore the endian-ness. I tested this using the AdaCore internal test suite; the test case that caught this is identical to gdb.base/gnu_vector.exp. --- gdb/arm-tdep.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index ab0df0f16a8..493e5b84758 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -9777,29 +9777,22 @@ arm_neon_quad_read (struct gdbarch *gdbarch, readable_regcache *regcache, { char name_buf[4]; gdb_byte reg_buf[8]; - int offset, double_regnum; + int double_regnum; enum register_status status; xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1); double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf, strlen (name_buf)); - /* d0 is always the least significant half of q0. */ - if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) - offset = 8; - else - offset = 0; - status = regcache->raw_read (double_regnum, reg_buf); if (status != REG_VALID) return status; - memcpy (buf + offset, reg_buf, 8); + memcpy (buf, reg_buf, 8); - offset = 8 - offset; status = regcache->raw_read (double_regnum + 1, reg_buf); if (status != REG_VALID) return status; - memcpy (buf + offset, reg_buf, 8); + memcpy (buf + 8, reg_buf, 8); return REG_VALID; } @@ -9874,21 +9867,14 @@ arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buf) { char name_buf[4]; - int offset, double_regnum; + int double_regnum; xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1); double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf, strlen (name_buf)); - /* d0 is always the least significant half of q0. */ - if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) - offset = 8; - else - offset = 0; - - regcache->raw_write (double_regnum, buf + offset); - offset = 8 - offset; - regcache->raw_write (double_regnum + 1, buf + offset); + regcache->raw_write (double_regnum, buf); + regcache->raw_write (double_regnum + 1, buf + 8); } /* Store the contents of BUF to the MVE pseudo register REGNUM. */