From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id OsIWMdE9mWfrhx0AWB0awg (envelope-from ) for ; Tue, 28 Jan 2025 15:28:01 -0500 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=bZPV2FTu; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id B01351E08E; Tue, 28 Jan 2025 15:28:01 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.0 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id B17BA1E08E for ; Tue, 28 Jan 2025 15:28:00 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3C1663858282 for ; Tue, 28 Jan 2025 20:28:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3C1663858282 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=bZPV2FTu Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id B65533857C47 for ; Tue, 28 Jan 2025 20:27:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B65533857C47 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B65533857C47 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1738096040; cv=none; b=wwKAbNvKi4lYGzxZN+QBoSVuS5iYPNIS+PwHByEWx6JG8qUwFcLP7+KLtGfPQOMG6uMzs1bqEcsxTGHzPmXrVnr0K+XYzynw86648Q40ii0HQgf/xwnUx/s9JeA4wcn1rvAGHGQwqAuC1QM1xxqT4y9x4dejG8XkosEa6XiN93g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1738096040; c=relaxed/simple; bh=TyuK/J74Ghotx4ztX9+t1dGG0Qx6tqxUV+aCdq4TN/U=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=uvMWg7M3vOM77GV4PJzKCR1LuWmCoOH1FdEHZ3SpuNW443Nwmn/i6XY1Js+tC6XGv9Ph2gmIQxVkyBdlxi2seBoFpulnfjSGunVxUZSteDvVpSyq+V7v5TBU0E7GcvS29FkDNdzZlf8NjE8VX/Go6qC2W1KnJZuGD3M5BSMOk9w= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B65533857C47 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1738096040; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=R++sucKWB/ir0KsS98eTHNsW0uaTXdA/rSFnhnS+w6k=; b=bZPV2FTul0SIAMaaDPZlrTX2IZrXG4GQ4xqVU/geypiQ7TPwXx9dSCrJW2t6qyHttcDcqY dXbTGNvQmaDxrNSdlB2GQ/gUwTdOZFMBqDEGtcT3RW2lvAuNlpZxf7Hnc62050eT63QnOg LN+aH1ejnhbQRfmm/31u9CBzvf4qC/c= Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-460-RPVCKHcmOBKr1i6rD2OnzQ-1; Tue, 28 Jan 2025 15:27:19 -0500 X-MC-Unique: RPVCKHcmOBKr1i6rD2OnzQ-1 X-Mimecast-MFC-AGG-ID: RPVCKHcmOBKr1i6rD2OnzQ Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2166855029eso116985675ad.0 for ; Tue, 28 Jan 2025 12:27:19 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738096038; x=1738700838; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=R++sucKWB/ir0KsS98eTHNsW0uaTXdA/rSFnhnS+w6k=; b=iiGHvL2+GxDo8ALuG269Tq3ovs3PxcBDKFvvxuF2Vr9WrR6rZQad0I6ohzRaSynCWE rckWRgVYoTc6vL+PAC1eDX5F5fw/kLfB4aHhKGQVvxSxyN4EaphzQLJc3BKvBbJ3PMla rGUFsfaf7sEyE85J73/b7aQm6TIHjbHy8SKAapb6Dtc0eT6JgfIZGHq68GEcFllmxPbP a0lafEW2yyzG7ark16qu+d2fz97fjRB0/cXz84vKMsZsMrO8uc+ruOWUKfgT7nqLBLln ryJqifZD7Z7tyTowl/8GsYa5U2rOG5AOv8Ain8LcQaGOt8glCmGbUKw0kuypyayDjwdD fLbA== X-Forwarded-Encrypted: i=1; AJvYcCUQZj0IKOy7CNZnPk8qvVbjOEIy+Xaw8LRbHeBltRUAIxv8uBrFfScgJlqdo4sFVQN94cgKH7N4OLZcFA==@sourceware.org X-Gm-Message-State: AOJu0YzUM49Xqb5bhLZeZRXkH2S8b6WZ7bP7qRM3lR9uFTNRiuQSBmKs o+wtMfTgBREbPZ3GC9Dojf2wCKWgLEH42vCk90dUNjgb7v4XYiEP4tt48tZZ58x9oN4F+4uVV67 68d5NSJ99RUd18YTqqX/YnfGZol95jXC5z/IMcFw82ca2jYyHiP9KPAddxKM= X-Gm-Gg: ASbGncupfFMCxOEqXFlPMWIOSxZp1FPkm7YQvoQMQ5KB6DoiwLTbZF1OwjsPFFJI5bo GpIyFUnUwNVXJkbutYPfI9KoOL20PP5tOEQC2veMhhzpTE+9o188YDwdHXr9VYkvXmEFOzkLtsQ srAWtBBW0AypjgFTy0Y6g96HmtJ5ICP3gwBHoRew/ZPGPEkSSsVEzuxE0ipSypnh1QmvUtNwkS1 9YPidvipgRXqOS140jY8GPwYny2TzjlfLcuchX1E6J+zASJpLNfFifxVvXfJdZQ+cdelHuuy6rp aS+Ytbs1IYe6ng7s X-Received: by 2002:a05:6a21:8dca:b0:1e1:96d9:a7db with SMTP id adf61e73a8af0-1ed7a49a283mr1182733637.4.1738096038255; Tue, 28 Jan 2025 12:27:18 -0800 (PST) X-Google-Smtp-Source: AGHT+IGXPxLqORnPBTumdSJdRwFYTWgm9RFsF3qqGtYjeAeRMt10SqUmiZFEY33wler+2bPETfyZrw== X-Received: by 2002:a05:6a21:8dca:b0:1e1:96d9:a7db with SMTP id adf61e73a8af0-1ed7a49a283mr1182698637.4.1738096037910; Tue, 28 Jan 2025 12:27:17 -0800 (PST) Received: from ?IPV6:2804:14d:8084:9a69::1000? ([2804:14d:8084:9a69::1000]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ac495d58478sm8693295a12.54.2025.01.28.12.27.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 28 Jan 2025 12:27:17 -0800 (PST) Message-ID: <1b66799d-486e-44ac-aab1-a51c13fa18d4@redhat.com> Date: Tue, 28 Jan 2025 17:27:14 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 11/12] gdb, gdbarch: Introduce gdbarch method to get the shadow stack pointer. To: "Schimpe, Christina" , gdb-patches@sourceware.org References: <20241220200501.324191-1-christina.schimpe@intel.com> <20241220200501.324191-12-christina.schimpe@intel.com> From: Guinevere Larsen In-Reply-To: <20241220200501.324191-12-christina.schimpe@intel.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: xdmL0eWxJHMoHC0_ci9KA9c-XdnQ3WxLwsgptMSRvwI_1738096038 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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~public-inbox=simark.ca@sourceware.org On 12/20/24 5:05 PM, Schimpe, Christina wrote: > This patch is required by the following commit. > --- Maybe others disagree (in which case go with their suggestion), but my opinion is that, because you're only adding gdbarch functionality but no one uses it yet, there's basically no chance this commit could inadvertently break something, so it is fine to merge with the next one where you make use of the feature. If these are split, I would like to have some explanation as to why it is required, but I imagine the explanation finds a better home in the next commit anyway, which is another reason why I'd join both commits. -- Cheers, Guinevere Larsen She/Her/Hers > gdb/arch-utils.c | 8 ++++++++ > gdb/arch-utils.h | 5 +++++ > gdb/gdbarch-gen.c | 22 ++++++++++++++++++++++ > gdb/gdbarch-gen.h | 6 ++++++ > gdb/gdbarch_components.py | 10 ++++++++++ > 5 files changed, 51 insertions(+) > > diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c > index a2ed2a2c011..3aedb3f2600 100644 > --- a/gdb/arch-utils.c > +++ b/gdb/arch-utils.c > @@ -1218,6 +1218,14 @@ default_gdbarch_return_value > readbuf, writebuf); > } > > +/* See arch-utils.h. */ > + > +std::optional > +default_get_shadow_stack_pointer (gdbarch *gdbarch) > +{ > + return {}; > +} > + > obstack *gdbarch_obstack (gdbarch *arch) > { > return &arch->obstack; > diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h > index b59e2ad70c2..471be9c282d 100644 > --- a/gdb/arch-utils.h > +++ b/gdb/arch-utils.h > @@ -325,4 +325,9 @@ extern enum return_value_convention default_gdbarch_return_value > struct regcache *regcache, struct value **read_value, > const gdb_byte *writebuf); > > +/* Default implementation of gdbarch default_get_shadow_stack_pointer > + method. */ > +extern std::optional default_get_shadow_stack_pointer > + (gdbarch *gdbarch); > + > #endif /* GDB_ARCH_UTILS_H */ > diff --git a/gdb/gdbarch-gen.c b/gdb/gdbarch-gen.c > index c33c476dfdb..72638f01ad7 100644 > --- a/gdb/gdbarch-gen.c > +++ b/gdb/gdbarch-gen.c > @@ -261,6 +261,7 @@ struct gdbarch > gdbarch_read_core_file_mappings_ftype *read_core_file_mappings = default_read_core_file_mappings; > gdbarch_use_target_description_from_corefile_notes_ftype *use_target_description_from_corefile_notes = default_use_target_description_from_corefile_notes; > gdbarch_shadow_stack_push_ftype *shadow_stack_push = nullptr; > + gdbarch_get_shadow_stack_pointer_ftype *get_shadow_stack_pointer = default_get_shadow_stack_pointer; > }; > > /* Create a new ``struct gdbarch'' based on information provided by > @@ -533,6 +534,7 @@ verify_gdbarch (struct gdbarch *gdbarch) > /* Skip verify of read_core_file_mappings, invalid_p == 0. */ > /* Skip verify of use_target_description_from_corefile_notes, invalid_p == 0. */ > /* Skip verify of shadow_stack_push, has predicate. */ > + /* Skip verify of get_shadow_stack_pointer, invalid_p == 0. */ > if (!log.empty ()) > internal_error (_("verify_gdbarch: the following are invalid ...%s"), > log.c_str ()); > @@ -1404,6 +1406,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) > gdb_printf (file, > "gdbarch_dump: shadow_stack_push = <%s>\n", > host_address_to_string (gdbarch->shadow_stack_push)); > + gdb_printf (file, > + "gdbarch_dump: get_shadow_stack_pointer = <%s>\n", > + host_address_to_string (gdbarch->get_shadow_stack_pointer)); > if (gdbarch->dump_tdep != NULL) > gdbarch->dump_tdep (gdbarch, file); > } > @@ -5539,3 +5544,20 @@ set_gdbarch_shadow_stack_push (struct gdbarch *gdbarch, > { > gdbarch->shadow_stack_push = shadow_stack_push; > } > + > +std::optional > +gdbarch_get_shadow_stack_pointer (struct gdbarch *gdbarch) > +{ > + gdb_assert (gdbarch != NULL); > + gdb_assert (gdbarch->get_shadow_stack_pointer != NULL); > + if (gdbarch_debug >= 2) > + gdb_printf (gdb_stdlog, "gdbarch_get_shadow_stack_pointer called\n"); > + return gdbarch->get_shadow_stack_pointer (gdbarch); > +} > + > +void > +set_gdbarch_get_shadow_stack_pointer (struct gdbarch *gdbarch, > + gdbarch_get_shadow_stack_pointer_ftype get_shadow_stack_pointer) > +{ > + gdbarch->get_shadow_stack_pointer = get_shadow_stack_pointer; > +} > diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h > index ff14a3666b9..ff511b4a9e0 100644 > --- a/gdb/gdbarch-gen.h > +++ b/gdb/gdbarch-gen.h > @@ -1783,6 +1783,8 @@ extern void set_gdbarch_use_target_description_from_corefile_notes (struct gdbar > technologies. For example, Intel's Control-flow Enforcement Technology (CET) > provides a shadow stack and indirect branch tracking. > To enable inferior calls the function shadow_stack_push has to be provided. > + The method get_shadow_stack_pointer has to be provided to enable displaced > + stepping. > > Push the address NEW_ADDR on the shadow stack and update the shadow stack > pointer. */ > @@ -1792,3 +1794,7 @@ extern bool gdbarch_shadow_stack_push_p (struct gdbarch *gdbarch); > typedef void (gdbarch_shadow_stack_push_ftype) (struct gdbarch *gdbarch, CORE_ADDR new_addr); > extern void gdbarch_shadow_stack_push (struct gdbarch *gdbarch, CORE_ADDR new_addr); > extern void set_gdbarch_shadow_stack_push (struct gdbarch *gdbarch, gdbarch_shadow_stack_push_ftype *shadow_stack_push); > + > +typedef std::optional (gdbarch_get_shadow_stack_pointer_ftype) (struct gdbarch *gdbarch); > +extern std::optional gdbarch_get_shadow_stack_pointer (struct gdbarch *gdbarch); > +extern void set_gdbarch_get_shadow_stack_pointer (struct gdbarch *gdbarch, gdbarch_get_shadow_stack_pointer_ftype *get_shadow_stack_pointer); > diff --git a/gdb/gdbarch_components.py b/gdb/gdbarch_components.py > index 52f265e8e0e..df70cb082a4 100644 > --- a/gdb/gdbarch_components.py > +++ b/gdb/gdbarch_components.py > @@ -2822,6 +2822,8 @@ Some targets support special hardware-assisted control-flow protection > technologies. For example, Intel's Control-flow Enforcement Technology (CET) > provides a shadow stack and indirect branch tracking. > To enable inferior calls the function shadow_stack_push has to be provided. > +The method get_shadow_stack_pointer has to be provided to enable displaced > +stepping. > > Push the address NEW_ADDR on the shadow stack and update the shadow stack > pointer. > @@ -2831,3 +2833,11 @@ pointer. > params=[("CORE_ADDR", "new_addr")], > predicate=True, > ) > + > +Method( > + type="std::optional", > + name="get_shadow_stack_pointer", > + params=[], > + predefault="default_get_shadow_stack_pointer", > + invalid=False, > +)