This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 5946d2eadc75aaf90f930f1afdd74ca622ffd384 Author: Harishmcw <[email protected]> AuthorDate: Fri Oct 17 18:03:44 2025 +0530 Commit: Martin Storsjö <[email protected]> CommitDate: Fri Dec 19 10:01:16 2025 +0000 compat: Fix .def file generation for ARM64EC builds on Windows When building DLLs on ARM64EC, the default use of `dumpbin -linkermember:1` fails because ARM64EC static libraries use a different linker member format. Use `-linkermember:32` for ARM64EC to correctly extract symbols. Additionally, MSVC inserts $exit_thunk and $entry_thunk symbols for ARM64EC to handle x64 ↔ ARM64 transitions. These are internal thunks and must not be exported. Filter them out when generating the .def file to avoid unresolved symbols or invalid exports. Trim out the leading '#' on ARM64EC function symbols. This is only relevant on ARM64EC, but it is benign to do that filtering on all architectures (such symbols aren't expected on other architectures). Simplify the sed command by removing the symbol address with a sed expression instead of a later "cut" command. This ensures correct symbol extraction and stable DLL generation on ARM64EC targets, while keeping behavior unchanged for other Windows architectures. --- compat/windows/makedef | 25 ++++++++++++++++++++----- configure | 2 +- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/compat/windows/makedef b/compat/windows/makedef index add8222d13..af42f08fd5 100755 --- a/compat/windows/makedef +++ b/compat/windows/makedef @@ -48,7 +48,13 @@ trap 'rm -f -- $libname' EXIT if [ -n "$AR" ]; then $AR rcs ${libname} $@ >/dev/null else - lib.exe -out:${libname} $@ >/dev/null + machine_flag="" + case "$LDFLAGS" in + *"machine:arm64ec"*) + machine_flag="-machine:arm64ec" + ;; + esac + lib.exe ${machine_flag} -out:${libname} $@ >/dev/null fi if [ $? != 0 ]; then echo "Could not create temporary library." >&2 @@ -106,12 +112,21 @@ if [ -n "$NM" ]; then grep -v : | grep -v ^$ | cut -d' ' -f3 | - sed -e "s/^${prefix}//") + sed -e "s/^${prefix}//" -e "s/^#//" | + grep -v '\$entry_thunk' | + grep -v '\$exit_thunk') else - dump=$(dumpbin.exe -linkermember:1 ${libname} | - sed -e '/public symbols/,$!d' -e '/^ \{1,\}Summary/,$d' -e "s/ \{1,\}${prefix}/ /" -e 's/ \{1,\}/ /g' | + member=1 + case "$LDFLAGS" in + *"machine:arm64ec"*) + member=32 + ;; + esac + dump=$(dumpbin.exe -linkermember:${member} ${libname} | + sed -e '/public symbols/,$!d' -e '/^ \{1,\}Summary/,$d' -e 's/^[[:space:]]*[0-9A-Fa-f]\{1,\}[[:space:]]\{1,\}//' -e "s/^${prefix}//" -e 's/^#//' | tail -n +2 | - cut -d' ' -f3) + grep -v '\$entry_thunk' | + grep -v '\$exit_thunk') fi rm ${libname} diff --git a/configure b/configure index 083a30972a..9458a1d964 100755 --- a/configure +++ b/configure @@ -6096,7 +6096,7 @@ case $target_os in SLIBSUF=".dll" SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' - SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)' + SLIB_CREATE_DEF_CMD='LDFLAGS="$(LDFLAGS)" EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS= SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)' _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
