On Thu, Mar 17, 2016 at 12:16:31PM +0000, Leif Lindholm wrote:
> So, as further fallout from my -Weverything experiments, I've come
> across this...
>
> Ia32 and X64 ProcessorBind.h (BaseTools and MdePkg) both define CHAR8 as
> 'char'.
> ARM and AArch64 both do the same.
>
> However, default 'char' signedness is unsigned in the ARM
> architectures, and signed in the others.
>
> Meanwhile, the UEFI specification describes CHAR8 as
> ---
> 1-byte character. Unless otherwise specified, all 1-byte or ASCII characters
> and
> strings are stored in 8-bit ASCII encoding format, using the
> ISO-Latin-1 character
> set.
> ---
>
> Now, ISO-Latin-1 holds values all the way up to 255, which clearly
> does not fit into a signed 8-bit char.
>
> Would I be correct in my interpretation that Ia32/X64 should be
> defining CHAR8 as 'unsigned char', or am I losing my mind?
I'll reply to myself.
BaseTools/Conf/tools_def.template sets -funsigned-chars for X64/Ia32 -
so it is already correct for these.
Hilariously (?) ARM/AArch64 sets -fsigned-chars, making what would
otherwise be correct default behaviour broken.
Patch for the ARM architectures coming up.
/
Leif
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel