Christian Franke wrote:
A few programs are not compatible with --large-address-aware which is
enabled by default in current x86 ld. For example cdrkit, dvd+rw-tools
and smartmontools use IOCTL_SCSI_PASS_THROUGH_DIRECT which apparently
requires user buffers below 2GiB.
Using "LDFLAGS=-Wl,--disable-large-address-aware" would be much easier
than adding an extra Cygwin specific "peflags --bigaddr=false *.exe"
post-build step.
(http://cygwin.com/ml/cygwin/2012-04/msg00342.html :-)
With the attached patch, "gcc -Wl,--disable-large-address-aware ..."
works as expected. Documentation update is missing.
It would probably make sense to add a --enable-large-address-aware
option as a synonym for --large-address-aware to keep enable/disable
options consistent.
There is a similar issue with --tsaware. It is enabled by default in
spec file but cannot be disabled in gcc command line. I don't know
whether there is a need for --disable-tsaware.
Christian
diff -ru binutils-2.23.52-5/origsrc/src/ld/emultempl/pe.em binutils-2.23.52-5/src/src/ld/emultempl/pe.em
--- binutils-2.23.52-5/origsrc/src/ld/emultempl/pe.em 2013-04-29 10:22:16.000000000 +0200
+++ binutils-2.23.52-5/src/src/ld/emultempl/pe.em 2013-08-17 17:56:52.791228500 +0200
@@ -242,8 +242,10 @@
(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)
#define OPTION_LARGE_ADDRESS_AWARE \
(OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)
-#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1 \
+#define OPTION_DISABLE_LARGE_ADDRESS_AWARE \
(OPTION_LARGE_ADDRESS_AWARE + 1)
+#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1 \
+ (OPTION_DISABLE_LARGE_ADDRESS_AWARE + 1)
#define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 \
(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1 + 1)
#define OPTION_EXCLUDE_MODULES_FOR_IMPLIB \
@@ -333,6 +335,7 @@
{"enable-runtime-pseudo-reloc-v2", no_argument, NULL, OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2},
#endif
{"large-address-aware", no_argument, NULL, OPTION_LARGE_ADDRESS_AWARE},
+ {"disable-large-address-aware", no_argument, NULL, OPTION_DISABLE_LARGE_ADDRESS_AWARE},
{"enable-long-section-names", no_argument, NULL, OPTION_ENABLE_LONG_SECTION_NAMES},
{"disable-long-section-names", no_argument, NULL, OPTION_DISABLE_LONG_SECTION_NAMES},
{"dynamicbase",no_argument, NULL, OPTION_DYNAMIC_BASE},
@@ -472,6 +475,8 @@
#endif
fprintf (file, _(" --large-address-aware Executable supports virtual addresses\n\
greater than 2 gigabytes\n"));
+ fprintf (file, _(" --disable-large-address-aware Executable does not support virtual\n\
+ addresses greater than 2 gigabytes\n"));
fprintf (file, _(" --enable-long-section-names Use long COFF section names even in\n\
executable image files\n"));
fprintf (file, _(" --disable-long-section-names Never use long COFF section names, even\n\
@@ -828,6 +833,9 @@
case OPTION_LARGE_ADDRESS_AWARE:
real_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
break;
+ case OPTION_DISABLE_LARGE_ADDRESS_AWARE:
+ real_flags &= ~ IMAGE_FILE_LARGE_ADDRESS_AWARE;
+ break;
case OPTION_ENABLE_LONG_SECTION_NAMES:
pe_use_coff_long_section_names = 1;
break;
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple