[edk2] [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing EFIAPI call conv spec

Laszlo Ersek posted 1 patch 6 years, 3 months ago
Failed in applying to current master (apply log)
ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[edk2] [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing EFIAPI call conv spec
Posted by Laszlo Ersek 6 years, 3 months ago
UefiShellLevel2CommandsLib (somewhat questionably) calls the
BaseLib-internal function InternalCharToUpper().

This function is declared in "MdePkg/Library/BaseLib/BaseLibInternals.h",
which is not a public library class header. UefiShellLevel2CommandsLib
therefore duplicates the function declaration, but a mistake was made: the
EFIAPI calling convention is not spelled out on the duplicated
declaration. Therefore calls made from UefiShellLevel2CommandsLib will not
match the actual function definition in "MdePkg/Library/BaseLib/String.c",
when GCC/X64 toolchains are used.

One consequence of this is that cross-filesystem copies don't work in the
UEFI shell (see the StrniCmp() function in
"UefiShellLevel2CommandsLib.c"). From the original report:

> FS0:\efi\ubuntu\> cp grubx64.efi fs1:\
>
> cp: The source and destination are the same.

Copy the declaration from "BaseLibInternals.h" to
"UefiShellLevel2CommandsLib.c" verbatim.

Reported-by: Rebecca Cran <rebecca@bluestop.org>
Analyzed-by: Thomas Palmer <thomas.palmer@hpe.com>
Analyzed-by: Liming Gao <liming.gao@intel.com>
Ref: http://mid.mail-archive.com/47cd17d8-f022-6ca5-2f52-06a8250f8d14@cran.org.uk
Cc: Jaben Carsey <jaben.carsey@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Rebecca Cran <rebecca@bluestop.org>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Thomas Palmer <thomas.palmer@hpe.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
---
 ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c
index 7948e53cfc46..e9ce63189224 100644
--- a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c
+++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c
@@ -268,8 +268,9 @@ VerifyIntermediateDirectories (
   @return Char as an upper case character.
 **/
 CHAR16
+EFIAPI
 InternalCharToUpper (
-  IN CONST CHAR16                    Char
+  IN      CHAR16                    Char
   );
 
 /**
-- 
2.14.1.3.gb7cf6e02401b

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing EFIAPI call conv spec
Posted by Palmer, Thomas 6 years, 3 months ago
Reviewed by thomas.palmer@hpe.com


Regards,

Thomas Palmer

"I have only made this letter longer because I have not had the time to make it shorter" - Blaise Pascal

-----Original Message-----
From: Laszlo Ersek [mailto:lersek@redhat.com] 
Sent: Saturday, January 6, 2018 2:04 PM
To: edk2-devel-01 <edk2-devel@lists.01.org>
Cc: Jaben Carsey <jaben.carsey@intel.com>; Liming Gao <liming.gao@intel.com>; Rebecca Cran <rebecca@bluestop.org>; Ruiyu Ni <ruiyu.ni@intel.com>; Palmer, Thomas <thomas.palmer@hpe.com>
Subject: [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing EFIAPI call conv spec

UefiShellLevel2CommandsLib (somewhat questionably) calls the BaseLib-internal function InternalCharToUpper().

This function is declared in "MdePkg/Library/BaseLib/BaseLibInternals.h",
which is not a public library class header. UefiShellLevel2CommandsLib therefore duplicates the function declaration, but a mistake was made: the EFIAPI calling convention is not spelled out on the duplicated declaration. Therefore calls made from UefiShellLevel2CommandsLib will not match the actual function definition in "MdePkg/Library/BaseLib/String.c",
when GCC/X64 toolchains are used.

One consequence of this is that cross-filesystem copies don't work in the UEFI shell (see the StrniCmp() function in "UefiShellLevel2CommandsLib.c"). From the original report:

> FS0:\efi\ubuntu\> cp grubx64.efi fs1:\
>
> cp: The source and destination are the same.

Copy the declaration from "BaseLibInternals.h" to "UefiShellLevel2CommandsLib.c" verbatim.

Reported-by: Rebecca Cran <rebecca@bluestop.org>
Analyzed-by: Thomas Palmer <thomas.palmer@hpe.com>
Analyzed-by: Liming Gao <liming.gao@intel.com>
Ref: http://mid.mail-archive.com/47cd17d8-f022-6ca5-2f52-06a8250f8d14@cran.org.uk
Cc: Jaben Carsey <jaben.carsey@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Rebecca Cran <rebecca@bluestop.org>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Thomas Palmer <thomas.palmer@hpe.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
---
 ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c
index 7948e53cfc46..e9ce63189224 100644
--- a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.c
+++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2Command
+++ sLib.c
@@ -268,8 +268,9 @@ VerifyIntermediateDirectories (
   @return Char as an upper case character.
 **/
 CHAR16
+EFIAPI
 InternalCharToUpper (
-  IN CONST CHAR16                    Char
+  IN      CHAR16                    Char
   );
 
 /**
--
2.14.1.3.gb7cf6e02401b

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing EFIAPI call conv spec
Posted by Carsey, Jaben 6 years, 3 months ago
Agree that the internal use is questionable.

Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>

> -----Original Message-----
> From: Palmer, Thomas [mailto:thomas.palmer@hpe.com]
> Sent: Monday, January 08, 2018 10:07 AM
> To: Laszlo Ersek <lersek@redhat.com>; edk2-devel-01 <edk2-
> devel@lists.01.org>
> Cc: Carsey, Jaben <jaben.carsey@intel.com>; Gao, Liming
> <liming.gao@intel.com>; Rebecca Cran <rebecca@bluestop.org>; Ni, Ruiyu
> <ruiyu.ni@intel.com>
> Subject: RE: [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing
> EFIAPI call conv spec
> Importance: High
> 
> Reviewed by thomas.palmer@hpe.com
> 
> 
> Regards,
> 
> Thomas Palmer
> 
> "I have only made this letter longer because I have not had the time to make
> it shorter" - Blaise Pascal
> 
> -----Original Message-----
> From: Laszlo Ersek [mailto:lersek@redhat.com]
> Sent: Saturday, January 6, 2018 2:04 PM
> To: edk2-devel-01 <edk2-devel@lists.01.org>
> Cc: Jaben Carsey <jaben.carsey@intel.com>; Liming Gao
> <liming.gao@intel.com>; Rebecca Cran <rebecca@bluestop.org>; Ruiyu Ni
> <ruiyu.ni@intel.com>; Palmer, Thomas <thomas.palmer@hpe.com>
> Subject: [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing EFIAPI
> call conv spec
> 
> UefiShellLevel2CommandsLib (somewhat questionably) calls the BaseLib-
> internal function InternalCharToUpper().
> 
> This function is declared in "MdePkg/Library/BaseLib/BaseLibInternals.h",
> which is not a public library class header. UefiShellLevel2CommandsLib
> therefore duplicates the function declaration, but a mistake was made: the
> EFIAPI calling convention is not spelled out on the duplicated declaration.
> Therefore calls made from UefiShellLevel2CommandsLib will not match the
> actual function definition in "MdePkg/Library/BaseLib/String.c",
> when GCC/X64 toolchains are used.
> 
> One consequence of this is that cross-filesystem copies don't work in the
> UEFI shell (see the StrniCmp() function in "UefiShellLevel2CommandsLib.c").
> From the original report:
> 
> > FS0:\efi\ubuntu\> cp grubx64.efi fs1:\
> >
> > cp: The source and destination are the same.
> 
> Copy the declaration from "BaseLibInternals.h" to
> "UefiShellLevel2CommandsLib.c" verbatim.
> 
> Reported-by: Rebecca Cran <rebecca@bluestop.org>
> Analyzed-by: Thomas Palmer <thomas.palmer@hpe.com>
> Analyzed-by: Liming Gao <liming.gao@intel.com>
> Ref: http://mid.mail-archive.com/47cd17d8-f022-6ca5-2f52-
> 06a8250f8d14@cran.org.uk
> Cc: Jaben Carsey <jaben.carsey@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Cc: Rebecca Cran <rebecca@bluestop.org>
> Cc: Ruiyu Ni <ruiyu.ni@intel.com>
> Cc: Thomas Palmer <thomas.palmer@hpe.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Laszlo Ersek <lersek@redhat.com>
> ---
> 
> ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib
> .c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git
> a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2Commands
> Lib.c
> b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2Commands
> Lib.c
> index 7948e53cfc46..e9ce63189224 100644
> ---
> a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2Commands
> Lib.c
> +++
> b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2Command
> +++ sLib.c
> @@ -268,8 +268,9 @@ VerifyIntermediateDirectories (
>    @return Char as an upper case character.
>  **/
>  CHAR16
> +EFIAPI
>  InternalCharToUpper (
> -  IN CONST CHAR16                    Char
> +  IN      CHAR16                    Char
>    );
> 
>  /**
> --
> 2.14.1.3.gb7cf6e02401b
> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing EFIAPI call conv spec
Posted by Laszlo Ersek 6 years, 3 months ago
On 01/08/18 22:06, Carsey, Jaben wrote:
> Agree that the internal use is questionable.
> 
> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
> 
>> -----Original Message-----
>> From: Palmer, Thomas [mailto:thomas.palmer@hpe.com]
>> Sent: Monday, January 08, 2018 10:07 AM
>> To: Laszlo Ersek <lersek@redhat.com>; edk2-devel-01 <edk2-
>> devel@lists.01.org>
>> Cc: Carsey, Jaben <jaben.carsey@intel.com>; Gao, Liming
>> <liming.gao@intel.com>; Rebecca Cran <rebecca@bluestop.org>; Ni, Ruiyu
>> <ruiyu.ni@intel.com>
>> Subject: RE: [PATCH] ShellPkg/UefiShellLevel2CommandsLib: add missing
>> EFIAPI call conv spec
>> Importance: High
>>
>> Reviewed by thomas.palmer@hpe.com
>>
>>
>> Regards,
>>
>> Thomas Palmer

Commit 038720e89959.

Thank you both!
Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel