public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Zhu, Yonghong" <yonghong.zhu@intel.com>
To: Leif Lindholm <leif.lindholm@linaro.org>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"Feng, YunhuaX" <yunhuax.feng@intel.com>,
	"Gao, Liming" <liming.gao@intel.com>,
	"Zhu, Yonghong" <yonghong.zhu@intel.com>
Subject: Re: [Patch 3/4 V3] BaseTools: Update Gensec to set PROCESSING_REQUIRED value
Date: Tue, 5 Dec 2017 13:56:53 +0000	[thread overview]
Message-ID: <B9726D6DCCFB8B4CA276A9169B02216D51F44F06@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <20171205115302.2fbjq7572iqztsgi@bivouac.eciton.net>

Hi Leif,

Thanks. I just sent out the patch to fix this bug. Could you help to try it?

Best Regards,
Zhu Yonghong


-----Original Message-----
From: Leif Lindholm [mailto:leif.lindholm@linaro.org] 
Sent: Tuesday, December 05, 2017 7:53 PM
To: Zhu, Yonghong <yonghong.zhu@intel.com>
Cc: edk2-devel@lists.01.org; Feng, YunhuaX <yunhuax.feng@intel.com>; Gao, Liming <liming.gao@intel.com>
Subject: Re: [edk2] [Patch 3/4 V3] BaseTools: Update Gensec to set PROCESSING_REQUIRED value

This patch has broken BaseTools build with GCC on master:

make -C GenSec
make[2]: Entering directory '/work/git/edk2/BaseTools/Source/C/GenSec'
gcc  -c -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-deprecated-declarations -Wno-unused-result -nostdlib -c -g  -I .. -I ../Include/Common -I ../Include/ -I ../Include/IndustryStandard -I ../Common/ -I .. -I . -I ../Include/X64/  -O2 GenSec.c -o GenSec.o In file included from ../Include/Common/UefiBaseTypes.h:19:0,
                 from GenSec.c:20:
GenSec.c: In function ‘main’:
../Include/Common/BaseTypes.h:178:38: error: overflow in implicit constant conversion [-Werror=overflow]
 #define ENCODE_ERROR(a)              (MAX_BIT | (a))
                                      ^
../Include/Common/BaseTypes.h:204:38: note: in expansion of macro ‘ENCODE_ERROR’
 #define RETURN_ABORTED               ENCODE_ERROR (21)
                                      ^~~~~~~~~~~~
../Include/Common/UefiBaseTypes.h:119:35: note: in expansion of macro ‘RETURN_ABORTED’
 #define EFI_ABORTED               RETURN_ABORTED              
                                   ^~~~~~~~~~~~~~
GenSec.c:1329:16: note: in expansion of macro ‘EFI_ABORTED’
         return EFI_ABORTED;
                ^~~~~~~~~~~
../Include/Common/BaseTypes.h:178:38: error: overflow in implicit constant conversion [-Werror=overflow]
 #define ENCODE_ERROR(a)              (MAX_BIT | (a))
                                      ^
../Include/Common/BaseTypes.h:204:38: note: in expansion of macro ‘ENCODE_ERROR’
 #define RETURN_ABORTED               ENCODE_ERROR (21)
                                      ^~~~~~~~~~~~
../Include/Common/UefiBaseTypes.h:119:35: note: in expansion of macro ‘RETURN_ABORTED’
 #define EFI_ABORTED               RETURN_ABORTED              
                                   ^~~~~~~~~~~~~~
GenSec.c:1343:16: note: in expansion of macro ‘EFI_ABORTED’
         return EFI_ABORTED;
                ^~~~~~~~~~~
