From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:4864:20::342; helo=mail-wm1-x342.google.com; envelope-from=leif.lindholm@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 4C9B9211E2EF4 for ; Tue, 26 Mar 2019 05:19:11 -0700 (PDT) Received: by mail-wm1-x342.google.com with SMTP id a188so12629421wmf.3 for ; Tue, 26 Mar 2019 05:19:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=e8F46K+F8BpBw5C79hHsU3Fo8holQdCRoG2ZIgSRvZ4=; b=BJZQgr8ttadTxx6lZuKEFa2FgBaLb1a+bJVj9uRBa4En8ecwNyG72NRk17INxs94E1 JStFiLs0mY3RLu842CWjHroUmCSRp6l+e5wvZqpwSFlcajCJrXzhknn42mZpDFWGb0e5 1EpeudGWfjYn3UlG64i32TEZY+11s7XOO4kVAr1/VmfnpREBblAhquA82LSr3EDhJjw+ rqGCkpHMSLGI2JB8ObiEZFuf8FNqMGFtiuI4/N1foS7I3Ec6h81pOUnYdCFLzRasuG1t CHQiEO82ROMuIBXrL7swjDiSgMunhYL8qp4sDmDfV5QZM0txVPFW6USjjypDvZmp345i yMsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=e8F46K+F8BpBw5C79hHsU3Fo8holQdCRoG2ZIgSRvZ4=; b=Mdt9bm9Cmz6Pyyt8fPdjMGeRV/smVKSnN/jogqnHcX3njtIxvJmvfzXU+k7+M7rVaE Xk4/+Pb50sT74Qx4vtfxFyqq0LPLBEmEIiMaq+XggNT1lIvPvGjPJ6aEnx+Laa+v+gRi JHZ5/5Dy4RpBq683O7j3ud+vdCQMlMl1FfZt6YuUgNTQBctg/RvmHqMbAdS74RfmH8AB t4jr7vEPHoAtjWfLs/JqfUOZ+bjGkBFVNu3TiHTedyE2Syo/yMzvTPQwG3rgMiCTRRh+ V+Xe4X08PcFUoBheG0O5FyK2Dj0PaZBnAK9OgcSk3SRheTkCNlu4VzHQ2H9H2+DqRabF UezQ== X-Gm-Message-State: APjAAAXoFuNkV5funhMo4X+UfijFlBs+29uf7hjweMmRzbIFmI3JGkwb DkF6Dvp/8seRG5uKOoI8uiIcLQ== X-Google-Smtp-Source: APXvYqzzFMuYJ+HNUAuzz4+78oKBXHjLdEF1SpHArGuJLJ6Ycuowg38Ig65Mb+Wvi6eDP1GDdyCr3w== X-Received: by 2002:a05:600c:219:: with SMTP id 25mr8588247wmi.7.1553602748873; Tue, 26 Mar 2019 05:19:08 -0700 (PDT) Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id q2sm27728193wrd.46.2019.03.26.05.19.07 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Mar 2019 05:19:08 -0700 (PDT) Date: Tue, 26 Mar 2019 12:19:06 +0000 From: Leif Lindholm To: Zhichao Gao Cc: edk2-devel@lists.01.org, Ard Biesheuvel , Liming Gao , Sean Brogan , Michael Turner , Bret Barkelew Message-ID: <20190326121906.uke2slmodkqvwvgy@bivouac.eciton.net> References: <20190321140459.18304-1-zhichao.gao@intel.com> <20190321140459.18304-9-zhichao.gao@intel.com> MIME-Version: 1.0 In-Reply-To: <20190321140459.18304-9-zhichao.gao@intel.com> User-Agent: NeoMutt/20170113 (1.7.2) Subject: Re: [PATCH V4 08/17] ArmPkg/SemiHostingDebugLib: Add new APIs X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Mar 2019 12:19:12 -0000 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Zhichao, Apologies for delay in responding, due to holiday and stuff. On the whole this looks fine (one comment below), but I don't actually have any platform on which to test this. Ard: maybe it's time to retire this component? On Thu, Mar 21, 2019 at 10:04:50PM +0800, Zhichao Gao wrote: > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1395 > > Add new APIs' implementation (DebugVPrint, DebugBPrint) > in the DebugLib instance. These APIs would expose print > routines with VaList parameter and BaseList parameter. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Zhichao Gao > Cc: Leif Lindholm > Cc: Ard Biesheuvel > Cc: Liming Gao > Cc: Sean Brogan > Cc: Michael Turner > Cc: Bret Barkelew > --- > ArmPkg/Library/SemiHostingDebugLib/DebugLib.c | 106 ++++++++++++++++++++++++-- > 1 file changed, 101 insertions(+), 5 deletions(-) > > diff --git a/ArmPkg/Library/SemiHostingDebugLib/DebugLib.c b/ArmPkg/Library/SemiHostingDebugLib/DebugLib.c > index ec03edb774..a368dd43b8 100644 > --- a/ArmPkg/Library/SemiHostingDebugLib/DebugLib.c > +++ b/ArmPkg/Library/SemiHostingDebugLib/DebugLib.c > @@ -1,7 +1,7 @@ > /** @file > UEFI Debug Library that uses PrintLib to send messages to STDERR. > > - Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.
> + Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
> Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
> This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD License > @@ -27,6 +27,12 @@ > // > #define MAX_DEBUG_MESSAGE_LENGTH 0x100 > > +// > +// VA_LIST can not initialize to NULL for all compiler, so we use this to > +// indicate a null VA_LIST > +// > +VA_LIST mVaListNull; I would prefer if this was marked STATIC. If you feel strongly otherwise, leave it as is. Either way: Reviewed-by: Leif Lindholm / Leif > + > /** > > Prints a debug message to the debug output device if the specified error level is enabled. > @@ -48,9 +54,41 @@ DebugPrint ( > IN CONST CHAR8 *Format, > ... > ) > +{ > + VA_LIST Marker; > + > + VA_START (Marker, Format); > + DebugVPrint (ErrorLevel, Format, Marker); > + VA_END (Marker); > +} > + > + > +/** > + Prints a debug message to the debug output device if the specified > + error level is enabled base on Null-terminated format string and a > + VA_LIST argument list or a BASE_LIST argument list. > + > + If any bit in ErrorLevel is also set in DebugPrintErrorLevelLib function > + GetDebugPrintErrorLevel (), then print the message specified by Format and > + the associated variable argument list to the debug output device. > + > + If Format is NULL, then ASSERT(). > + > + @param ErrorLevel The error level of the debug message. > + @param Format Format string for the debug message to print. > + @param VaListMarker VA_LIST marker for the variable argument list. > + @param BaseListMarker BASE_LIST marker for the variable argument list. > + > +**/ > +VOID > +DebugPrintMarker ( > + IN UINTN ErrorLevel, > + IN CONST CHAR8 *Format, > + IN VA_LIST VaListMarker, > + IN BASE_LIST BaseListMarker > + ) > { > CHAR8 AsciiBuffer[MAX_DEBUG_MESSAGE_LENGTH]; > - VA_LIST Marker; > > // > // If Format is NULL, then ASSERT(). > @@ -67,14 +105,72 @@ DebugPrint ( > // > // Convert the DEBUG() message to a Unicode String > // > - VA_START (Marker, Format); > - AsciiVSPrint (AsciiBuffer, sizeof (AsciiBuffer), Format, Marker); > - VA_END (Marker); > + if (BaseListMarker == NULL) { > + AsciiVSPrint (AsciiBuffer, sizeof (AsciiBuffer), Format, VaListMarker); > + } else { > + AsciiBSPrint (AsciiBuffer, sizeof (AsciiBuffer), Format, BaseListMarker); > + } > > SemihostWriteString (AsciiBuffer); > } > > > +/** > + Prints a debug message to the debug output device if the specified > + error level is enabled. > + > + If any bit in ErrorLevel is also set in DebugPrintErrorLevelLib function > + GetDebugPrintErrorLevel (), then print the message specified by Format and > + the associated variable argument list to the debug output device. > + > + If Format is NULL, then ASSERT(). > + > + @param ErrorLevel The error level of the debug message. > + @param Format Format string for the debug message to print. > + @param VaListMarker VA_LIST marker for the variable argument list. > + > +**/ > +VOID > +EFIAPI > +DebugVPrint ( > + IN UINTN ErrorLevel, > + IN CONST CHAR8 *Format, > + IN VA_LIST VaListMarker > + ) > +{ > + DebugPrintMarker (ErrorLevel, Format, VaListMarker, NULL); > +} > + > + > +/** > + Prints a debug message to the debug output device if the specified > + error level is enabled. > + This function use BASE_LIST which would provide a more compatible > + service than VA_LIST. > + > + If any bit in ErrorLevel is also set in DebugPrintErrorLevelLib function > + GetDebugPrintErrorLevel (), then print the message specified by Format and > + the associated variable argument list to the debug output device. > + > + If Format is NULL, then ASSERT(). > + > + @param ErrorLevel The error level of the debug message. > + @param Format Format string for the debug message to print. > + @param BaseListMarker BASE_LIST marker for the variable argument list. > + > +**/ > +VOID > +EFIAPI > +DebugBPrint ( > + IN UINTN ErrorLevel, > + IN CONST CHAR8 *Format, > + IN BASE_LIST BaseListMarker > + ) > +{ > + DebugPrintMarker (ErrorLevel, Format, mVaListNull, BaseListMarker); > +} > + > + > /** > > Prints an assert message containing a filename, line number, and description. > -- > 2.16.2.windows.1 >