From 41ff2916f22fe367196082080dad6477bd5880ec Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 16 Jan 2025 15:21:12 -0500 Subject: [PATCH] WINDOWS_EXPORT_ALL_SYMBOLS: Fix vftable symbol export on ARM64EC Extend commit f513781bc5 (WINDOWS_EXPORT_ALL_SYMBOLS: Export vftable symbol, 2023-02-13, v3.27.0-rc1~495^2) to classify the symbol as data on ARM64EC. Fixes: #26604 --- Source/bindexplib.cxx | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Source/bindexplib.cxx b/Source/bindexplib.cxx index 3495aed2f2..abf3b0b98f 100644 --- a/Source/bindexplib.cxx +++ b/Source/bindexplib.cxx @@ -298,15 +298,20 @@ public: 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 + if ((!pSymbolTable->Type && + // Read only (i.e. constants) must be excluded + (SectChar & IMAGE_SCN_MEM_WRITE)) || + (this->SymbolArch == Arch::ARM64EC && + // vftable symbols are DATA on ARM64EC + symbol.compare(0, 4, vftablePrefix) == 0)) { this->DataSymbols.insert(symbol); - } else { - if (pSymbolTable->Type || !(SectChar & IMAGE_SCN_MEM_READ) || - (SectChar & IMAGE_SCN_MEM_EXECUTE) || - (symbol.compare(0, 4, vftablePrefix) == 0)) { - this->Symbols.insert(symbol); - } + } else if (pSymbolTable->Type || + !(SectChar & IMAGE_SCN_MEM_READ) || + (SectChar & IMAGE_SCN_MEM_EXECUTE) || + (this->SymbolArch != Arch::ARM64EC && + // vftable symbols fail if marked as DATA + symbol.compare(0, 4, vftablePrefix) == 0)) { + this->Symbols.insert(symbol); } } }