GenSec.c:1354:21: error: pointer targets in passing argument 1 of ‘strcasecmp’ differ in signedness [-Werror=pointer-sign]
         if (stricmp(DummyFileBuffer, InFileBuffer + (InFileSize - DummyFileSize)) == 0){
                     ^~~~~~~~~~~~~~~
In file included from GenSec.c:17:0:
/usr/include/string.h:529:12: note: expected ‘const char *’ but argument is of type ‘UINT8 * {aka unsigned char *}’
 extern int strcasecmp (const char *__s1, const char *__s2)
            ^~~~~~~~~~
GenSec.c:1354:38: error: pointer targets in passing argument 2 of ‘strcasecmp’ differ in signedness [-Werror=pointer-sign]
         if (stricmp(DummyFileBuffer, InFileBuffer + (InFileSize - DummyFileSize)) == 0){
                                      ^~~~~~~~~~~~ In file included from GenSec.c:17:0:
/usr/include/string.h:529:12: note: expected ‘const char *’ but argument is of type ‘UINT8 * {aka unsigned char *}’
 extern int strcasecmp (const char *__s1, const char *__s2)
            ^~~~~~~~~~
cc1: all warnings being treated as errors
../Makefiles/footer.makefile:27: recipe for target 'GenSec.o' failed
make[2]: *** [GenSec.o] Error 1
make[2]: Leaving directory '/work/git/edk2/BaseTools/Source/C/GenSec'
GNUmakefile:84: recipe for target 'GenSec' failed
make[1]: *** [GenSec] Error 2
make[1]: Leaving directory '/work/git/edk2/BaseTools/Source/C'
GNUmakefile:25: recipe for target 'Source/C' failed
make: *** [Source/C] Error 2
make: Leaving directory '/work/git/edk2/BaseTools'


On Wed, Nov 29, 2017 at 10:02:05PM +0800, Yonghong Zhu wrote:
> This patch add new option --dummy file, and we compare the dummpy file 
> with input file to decide whether we need to set PROCESSING_REQUIRED 
> value.
> 
> Cc: Liming Gao <liming.gao@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
> ---
>  BaseTools/Source/C/GenSec/GenSec.c | 74 
> ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 74 insertions(+)
> 
> diff --git a/BaseTools/Source/C/GenSec/GenSec.c 
> b/BaseTools/Source/C/GenSec/GenSec.c
> index d9cdc1f..904926c 100644
> --- a/BaseTools/Source/C/GenSec/GenSec.c
> +++ b/BaseTools/Source/C/GenSec/GenSec.c
> @@ -185,10 +185,13 @@ Returns:
>                          used in Ver section.\n");
>    fprintf (stdout, "  --sectionalign SectionAlign\n\
>                          SectionAlign points to section alignment, which support\n\
>                          the alignment scope 1~16M. It is specified in same\n\
>                          order that the section file is input.\n");
> +  fprintf (stdout, "  --dummy dummyfile\n\
> +                        compare dummpyfile with input_file to decide whether\n\
> +                        need to set PROCESSING_REQUIRED 
> + attribute.\n");
>    fprintf (stdout, "  -v, --verbose         Turn on verbose output with informational messages.\n");
>    fprintf (stdout, "  -q, --quiet           Disable all messages except key message and fatal error\n");
>    fprintf (stdout, "  -d, --debug level     Enable debug messages, at input debug level.\n");
>    fprintf (stdout, "  --version             Show program's version number and exit.\n");
>    fprintf (stdout, "  -h, --help            Show this help message and exit.\n");
> @@ -1026,10 +1029,17 @@ Returns:
>    EFI_STATUS                Status;
>    UINT64                    LogLevel;
>    UINT32                    *InputFileAlign;
>    UINT32                    InputFileAlignNum;
>    EFI_COMMON_SECTION_HEADER *SectionHeader;
> +  CHAR8                     *DummyFileName;
> +  FILE                      *DummyFile;
> +  UINTN                     DummyFileSize;
> +  UINT8                     *DummyFileBuffer;
> +  FILE                      *InFile;
> +  UINT8                     *InFileBuffer;
> +  UINTN                     InFileSize;
>  
>    InputFileAlign        = NULL;
>    InputFileAlignNum     = 0;
>    InputFileName         = NULL;
>    OutputFileName        = NULL;
> @@ -1047,10 +1057,17 @@ Returns:
>    Status                = STATUS_SUCCESS;
>    LogLevel              = 0;
>    SectGuidHeaderLength  = 0;
>    VersionSect           = NULL;
>    UiSect                = NULL;
> +  DummyFileSize         = 0;
> +  DummyFileName         = NULL;
> +  DummyFile             = NULL;
> +  DummyFileBuffer       = NULL;
> +  InFile                = NULL;
> +  InFileSize            = 0;
> +  InFileBuffer          = NULL;
>    
>    SetUtilityName (UTILITY_NAME);
>    
>    if (argc == 1) {
>      Error (NULL, 0, 1001, "Missing options", "No options input"); @@ 
> -1117,10 +1134,20 @@ Returns:
>        }
>        argc -= 2;
>        argv += 2;
>        continue;
>      }
> +    if (stricmp (argv[0], "--dummy") == 0) {
> +      DummyFileName = argv[1];
> +      if (DummyFileName == NULL) {
> +        Error (NULL, 0, 1003, "Invalid option value", "Dummy file can't be NULL");
> +        goto Finish;
> +      }
> +      argc -= 2;
> +      argv += 2;
> +      continue;
> +    }
>  
>      if ((stricmp (argv[0], "-r") == 0) || (stricmp (argv[0], "--attributes") == 0)) {
>        if (argv[1] == NULL) {
>          Error (NULL, 0, 1003, "Invalid option value", "Guid section attributes can't be NULL");
>          goto Finish;
> @@ -1290,10 +1317,57 @@ Returns:
>      goto Finish;
>    }
>  
>    VerboseMsg ("%s tool start.", UTILITY_NAME);
>  
> +  if (DummyFileName != NULL) {
> +      //
> +      // Open file and read contents
> +      //
> +      DummyFile = fopen (LongFilePath (DummyFileName), "rb");
> +      if (DummyFile == NULL) {
> +        Error (NULL, 0, 0001, "Error opening file", DummyFileName);
> +        return EFI_ABORTED;
> +      }
> +
> +      fseek (DummyFile, 0, SEEK_END);
> +      DummyFileSize = ftell (DummyFile);
> +      fseek (DummyFile, 0, SEEK_SET);
> +      DummyFileBuffer = (UINT8 *) malloc (DummyFileSize);
> +      fread(DummyFileBuffer, 1, DummyFileSize, DummyFile);
> +      fclose(DummyFile);
> +      DebugMsg (NULL, 0, 9, "Dummy files", "the dummy file name is %s 
> + and the size is %u bytes", DummyFileName, (unsigned) DummyFileSize);
> +
> +      InFile = fopen(LongFilePath(InputFileName[0]), "rb");
> +      if (InFile == NULL) {
> +        Error (NULL, 0, 0001, "Error opening file", InputFileName[0]);
> +        return EFI_ABORTED;
> +      }
> +
> +      fseek (InFile, 0, SEEK_END);
> +      InFileSize = ftell (InFile);
> +      fseek (InFile, 0, SEEK_SET);
> +      InFileBuffer = (UINT8 *) malloc (InFileSize);
> +      fread(InFileBuffer, 1, InFileSize, InFile);
> +      fclose(InFile);
> +      DebugMsg (NULL, 0, 9, "Input files", "the input file name is %s and the size is %u bytes", InputFileName[0], (unsigned) InFileSize);
> +      if (InFileSize > DummyFileSize){
> +        if (stricmp(DummyFileBuffer, InFileBuffer + (InFileSize - DummyFileSize)) == 0){
> +          SectGuidHeaderLength = InFileSize - DummyFileSize;
> +        }
> +      }
> +      if (SectGuidHeaderLength == 0) {
> +        SectGuidAttribute |= EFI_GUIDED_SECTION_PROCESSING_REQUIRED;
> +      }
> +      if (DummyFileBuffer != NULL) {
> +        free (DummyFileBuffer);
> +      }
> +      if (InFileBuffer != NULL) {
> +        free (InFileBuffer);
> +      }
> +    }
> +
>    //
>    // Parse all command line parameters to get the corresponding section type.
>    //
>    VerboseMsg ("Section type is %s", SectionName);
>    if (SectionName == NULL) {
> --
> 2.6.1.windows.1
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel

  reply	other threads:[~2017-12-05 13:52 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-29 14:02 [Patch 0/4 V3] BaseTools: Enable multiple thread to generate FFS file Yonghong Zhu
2017-11-29 14:02 ` [Patch 1/4 V3] BaseTools: GenFfs support to get alignment value from SectionFile Yonghong Zhu
2017-11-29 14:02 ` [Patch 2/4 V3] BaseTools: Update Trim to generate VfrBinOffset Binary Yonghong Zhu
2017-11-29 14:02 ` [Patch 3/4 V3] BaseTools: Update Gensec to set PROCESSING_REQUIRED value Yonghong Zhu
2017-12-05 11:53   ` Leif Lindholm
2017-12-05 13:56     ` Zhu, Yonghong [this message]
2017-11-29 14:02 ` [Patch 4/4 V3] BaseTools: Update Makefile to support FFS file generation Yonghong Zhu
2017-12-06 18:23   ` Leif Lindholm
2017-12-07  0:59     ` Zhu, Yonghong
2017-12-07  9:59       ` Zhu, Yonghong
2017-12-01  6:13 ` [Patch 0/4 V3] BaseTools: Enable multiple thread to generate FFS file Gao, Liming

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=B9726D6DCCFB8B4CA276A9169B02216D51F44F06@SHSMSX103.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox