Merge topic 'cpack-ifw-4.3' into release-3.23 343ed1f913 CPack/IFW: Add support for QtIFW 4.3 Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7114
diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake index 53584c6..0ba35b6 100644 --- a/Modules/GetPrerequisites.cmake +++ b/Modules/GetPrerequisites.cmake
@@ -755,11 +755,13 @@ # objdump generates copious output so we create a grep filter to pre-filter results if(WIN32) find_program(gp_grep_cmd findstr) + set(gp_grep_cmd_arg "") else() find_program(gp_grep_cmd grep) + set(gp_grep_cmd_arg "-a") endif() if(gp_grep_cmd) - set(gp_cmd_maybe_filter COMMAND ${gp_grep_cmd} "-a" "^[[:blank:]]*DLL Name: ") + set(gp_cmd_maybe_filter COMMAND ${gp_grep_cmd} "${gp_grep_cmd_arg}" "^[[:blank:]]*DLL Name: ") endif() else() message(STATUS "warning: gp_tool='${gp_tool}' is an unknown tool...")
diff --git a/Source/bindexplib.cxx b/Source/bindexplib.cxx index 017fdc0..52e200c 100644 --- a/Source/bindexplib.cxx +++ b/Source/bindexplib.cxx
@@ -95,6 +95,10 @@ # define IMAGE_FILE_MACHINE_ARM64 0xaa64 // ARM64 Little-Endian # endif +# ifndef IMAGE_FILE_MACHINE_ARM64EC +# define IMAGE_FILE_MACHINE_ARM64EC 0xa641 // ARM64EC Little-Endian +# endif + typedef struct cmANON_OBJECT_HEADER_BIGOBJ { /* same as ANON_OBJECT_HEADER_V2 */ @@ -135,6 +139,13 @@ } cmIMAGE_SYMBOL_EX; typedef cmIMAGE_SYMBOL_EX UNALIGNED* cmPIMAGE_SYMBOL_EX; +enum class Arch +{ + Generic, + I386, + ARM64EC, +}; + PIMAGE_SECTION_HEADER GetSectionHeaderOffset( PIMAGE_FILE_HEADER pImageFileHeader) { @@ -193,7 +204,8 @@ */ DumpSymbols(ObjectHeaderType* ih, std::set<std::string>& symbols, - std::set<std::string>& dataSymbols, bool isI386) + std::set<std::string>& dataSymbols, + Arch symbolArch = Arch::Generic) : Symbols(symbols) , DataSymbols(dataSymbols) { @@ -203,7 +215,7 @@ this->ObjectImageHeader->PointerToSymbolTable); this->SectionHeaders = GetSectionHeaderOffset(this->ObjectImageHeader); this->SymbolCount = this->ObjectImageHeader->NumberOfSymbols; - this->IsI386 = isI386; + this->SymbolArch = symbolArch; } /* @@ -259,7 +271,7 @@ } } // For i386 builds we need to remove _ - if (this->IsI386 && symbol[0] == '_') { + if (this->SymbolArch == Arch::I386 && symbol[0] == '_') { symbol.erase(0, 1); } @@ -279,13 +291,20 @@ // skip symbols containing a dot or are from managed code if (symbol.find('.') == std::string::npos && !SymbolIsFromManagedCode(symbol)) { - if (!pSymbolTable->Type && (SectChar & IMAGE_SCN_MEM_WRITE)) { - // Read only (i.e. constants) must be excluded - this->DataSymbols.insert(symbol); - } else { - if (pSymbolTable->Type || !(SectChar & IMAGE_SCN_MEM_READ) || - (SectChar & IMAGE_SCN_MEM_EXECUTE)) { - this->Symbols.insert(symbol); + // skip arm64ec thunk symbols + if (this->SymbolArch != Arch::ARM64EC || + (symbol.find("$ientry_thunk") == std::string::npos && + symbol.find("$entry_thunk") == std::string::npos && + symbol.find("$iexit_thunk") == std::string::npos && + symbol.find("$exit_thunk") == std::string::npos)) { + if (!pSymbolTable->Type && (SectChar & IMAGE_SCN_MEM_WRITE)) { + // Read only (i.e. constants) must be excluded + this->DataSymbols.insert(symbol); + } else { + if (pSymbolTable->Type || !(SectChar & IMAGE_SCN_MEM_READ) || + (SectChar & IMAGE_SCN_MEM_EXECUTE)) { + this->Symbols.insert(symbol); + } } } } @@ -316,7 +335,7 @@ PIMAGE_SECTION_HEADER SectionHeaders; ObjectHeaderType* ObjectImageHeader; SymbolTableType* SymbolTable; - bool IsI386; + Arch SymbolArch; }; #endif @@ -421,7 +440,8 @@ (imageHeader->Machine == IMAGE_FILE_MACHINE_AMD64) || (imageHeader->Machine == IMAGE_FILE_MACHINE_ARM) || (imageHeader->Machine == IMAGE_FILE_MACHINE_ARMNT) || - (imageHeader->Machine == IMAGE_FILE_MACHINE_ARM64)) && + (imageHeader->Machine == IMAGE_FILE_MACHINE_ARM64) || + (imageHeader->Machine == IMAGE_FILE_MACHINE_ARM64EC)) && (imageHeader->Characteristics == 0)) { /* * The tests above are checking for IMAGE_FILE_HEADER.Machine @@ -431,7 +451,11 @@ */ DumpSymbols<IMAGE_FILE_HEADER, IMAGE_SYMBOL> symbolDumper( (PIMAGE_FILE_HEADER)lpFileBase, symbols, dataSymbols, - (imageHeader->Machine == IMAGE_FILE_MACHINE_I386)); + (imageHeader->Machine == IMAGE_FILE_MACHINE_I386 + ? Arch::I386 + : (imageHeader->Machine == IMAGE_FILE_MACHINE_ARM64EC + ? Arch::ARM64EC + : Arch::Generic))); symbolDumper.DumpObjFile(); } else { // check for /bigobj and llvm LTO format @@ -440,8 +464,12 @@ if (h->Sig1 == 0x0 && h->Sig2 == 0xffff) { // bigobj DumpSymbols<cmANON_OBJECT_HEADER_BIGOBJ, cmIMAGE_SYMBOL_EX> - symbolDumper((cmANON_OBJECT_HEADER_BIGOBJ*)lpFileBase, symbols, - dataSymbols, (h->Machine == IMAGE_FILE_MACHINE_I386)); + symbolDumper( + (cmANON_OBJECT_HEADER_BIGOBJ*)lpFileBase, symbols, dataSymbols, + (h->Machine == IMAGE_FILE_MACHINE_I386 + ? Arch::I386 + : (h->Machine == IMAGE_FILE_MACHINE_ARM64EC ? Arch::ARM64EC + : Arch::Generic))); symbolDumper.DumpObjFile(); } else if ( // BCexCODE - llvm bitcode
diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx index e41ed8c..244f56e 100644 --- a/Source/cmMakefileExecutableTargetGenerator.cxx +++ b/Source/cmMakefileExecutableTargetGenerator.cxx
@@ -191,8 +191,6 @@ this->CreateObjectLists(useLinkScript, false, useResponseFileForObjects, buildObjs, depends, false); - std::string const& aixExports = this->GetAIXExports(this->GetConfigName()); - cmRulePlaceholderExpander::RuleVariables vars; std::string objectDir = this->GeneratorTarget->GetSupportDirectory(); @@ -211,7 +209,6 @@ cmOutputConverter::SHELL); vars.Language = linkLanguage.c_str(); - vars.AIXExports = aixExports.c_str(); vars.Objects = buildObjs.c_str(); vars.ObjectDir = objectDir.c_str(); vars.Target = target.c_str(); @@ -521,11 +518,14 @@ std::string manifests = this->GetManifests(this->GetConfigName()); + std::string const& aixExports = this->GetAIXExports(this->GetConfigName()); + cmRulePlaceholderExpander::RuleVariables vars; vars.CMTargetName = this->GeneratorTarget->GetName().c_str(); vars.CMTargetType = cmState::GetTargetTypeName(this->GeneratorTarget->GetType()).c_str(); vars.Language = linkLanguage.c_str(); + vars.AIXExports = aixExports.c_str(); vars.Objects = buildObjs.c_str(); std::string objectDir = this->GeneratorTarget->GetSupportDirectory();