https://gcc.gnu.org/g:da2229db8809d461cd483a22725d53694dcdfa1e
commit r16-6807-gda2229db8809d461cd483a22725d53694dcdfa1e Author: Peter Damianov <[email protected]> Date: Sat Jan 10 09:19:54 2026 +0000 Remove .res specs to fix COFF passthrough [PR123504] Some packages (gnulib) pass COFF object files with .res extension directly to gcc, expecting them to be passed through to the linker, instead of windres. However, the current EXTRA_DEFAULT_COMPILERS spec intercepts all .res files and runs them through windres, which fails for COFF files that are not Windows resource files (Microsoft Visual C binary resource file as identified by libmagic/file). This patch removes the .res file specs, leaving only the .rc support specs active. At a later date, this can be reviewed. The driver could inspect the .res file to see if it's a object file or, but, it's somewhat questionable if handling .res is even useful. gcc/ChangeLog: PR driver/123504 * config/i386/cygming.h (EXTRA_DEFAULT_COMPILERS): Comment out .res spec to allow COFF files with .res extension to pass through to the linker. * config/aarch64/cygming.h (EXTRA_DEFAULT_COMPILERS): Likewise. Signed-off-by: Jonathan Yong <[email protected]> Diff: --- gcc/config/aarch64/cygming.h | 8 ++++++-- gcc/config/i386/cygming.h | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/config/aarch64/cygming.h b/gcc/config/aarch64/cygming.h index 3b2c5955fc13..bb3c750df69b 100644 --- a/gcc/config/aarch64/cygming.h +++ b/gcc/config/aarch64/cygming.h @@ -261,11 +261,15 @@ still needed for compilation. */ "%{!E:%{!M:%{!MM:windres -J rc -O coff -F pe-aarch64 \ %{I*:-I%*} %{D*:-D%*} %{U*:-U%*} \ %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O} %i}}}", \ - 0, 0, 0}, \ + 0, 0, 0}, /* {".res", "@windres-res", 0, 0, 0}, \ {"@windres-res", \ "%{!E:%{!M:%{!MM:windres -J res -O coff -F pe-aarch64 \ %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O} %i}}}", \ - 0, 0, 0}, + 0, 0, 0}, */ + +/* For now, do not handle .res because some packages pass +COFF files named .res to gcc directly, expecting them to +be passed to the linker, not windres. See PR123504. */ #endif diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index a63286b6f728..00d11063c720 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -491,10 +491,14 @@ do { \ WINDRES_FORMAT_SPEC \ "%{I*:-I%*} %{D*:-D%*} %{U*:-U%*} \ %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O} %i}}}", \ - 0, 0, 0}, \ + 0, 0, 0}, /* \ {".res", "@windres-res", 0, 0, 0}, \ {"@windres-res", \ "%{!E:%{!M:%{!MM:windres -J res -O coff " \ WINDRES_FORMAT_SPEC \ "%{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O} %i}}}", \ - 0, 0, 0}, + 0, 0, 0}, */ + +/* For now, do not handle .res because some packages pass +COFF files named .res to gcc directly, expecting them to +be passed to the linker, not windres. See PR123504. */
