]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools GenFw: Support CLANG8ELF with conversion ELF to PE/COFF image
authorLiming Gao <gaoliming@byosoft.com.cn>
Wed, 2 Jun 2021 08:11:41 +0000 (16:11 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 4 Jun 2021 09:20:06 +0000 (09:20 +0000)
CLANG8ELF tool chain generated ELF image with the different attributes
in section. Update GenFw to handle them.
1. .text section with writable attribute (support)
2. .reloc section has the symbol for *ABS* (skip)

Signed-off-by: Liming Gao <gaoliming@byosoft.com.cn>
Reviewed-by: Feng Bob C <bob.c.feng@intel.com>
BaseTools/Source/C/GenFw/Elf32Convert.c
BaseTools/Source/C/GenFw/Elf64Convert.c

index 2485b2cb7ad9a67a9d52fb236261db900b4cd94e..7c8a065678ac1f28b08eba1130d46fcf5d5a6848 100644 (file)
@@ -238,7 +238,7 @@ IsTextShdr (
   Elf_Shdr *Shdr\r
   )\r
 {\r
-  return (BOOLEAN) ((Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == SHF_ALLOC);\r
+  return (BOOLEAN) ((Shdr->sh_flags & (SHF_EXECINSTR | SHF_ALLOC)) == (SHF_EXECINSTR | SHF_ALLOC));\r
 }\r
 \r
 STATIC\r
@@ -261,7 +261,7 @@ IsDataShdr (
   if (IsHiiRsrcShdr(Shdr)) {\r
     return FALSE;\r
   }\r
-  return (BOOLEAN) (Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == (SHF_ALLOC | SHF_WRITE);\r
+  return (BOOLEAN) (Shdr->sh_flags & (SHF_EXECINSTR | SHF_WRITE | SHF_ALLOC)) == (SHF_ALLOC | SHF_WRITE);\r
 }\r
 \r
 STATIC\r
@@ -749,13 +749,7 @@ WriteSections32 (
           if (SymName == NULL) {\r
             SymName = (const UINT8 *)"<unknown>";\r
           }\r
-\r
-          Error (NULL, 0, 3000, "Invalid",\r
-                 "%s: Bad definition for symbol '%s'@%#x or unsupported symbol type.  "\r
-                 "For example, absolute and undefined symbols are not supported.",\r
-                 mInImageName, SymName, Sym->st_value);\r
-\r
-          exit(EXIT_FAILURE);\r
+          continue;\r
         }\r
         SymShdr = GetShdrByIndex(Sym->st_shndx);\r
 \r
index d097db863243426ff1ead6bc995eef4a00b52cfb..8fe672e98448d25b13fac7ebb055afc0d988a62a 100644 (file)
@@ -246,7 +246,7 @@ IsTextShdr (
   Elf_Shdr *Shdr\r
   )\r
 {\r
-  return (BOOLEAN) ((Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == SHF_ALLOC);\r
+  return (BOOLEAN) ((Shdr->sh_flags & (SHF_EXECINSTR | SHF_ALLOC)) == (SHF_EXECINSTR | SHF_ALLOC));\r
 }\r
 \r
 STATIC\r
@@ -269,7 +269,7 @@ IsDataShdr (
   if (IsHiiRsrcShdr(Shdr)) {\r
     return FALSE;\r
   }\r
-  return (BOOLEAN) (Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == (SHF_ALLOC | SHF_WRITE);\r
+  return (BOOLEAN) (Shdr->sh_flags & (SHF_EXECINSTR | SHF_WRITE | SHF_ALLOC)) == (SHF_ALLOC | SHF_WRITE);\r
 }\r
 \r
 STATIC\r
@@ -1060,6 +1060,7 @@ WriteSections64 (
 \r
             exit(EXIT_FAILURE);\r
           }\r
+          continue;\r
         }\r
         SymShdr = GetShdrByIndex(Sym->st_shndx);\r
 \r