From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0118C111AC for ; Tue, 12 Mar 2024 05:45:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710222314; cv=none; b=CCvVDH8zDuDrPPIvqNkEpN+IWSsUjnEtYv3wQb67O/Jhj3FmTSIKYJBN9ZAryzXU4LZ1uH5zQxZuh4VCxGrudskl0HLmsQ7o2idgjQekE4DiUVDTN9ojiHgBuZYY9zP+AcwGf/XPHGkAuK/d8JDZZoTFJPyBxoi2V00G2ZcwONU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710222314; c=relaxed/simple; bh=GOxn/4eVruIEi7HrVevp33vbMyZtD/J7uxQzZT6p2d8=; h=Mime-Version:Content-Type:Date:Message-Id:From:To:Cc:Subject: References:In-Reply-To; b=bnYkVmkYiS1YoXl3nr94dszXOhZLplz8S36Sc5HJf2Aud56qVEylgFthjRufn5FtwdFYsbaOizthNwzVczmUXdhdtOA0ofZcIENXShOfJj2IuAF06B5LViqc+JVv3ZT1AO9Fx9Q4i16/xNmomrzQTKVDmis+2yeUaYJZQ9XHWFU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GczdepKV; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GczdepKV" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1dc1ff3ba1aso38275885ad.3 for ; Mon, 11 Mar 2024 22:45:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710222312; x=1710827112; darn=lists.linux.dev; h=in-reply-to:references:subject:cc:to:from:message-id:date :content-transfer-encoding:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=fW/EcKaMbEkneZDxVrHKCHliy210kWmaiqbzUm1tuZw=; b=GczdepKVEjrVLeD3c6F0InLdsbRnbBc8BvjAhHrs7WRk23KXonW9A4qHZOOID2+LD/ OOJn+sRRjWYmL52wy0F+8tFjBEYPhDuLue5qOnedZc3bGNhVcsgqesxibS7QTblPar6M ywFy4LmSirYpLhBHuYHRfhQJA50yRkPFqFGXah/ZmOd6mPOP51YrkHjb7EpDthqRtMcK 2aPjMNv0YSQnb05WNEvqPPGMudA08Eg0VzTyFPGUKQGCNceEiEQN/KBzOLuX8w+a60MU 8ztsAIQk3mgody6+1Eo7alckHqx3NKA5rTJxgyJMf4HDp75O/ccZ4KqBzyRVZmEShbNh KYow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710222312; x=1710827112; h=in-reply-to:references:subject:cc:to:from:message-id:date :content-transfer-encoding:mime-version:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=fW/EcKaMbEkneZDxVrHKCHliy210kWmaiqbzUm1tuZw=; b=AmfgRv6Z7Hig3JLlOdPVXag6rfOQQHDb/MNVzzUn39Xcq4/cdhO2erBPZv6KsjI4Jn ArUCLB/8pfYkzfsyCD+AQb0Ev4B7gdzqhd5/95DpTfoFuIBLFiSP3OsPSY1IZ5YM3ehc FsaU5lWlESqtj2qE2VeFbjgpQrQsfsiGw+2Kd6+JuIE6djPyhaXhliylli7QNIGvm1+H Crrlchu8vjzKix8uNc3CUDGrCKBPBJPKO3oASwtyBQ3SkLdUUfQ+WEXg+x70xq58vO53 pc3HbSj/fnUqHXz673x2gHDf77ekyGvsfF+lZqiDruEtxo5xdU1WZjS13HvkIEUrFmUC oM2Q== X-Forwarded-Encrypted: i=1; AJvYcCV52RwjcckD48TfkdLitHChnrl1Zf4iLDOu9TjHv259kb9BxMPh0mLKlebTn5jSfkdOr3yV3MHIAm6NvaEv9rtWUvJwJVEO X-Gm-Message-State: AOJu0Yzz8Fn7kc1E0i2GPumTJGkC1PMopUwToGxTjwpH5euJ4TxRY2zN puaz+yi3piuNeodT88eDS8x6H1Vlhj0wfrnl1cA4y8Gr33ciUiti X-Google-Smtp-Source: AGHT+IFv14RRSVORaVxPGv7Pgc/FfkulvwmrU9WcDb6eZGl4gISl+ryDpVeng37EST8Ipt5IeQErUQ== X-Received: by 2002:a17:902:e54f:b0:1db:5b41:c5ac with SMTP id n15-20020a170902e54f00b001db5b41c5acmr7737568plf.68.1710222312180; Mon, 11 Mar 2024 22:45:12 -0700 (PDT) Received: from localhost ([1.146.55.44]) by smtp.gmail.com with ESMTPSA id y7-20020a17090322c700b001da1fae8a73sm3335793plg.12.2024.03.11.22.45.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 Mar 2024 22:45:11 -0700 (PDT) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Tue, 12 Mar 2024 15:45:05 +1000 Message-Id: From: "Nicholas Piggin" To: "Andrew Jones" , , Cc: , , , , , , , , Subject: Re: [kvm-unit-tests PATCH v2 04/13] treewide: lib/stack: Make base_address arch specific X-Mailer: aerc 0.15.2 References: <20240305170858.395836-15-andrew.jones@linux.dev> <20240305170858.395836-19-andrew.jones@linux.dev> In-Reply-To: <20240305170858.395836-19-andrew.jones@linux.dev> On Wed Mar 6, 2024 at 3:09 AM AEST, Andrew Jones wrote: > Calculating the offset of an address is image specific, which is > architecture specific. Until now, all architectures and architecture > configurations which select CONFIG_RELOC were able to subtract > _etext, but the EFI configuration of riscv cannot (it must subtract > ImageBase). Make this function weak, such that an architecture may > override it when necessary, to accommodate the image layout. Then, > immediately supply the riscv override. > Thanks for making these changes. Looks good. For the generic parts, Reviewed-by: Nicholas Piggin Thanks, Nick > Signed-off-by: Andrew Jones > --- > lib/riscv/stack.c | 18 ++++++++++++++++++ > lib/stack.c | 8 ++++---- > lib/stack.h | 2 ++ > 3 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/lib/riscv/stack.c b/lib/riscv/stack.c > index d865594b9671..2cd7f012738b 100644 > --- a/lib/riscv/stack.c > +++ b/lib/riscv/stack.c > @@ -2,6 +2,24 @@ > #include > #include > =20 > +#ifdef CONFIG_RELOC > +extern char ImageBase, _text, _etext; > + > +bool arch_base_address(const void *rebased_addr, unsigned long *addr) > +{ > + unsigned long ra =3D (unsigned long)rebased_addr; > + unsigned long base =3D (unsigned long)&ImageBase; > + unsigned long start =3D (unsigned long)&_text; > + unsigned long end =3D (unsigned long)&_etext; > + > + if (ra < start || ra >=3D end) > + return false; > + > + *addr =3D ra - base; > + return true; > +} > +#endif > + > int arch_backtrace_frame(const void *frame, const void **return_addrs, > int max_depth, bool current_frame) > { > diff --git a/lib/stack.c b/lib/stack.c > index dd6bfa8dac6e..086fec544a81 100644 > --- a/lib/stack.c > +++ b/lib/stack.c > @@ -14,7 +14,7 @@ > #ifdef CONFIG_RELOC > extern char _text, _etext; > =20 > -static bool base_address(const void *rebased_addr, unsigned long *addr) > +bool __attribute__((weak)) arch_base_address(const void *rebased_addr, u= nsigned long *addr) > { > unsigned long ra =3D (unsigned long)rebased_addr; > unsigned long start =3D (unsigned long)&_text; > @@ -27,7 +27,7 @@ static bool base_address(const void *rebased_addr, unsi= gned long *addr) > return true; > } > #else > -static bool base_address(const void *rebased_addr, unsigned long *addr) > +bool __attribute__((weak)) arch_base_address(const void *rebased_addr, u= nsigned long *addr) > { > *addr =3D (unsigned long)rebased_addr; > return true; > @@ -45,13 +45,13 @@ static void print_stack(const void **return_addrs, in= t depth, > /* @addr indicates a non-return address, as expected by the stack > * pretty printer script. */ > if (depth > 0 && !top_is_return_address) { > - if (base_address(return_addrs[0], &addr)) > + if (arch_base_address(return_addrs[0], &addr)) > printf(" @%lx", addr); > i++; > } > =20 > for (; i < depth; i++) { > - if (base_address(return_addrs[i], &addr)) > + if (arch_base_address(return_addrs[i], &addr)) > printf(" %lx", addr); > } > printf("\n"); > diff --git a/lib/stack.h b/lib/stack.h > index 6edc84344b51..df076d94bf8f 100644 > --- a/lib/stack.h > +++ b/lib/stack.h > @@ -34,4 +34,6 @@ static inline int backtrace_frame(const void *frame, co= nst void **return_addrs, > } > #endif > =20 > +bool __attribute__((weak)) arch_base_address(const void *rebased_addr, u= nsigned long *addr); > + > #endif