Name[7]\r
));\r
\r
- if ((Section[Index].Characteristics & EFI_IMAGE_SCN_CNT_CODE) != 0) {\r
+ //\r
+ // Instead of assuming that a PE/COFF section of type EFI_IMAGE_SCN_CNT_CODE\r
+ // can always be mapped read-only, classify a section as a code section only\r
+ // if it has the executable attribute set and the writable attribute cleared.\r
+ //\r
+ // This adheres more closely to the PE/COFF spec, and avoids issues with\r
+ // Linux OS loaders that may consist of a single read/write/execute section.\r
+ //\r
+ if ((Section[Index].Characteristics & (EFI_IMAGE_SCN_MEM_WRITE | EFI_IMAGE_SCN_MEM_EXECUTE)) == EFI_IMAGE_SCN_MEM_EXECUTE) {\r
DEBUG ((DEBUG_VERBOSE, " VirtualSize - 0x%08x\n", Section[Index].Misc.VirtualSize));\r
DEBUG ((DEBUG_VERBOSE, " VirtualAddress - 0x%08x\n", Section[Index].VirtualAddress));\r
DEBUG ((DEBUG_VERBOSE, " SizeOfRawData - 0x%08x\n", Section[Index].SizeOfRawData));\r