From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=cYMMnb9B; spf=pass (domain: linaro.org, ip: 209.85.128.66, mailfrom: leif.lindholm@linaro.org) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by groups.io with SMTP; Tue, 01 Oct 2019 02:58:42 -0700 Received: by mail-wm1-f66.google.com with SMTP id r19so2613697wmh.2 for ; Tue, 01 Oct 2019 02:58:41 -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:content-transfer-encoding:in-reply-to :user-agent; bh=8vc2qyKfLhtmO/KYa8/HwxVYdLf8VySmfXco8PUT0Lo=; b=cYMMnb9BSde0c3f0DuVB7R2KYtH/jpw9GCTUI69nk6h9l9503mzySkPIw5HpXhRm90 2H7FSn71cgYV0bxHWevLpHn7rX+e86lh4210hJgFtGN9rgGJckhEdIg+QgWGlexiobZl JMo6YPrJu9Lp06JUFQYqxjVolfz3EQGw21RSN4Je0vy81r7Gqm0vUnIBx1i1wA3eHn6s dPYluepKf5Aygry8tWznTbVATFJbGIgpwe85iedXJUPrnHV8Gf8D+7SB/ZftH+BcRLHT azwAMI793dX2Pj4n4jzQbl6Hx6apcV+5uZzwK5aoSG1bkWa95UchFmBha0n7k59L3zA+ j3eA== 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:content-transfer-encoding :in-reply-to:user-agent; bh=8vc2qyKfLhtmO/KYa8/HwxVYdLf8VySmfXco8PUT0Lo=; b=TBFsO+OlzlENEhOFO1Zb25kJR6cT+lPu2ik1Psh/Z57ZFLAyhD8xiVePiLN1pct0Tm 03Q/qaqfMDMaC2csLZB5uQxvul0UnoanXWveQEk9h7/9O6Yx5rvqXtOcrrZd2j7D4Lvh 6ya4lMgY5FWxqSMU1OAQGWdK3mFqD7AM4qGpXBQNKwcr4ohO3bMzZNEbtO3zxGeSb+jb dNkho7zNTJkDer72y2zkwdsAKjQ1d6q7tw6NjPfLqITnbQy+lbeRzLwxnmueg3pfZF5r JnMzatNlfWJ99/9if5A47cr1uIONS34QLTPdqXyhpzqz70alj1S2ZikQRpnBst/NlvAd fWUA== X-Gm-Message-State: APjAAAUTC6FW2ZK81gC8b/SK4fQp3PIWfNGvBznRdmpjoj90g8r/18nF K7iCozolCKbcJ45lrUHi2fNocw== X-Google-Smtp-Source: APXvYqxSC+OL4Sn0hE7IUcct2s6+8XYTSQlRoKjxnKQUkpKJ/mix3mHAa79ejcXBq387vC3g7vsv9g== X-Received: by 2002:a1c:6607:: with SMTP id a7mr3006949wmc.125.1569923920629; Tue, 01 Oct 2019 02:58:40 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id c8sm11565532wrr.49.2019.10.01.02.58.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Oct 2019 02:58:39 -0700 (PDT) Date: Tue, 1 Oct 2019 10:58:38 +0100 From: "Leif Lindholm" To: Laszlo Ersek Cc: Philippe =?iso-8859-1?Q?Mathieu-Daud=E9?= , devel@edk2.groups.io, Ard Biesheuvel , Bob Feng , Liming Gao Subject: Re: [edk2-devel] [PATCH 1/1] BaseTools: use stdint.h for GCC ProcessorBind.h typedefs Message-ID: <20191001095838.GS25504@bivouac.eciton.net> References: <20190926192818.31119-1-leif.lindholm@linaro.org> MIME-Version: 1.0 In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Thanks all - pushed as 5be5439a5a4e. (And special thanks to Laszlo for the below.) On Tue, Oct 01, 2019 at 12:01:31AM +0200, Laszlo Ersek wrote: > On 09/27/19 12:06, Philippe Mathieu-Daudé wrote: > > On 9/26/19 9:28 PM, Leif Lindholm wrote: > >> The AArch64 definitions of UINT64/INT64 differ from the X64 ones. > >> Since this is on the tool side, doing like X64 and picking the > >> definitions from stdint.h feels like a better idea than hardcoding > >> them. So copy the pattern from X64/ProcesorBind.h. > > > > Typo: X64/ProcessorBind.h ('s' missing). > > > >> > >> Cc: Ard Biesheuvel > >> Cc: Bob Feng > >> Cc: Liming Gao > >> Cc: Laszlo Ersek > >> Signed-off-by: Leif Lindholm > >> --- > >> > >> This was triggered by one of the Risc-V patches which may need to end up > >> being modified to the point where this issue goes away, but the current > >> situation seems suboptimal. (Do you use %llx or %lx to print an Elf64_Addr > >> on a 64-bit LP architecture?) > > > > What is the answer? :) > > For a hosted C99 program, you cast it to uint64_t, and print it with > > "%"PRIx64 > > (Note: "uint64_t" is an optional type, per C99. > > """ > However, if an implementation provides integer types with widths of 8, > 16, 32, or 64 bits, no padding bits, and (for the signed types) that > have a two’s complement representation, it shall define the > corresponding typedef names. > """ > > The existence of Elf64_Addr suggests the implementation is like that, > hence we can assume "uint64_t". Otherwise, we'd have to use > "uint_least64_t" and "%"PRIxLEAST64.) > > > When restricted to C89, you can only use "%lx" and "unsigned long", and > you also have to rely on -- for example -- SUSv2 (from 1997 -- the last > Single Unix Spec defined in terms of C89), for ensuring / selecting the > XBS5_LP64_OFF64, or XBS5_LPBIG_OFFBIG compilation environments. > > (SUSv2 defines uint64_t, so you could use that in itself, but SUSv2 > defines no matching format string macros, for printing uint64_t.) > > How you print a 64-bit unsigned integer in Visual Studio, I can't say. > It's not fully C99 conformant, it's likely also not SUSv2 conformant (in > case we wanted to rely on C89 + SUSv2); so I have no idea. It's likely > documented in MSDN or some place similar. > > Thanks > Laszlo > > > > >> > >> BaseTools/Source/C/Include/AArch64/ProcessorBind.h | 26 ++++++++++---------- > >> 1 file changed, 13 insertions(+), 13 deletions(-) > >> > >> diff --git a/BaseTools/Source/C/Include/AArch64/ProcessorBind.h b/BaseTools/Source/C/Include/AArch64/ProcessorBind.h > >> index bfaf1e28e446..dfa725b2e363 100644 > >> --- a/BaseTools/Source/C/Include/AArch64/ProcessorBind.h > >> +++ b/BaseTools/Source/C/Include/AArch64/ProcessorBind.h > >> @@ -41,21 +41,21 @@ > >> typedef signed char INT8; > >> #else > >> // > >> - // Assume standard AARCH64 alignment. > >> + // Use ANSI C 2000 stdint.h integer width declarations > >> // > >> - typedef unsigned long long UINT64; > >> - typedef long long INT64; > >> - typedef unsigned int UINT32; > >> - typedef int INT32; > >> - typedef unsigned short UINT16; > >> - typedef unsigned short CHAR16; > >> - typedef short INT16; > >> - typedef unsigned char BOOLEAN; > >> - typedef unsigned char UINT8; > >> - typedef char CHAR8; > >> - typedef signed char INT8; > >> + #include > >> + typedef uint8_t BOOLEAN; > >> + typedef int8_t INT8; > >> + typedef uint8_t UINT8; > >> + typedef int16_t INT16; > >> + typedef uint16_t UINT16; > >> + typedef int32_t INT32; > >> + typedef uint32_t UINT32; > >> + typedef int64_t INT64; > >> + typedef uint64_t UINT64; > >> + typedef char CHAR8; > >> + typedef uint16_t CHAR16; > >> > >> - #define UINT8_MAX 0xff > >> #endif > >> > >> /// > >> > > > > Reviewed-by: Philippe Mathieu-Daude > > >