setup: gcc-4.5 compatibility
Yaakov (Cygwin/X)
yselkowitz@users.sourceforge.net
Fri Jul 23 17:45:00 GMT 2010
On Thu, 2010-07-22 at 22:50 -0400, Charles Wilson wrote:
> As noted here:
> http://cygwin.com/ml/cygwin-apps/2010-07/msg00175.html
>
> I was able to build setup.exe using i686-pc-mingw32-gcc and only
> setup-gcc45.patch (that is, without setup-no-autoload.patch) and it worked.
>
> The key difference, I think, is that all of the
> mingw-{zlib,bzip2,xz,gpg-error,gcrypt} packages, and setup itself were
> compiled with -mms-bitfields.
No, that's not it, I was able to get crashes -mms-bitfields as well.
Besides, it doesn't make sense that autoload.c would work any better
with or without -mms-bitfields, as long as it is compatible with the
rest of the mingw stack. That's not to say that we shouldn't build
mingw-* with -mms-bitfields, but that's tangential to this issue.
The problem is with optimization in autoload.c. By default, configure
sets C[XX]FLAGS='-g -O2', and autoload.c is not compatible with that. I
even tried -O1 and setup.exe didn't work, but it does work with -O0
(even just for autoload.c).
I have attached the output of i686-pc-mingw-gcc -S with -O0, -O1, and
-O2; hopefully someone who understands this can propose a fix for
autoload.c (or gcc, depending on where the bug is). In the meantime,
the attached patch for CVS HEAD simply disables optimization for
autoload.c only, allowing setup.exe to work even with a default
configure (tested with my i686-pc-mingw32-gcc 4.5.20100715).
Yaakov
-------------- next part --------------
.file "autoload.c"
.section .rdata,"dr"
LC0:
.ascii "wininet\0"
.data
.align 4
wininet_info:
.long LC0
.long 0
/APP
.section .autoload_text,"wx"
.global _InternetAttemptConnect@4
_InternetAttemptConnect@4:
call autoload_common
.long wininet_info
.ascii "InternetAttemptConnect\0"
.section .autoload_text,"wx"
.global _InternetCloseHandle@4
_InternetCloseHandle@4:
call autoload_common
.long wininet_info
.ascii "InternetCloseHandle\0"
.section .autoload_text,"wx"
.global _InternetGetLastResponseInfoA@12
_InternetGetLastResponseInfoA@12:
call autoload_common
.long wininet_info
.ascii "InternetGetLastResponseInfoA\0"
.section .autoload_text,"wx"
.global _InternetOpenA@20
_InternetOpenA@20:
call autoload_common
.long wininet_info
.ascii "InternetOpenA\0"
.section .autoload_text,"wx"
.global _InternetOpenUrlA@24
_InternetOpenUrlA@24:
call autoload_common
.long wininet_info
.ascii "InternetOpenUrlA\0"
.section .autoload_text,"wx"
.global _InternetReadFile@16
_InternetReadFile@16:
call autoload_common
.long wininet_info
.ascii "InternetReadFile\0"
.section .autoload_text,"wx"
.global _InternetSetOptionA@16
_InternetSetOptionA@16:
call autoload_common
.long wininet_info
.ascii "InternetSetOptionA\0"
.section .autoload_text,"wx"
.global _InternetQueryOptionA@16
_InternetQueryOptionA@16:
call autoload_common
.long wininet_info
.ascii "InternetQueryOptionA\0"
.section .autoload_text,"wx"
.global _HttpQueryInfoA@20
_HttpQueryInfoA@20:
call autoload_common
.long wininet_info
.ascii "HttpQueryInfoA\0"
.section .autoload_text,"wx"
.global _HttpSendRequestA@20
_HttpSendRequestA@20:
call autoload_common
.long wininet_info
.ascii "HttpSendRequestA\0"
/NO_APP
.section .rdata,"dr"
LC1:
.ascii "advapi32\0"
.data
.align 4
advapi32_info:
.long LC1
.long 0
/APP
.section .autoload_text,"wx"
.global _AddAccessAllowedAce@16
_AddAccessAllowedAce@16:
call autoload_common
.long advapi32_info
.ascii "AddAccessAllowedAce\0"
.section .autoload_text,"wx"
.global _AllocateAndInitializeSid@44
_AllocateAndInitializeSid@44:
call autoload_common
.long advapi32_info
.ascii "AllocateAndInitializeSid\0"
.section .autoload_text,"wx"
.global _FreeSid@4
_FreeSid@4:
call autoload_common
.long advapi32_info
.ascii "FreeSid\0"
.section .autoload_text,"wx"
.global _InitializeAcl@12
_InitializeAcl@12:
call autoload_common
.long advapi32_info
.ascii "InitializeAcl\0"
.section .autoload_text,"wx"
.global _OpenProcessToken@12
_OpenProcessToken@12:
call autoload_common
.long advapi32_info
.ascii "OpenProcessToken\0"
.section .autoload_text,"wx"
.global _SetTokenInformation@16
_SetTokenInformation@16:
call autoload_common
.long advapi32_info
.ascii "SetTokenInformation\0"
.section .autoload_text,"wx"
.global _OpenSCManagerA@16
_OpenSCManagerA@16:
call autoload_common
.long advapi32_info
.ascii "OpenSCManagerA\0"
.section .autoload_text,"wx"
.global _CloseServiceHandle@4
_CloseServiceHandle@4:
call autoload_common
.long advapi32_info
.ascii "CloseServiceHandle\0"
.section .autoload_text,"wx"
.global _OpenServiceA@16
_OpenServiceA@16:
call autoload_common
.long advapi32_info
.ascii "OpenServiceA\0"
.section .autoload_text,"wx"
.global _QueryServiceStatus@8
_QueryServiceStatus@8:
call autoload_common
.long advapi32_info
.ascii "QueryServiceStatus\0"
.section .autoload_text,"wx"
.global _StartServiceA@16
_StartServiceA@16:
call autoload_common
.long advapi32_info
.ascii "StartServiceA\0"
/NO_APP
.section .rdata,"dr"
LC2:
.ascii "ntdll\0"
.data
.align 4
ntdll_info:
.long LC2
.long 0
/APP
.section .autoload_text,"wx"
.global _NtCreateFile@44
_NtCreateFile@44:
call autoload_common
.long ntdll_info
.ascii "NtCreateFile\0"
.section .autoload_text,"wx"
.global _NtOpenFile@24
_NtOpenFile@24:
call autoload_common
.long ntdll_info
.ascii "NtOpenFile\0"
.section .autoload_text,"wx"
.global _NtClose@4
_NtClose@4:
call autoload_common
.long ntdll_info
.ascii "NtClose\0"
.section .autoload_text,"wx"
.global _NtQueryAttributesFile@8
_NtQueryAttributesFile@8:
call autoload_common
.long ntdll_info
.ascii "NtQueryAttributesFile\0"
.section .autoload_text,"wx"
.global _NtQueryInformationFile@20
_NtQueryInformationFile@20:
call autoload_common
.long ntdll_info
.ascii "NtQueryInformationFile\0"
.section .autoload_text,"wx"
.global _NtSetInformationFile@20
_NtSetInformationFile@20:
call autoload_common
.long ntdll_info
.ascii "NtSetInformationFile\0"
.section .autoload_text,"wx"
.global _RtlInitUnicodeString@8
_RtlInitUnicodeString@8:
call autoload_common
.long ntdll_info
.ascii "RtlInitUnicodeString\0"
.section .autoload_text,"wx"
.global _RtlNtStatusToDosError@4
_RtlNtStatusToDosError@4:
call autoload_common
.long ntdll_info
.ascii "RtlNtStatusToDosError\0"
.text
/NO_APP
.text
.def autoload_common; .scl 3; .type 32; .endef
autoload_common:
pushl %ebp
movl %esp, %ebp
subl $56, %esp
leal 8(%ebp), %eax
subl $4, %eax
movl (%eax), %eax
movl %eax, -12(%ebp)
movl -12(%ebp), %eax
movl (%eax), %eax
movl 4(%eax), %eax
testl %eax, %eax
jne L2
movl -12(%ebp), %eax
movl (%eax), %eax
movl (%eax), %eax
movl %eax, (%esp)
call _LoadLibraryA@4
subl $4, %esp
movl %eax, -16(%ebp)
movl -12(%ebp), %eax
movl (%eax), %eax
movl -16(%ebp), %edx
movl %edx, 4(%eax)
L2:
movl -12(%ebp), %eax
leal 4(%eax), %edx
movl -12(%ebp), %eax
movl (%eax), %eax
movl 4(%eax), %eax
movl %edx, 4(%esp)
movl %eax, (%esp)
call _GetProcAddress@8
subl $8, %esp
movl %eax, -20(%ebp)
movl -12(%ebp), %eax
subl $5, %eax
movl %eax, -24(%ebp)
movl -12(%ebp), %eax
movl -20(%ebp), %edx
movl %edx, %ecx
subl %eax, %ecx
movl %ecx, %eax
movl %eax, -28(%ebp)
movl -24(%ebp), %eax
movb $-23, (%eax)
addl $1, -24(%ebp)
movl -28(%ebp), %eax
movl %eax, %edx
movl -24(%ebp), %eax
movb %dl, (%eax)
addl $1, -24(%ebp)
movl -28(%ebp), %eax
sarl $8, %eax
movl %eax, %edx
movl -24(%ebp), %eax
movb %dl, (%eax)
addl $1, -24(%ebp)
movl -28(%ebp), %eax
sarl $16, %eax
movl %eax, %edx
movl -24(%ebp), %eax
movb %dl, (%eax)
addl $1, -24(%ebp)
movl -28(%ebp), %eax
sarl $24, %eax
movl %eax, %edx
movl -24(%ebp), %eax
movb %dl, (%eax)
addl $1, -24(%ebp)
leal 4(%ebp), %eax
movl -24(%ebp), %edx
subl $5, %edx
movl %edx, (%eax)
leave
ret
.def _LoadLibraryA@4; .scl 2; .type 32; .endef
.def _GetProcAddress@8; .scl 2; .type 32; .endef
-------------- next part --------------
.file "autoload.c"
/APP
.section .autoload_text,"wx"
.global _InternetAttemptConnect@4
_InternetAttemptConnect@4:
call autoload_common
.long wininet_info
.ascii "InternetAttemptConnect\0"
.section .autoload_text,"wx"
.global _InternetCloseHandle@4
_InternetCloseHandle@4:
call autoload_common
.long wininet_info
.ascii "InternetCloseHandle\0"
.section .autoload_text,"wx"
.global _InternetGetLastResponseInfoA@12
_InternetGetLastResponseInfoA@12:
call autoload_common
.long wininet_info
.ascii "InternetGetLastResponseInfoA\0"
.section .autoload_text,"wx"
.global _InternetOpenA@20
_InternetOpenA@20:
call autoload_common
.long wininet_info
.ascii "InternetOpenA\0"
.section .autoload_text,"wx"
.global _InternetOpenUrlA@24
_InternetOpenUrlA@24:
call autoload_common
.long wininet_info
.ascii "InternetOpenUrlA\0"
.section .autoload_text,"wx"
.global _InternetReadFile@16
_InternetReadFile@16:
call autoload_common
.long wininet_info
.ascii "InternetReadFile\0"
.section .autoload_text,"wx"
.global _InternetSetOptionA@16
_InternetSetOptionA@16:
call autoload_common
.long wininet_info
.ascii "InternetSetOptionA\0"
.section .autoload_text,"wx"
.global _InternetQueryOptionA@16
_InternetQueryOptionA@16:
call autoload_common
.long wininet_info
.ascii "InternetQueryOptionA\0"
.section .autoload_text,"wx"
.global _HttpQueryInfoA@20
_HttpQueryInfoA@20:
call autoload_common
.long wininet_info
.ascii "HttpQueryInfoA\0"
.section .autoload_text,"wx"
.global _HttpSendRequestA@20
_HttpSendRequestA@20:
call autoload_common
.long wininet_info
.ascii "HttpSendRequestA\0"
.section .autoload_text,"wx"
.global _AddAccessAllowedAce@16
_AddAccessAllowedAce@16:
call autoload_common
.long advapi32_info
.ascii "AddAccessAllowedAce\0"
.section .autoload_text,"wx"
.global _AllocateAndInitializeSid@44
_AllocateAndInitializeSid@44:
call autoload_common
.long advapi32_info
.ascii "AllocateAndInitializeSid\0"
.section .autoload_text,"wx"
.global _FreeSid@4
_FreeSid@4:
call autoload_common
.long advapi32_info
.ascii "FreeSid\0"
.section .autoload_text,"wx"
.global _InitializeAcl@12
_InitializeAcl@12:
call autoload_common
.long advapi32_info
.ascii "InitializeAcl\0"
.section .autoload_text,"wx"
.global _OpenProcessToken@12
_OpenProcessToken@12:
call autoload_common
.long advapi32_info
.ascii "OpenProcessToken\0"
.section .autoload_text,"wx"
.global _SetTokenInformation@16
_SetTokenInformation@16:
call autoload_common
.long advapi32_info
.ascii "SetTokenInformation\0"
.section .autoload_text,"wx"
.global _OpenSCManagerA@16
_OpenSCManagerA@16:
call autoload_common
.long advapi32_info
.ascii "OpenSCManagerA\0"
.section .autoload_text,"wx"
.global _CloseServiceHandle@4
_CloseServiceHandle@4:
call autoload_common
.long advapi32_info
.ascii "CloseServiceHandle\0"
.section .autoload_text,"wx"
.global _OpenServiceA@16
_OpenServiceA@16:
call autoload_common
.long advapi32_info
.ascii "OpenServiceA\0"
.section .autoload_text,"wx"
.global _QueryServiceStatus@8
_QueryServiceStatus@8:
call autoload_common
.long advapi32_info
.ascii "QueryServiceStatus\0"
.section .autoload_text,"wx"
.global _StartServiceA@16
_StartServiceA@16:
call autoload_common
.long advapi32_info
.ascii "StartServiceA\0"
.section .autoload_text,"wx"
.global _NtCreateFile@44
_NtCreateFile@44:
call autoload_common
.long ntdll_info
.ascii "NtCreateFile\0"
.section .autoload_text,"wx"
.global _NtOpenFile@24
_NtOpenFile@24:
call autoload_common
.long ntdll_info
.ascii "NtOpenFile\0"
.section .autoload_text,"wx"
.global _NtClose@4
_NtClose@4:
call autoload_common
.long ntdll_info
.ascii "NtClose\0"
.section .autoload_text,"wx"
.global _NtQueryAttributesFile@8
_NtQueryAttributesFile@8:
call autoload_common
.long ntdll_info
.ascii "NtQueryAttributesFile\0"
.section .autoload_text,"wx"
.global _NtQueryInformationFile@20
_NtQueryInformationFile@20:
call autoload_common
.long ntdll_info
.ascii "NtQueryInformationFile\0"
.section .autoload_text,"wx"
.global _NtSetInformationFile@20
_NtSetInformationFile@20:
call autoload_common
.long ntdll_info
.ascii "NtSetInformationFile\0"
.section .autoload_text,"wx"
.global _RtlInitUnicodeString@8
_RtlInitUnicodeString@8:
call autoload_common
.long ntdll_info
.ascii "RtlInitUnicodeString\0"
.section .autoload_text,"wx"
.global _RtlNtStatusToDosError@4
_RtlNtStatusToDosError@4:
call autoload_common
.long ntdll_info
.ascii "RtlNtStatusToDosError\0"
.text
/NO_APP
.text
.def autoload_common; .scl 3; .type 32; .endef
autoload_common:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $20, %esp
movl 4(%ebp), %ebx
movl (%ebx), %eax
cmpl $0, 4(%eax)
jne L2
movl (%eax), %eax
movl %eax, (%esp)
call _LoadLibraryA@4
subl $4, %esp
movl (%ebx), %edx
movl %eax, 4(%edx)
L2:
leal 4(%ebx), %eax
movl %eax, 4(%esp)
movl (%ebx), %eax
movl 4(%eax), %eax
movl %eax, (%esp)
call _GetProcAddress@8
subl $8, %esp
subl %ebx, %eax
movb $-23, -5(%ebx)
movb %al, -4(%ebx)
movl %eax, %edx
sarl $8, %edx
movb %dl, -3(%ebx)
movl %eax, %edx
sarl $16, %edx
movb %dl, -2(%ebx)
sarl $24, %eax
movb %al, -1(%ebx)
movl -4(%ebp), %ebx
leave
ret
.section .rdata,"dr"
LC0:
.ascii "ntdll\0"
.data
.align 4
ntdll_info:
.long LC0
.long 0
.section .rdata,"dr"
LC1:
.ascii "advapi32\0"
.data
.align 4
advapi32_info:
.long LC1
.long 0
.section .rdata,"dr"
LC2:
.ascii "wininet\0"
.data
.align 4
wininet_info:
.long LC2
.long 0
.def _LoadLibraryA@4; .scl 2; .type 32; .endef
.def _GetProcAddress@8; .scl 2; .type 32; .endef
-------------- next part --------------
.file "autoload.c"
/APP
.section .autoload_text,"wx"
.global _InternetAttemptConnect@4
_InternetAttemptConnect@4:
call autoload_common
.long wininet_info
.ascii "InternetAttemptConnect\0"
.section .autoload_text,"wx"
.global _InternetCloseHandle@4
_InternetCloseHandle@4:
call autoload_common
.long wininet_info
.ascii "InternetCloseHandle\0"
.section .autoload_text,"wx"
.global _InternetGetLastResponseInfoA@12
_InternetGetLastResponseInfoA@12:
call autoload_common
.long wininet_info
.ascii "InternetGetLastResponseInfoA\0"
.section .autoload_text,"wx"
.global _InternetOpenA@20
_InternetOpenA@20:
call autoload_common
.long wininet_info
.ascii "InternetOpenA\0"
.section .autoload_text,"wx"
.global _InternetOpenUrlA@24
_InternetOpenUrlA@24:
call autoload_common
.long wininet_info
.ascii "InternetOpenUrlA\0"
.section .autoload_text,"wx"
.global _InternetReadFile@16
_InternetReadFile@16:
call autoload_common
.long wininet_info
.ascii "InternetReadFile\0"
.section .autoload_text,"wx"
.global _InternetSetOptionA@16
_InternetSetOptionA@16:
call autoload_common
.long wininet_info
.ascii "InternetSetOptionA\0"
.section .autoload_text,"wx"
.global _InternetQueryOptionA@16
_InternetQueryOptionA@16:
call autoload_common
.long wininet_info
.ascii "InternetQueryOptionA\0"
.section .autoload_text,"wx"
.global _HttpQueryInfoA@20
_HttpQueryInfoA@20:
call autoload_common
.long wininet_info
.ascii "HttpQueryInfoA\0"
.section .autoload_text,"wx"
.global _HttpSendRequestA@20
_HttpSendRequestA@20:
call autoload_common
.long wininet_info
.ascii "HttpSendRequestA\0"
.section .autoload_text,"wx"
.global _AddAccessAllowedAce@16
_AddAccessAllowedAce@16:
call autoload_common
.long advapi32_info
.ascii "AddAccessAllowedAce\0"
.section .autoload_text,"wx"
.global _AllocateAndInitializeSid@44
_AllocateAndInitializeSid@44:
call autoload_common
.long advapi32_info
.ascii "AllocateAndInitializeSid\0"
.section .autoload_text,"wx"
.global _FreeSid@4
_FreeSid@4:
call autoload_common
.long advapi32_info
.ascii "FreeSid\0"
.section .autoload_text,"wx"
.global _InitializeAcl@12
_InitializeAcl@12:
call autoload_common
.long advapi32_info
.ascii "InitializeAcl\0"
.section .autoload_text,"wx"
.global _OpenProcessToken@12
_OpenProcessToken@12:
call autoload_common
.long advapi32_info
.ascii "OpenProcessToken\0"
.section .autoload_text,"wx"
.global _SetTokenInformation@16
_SetTokenInformation@16:
call autoload_common
.long advapi32_info
.ascii "SetTokenInformation\0"
.section .autoload_text,"wx"
.global _OpenSCManagerA@16
_OpenSCManagerA@16:
call autoload_common
.long advapi32_info
.ascii "OpenSCManagerA\0"
.section .autoload_text,"wx"
.global _CloseServiceHandle@4
_CloseServiceHandle@4:
call autoload_common
.long advapi32_info
.ascii "CloseServiceHandle\0"
.section .autoload_text,"wx"
.global _OpenServiceA@16
_OpenServiceA@16:
call autoload_common
.long advapi32_info
.ascii "OpenServiceA\0"
.section .autoload_text,"wx"
.global _QueryServiceStatus@8
_QueryServiceStatus@8:
call autoload_common
.long advapi32_info
.ascii "QueryServiceStatus\0"
.section .autoload_text,"wx"
.global _StartServiceA@16
_StartServiceA@16:
call autoload_common
.long advapi32_info
.ascii "StartServiceA\0"
.section .autoload_text,"wx"
.global _NtCreateFile@44
_NtCreateFile@44:
call autoload_common
.long ntdll_info
.ascii "NtCreateFile\0"
.section .autoload_text,"wx"
.global _NtOpenFile@24
_NtOpenFile@24:
call autoload_common
.long ntdll_info
.ascii "NtOpenFile\0"
.section .autoload_text,"wx"
.global _NtClose@4
_NtClose@4:
call autoload_common
.long ntdll_info
.ascii "NtClose\0"
.section .autoload_text,"wx"
.global _NtQueryAttributesFile@8
_NtQueryAttributesFile@8:
call autoload_common
.long ntdll_info
.ascii "NtQueryAttributesFile\0"
.section .autoload_text,"wx"
.global _NtQueryInformationFile@20
_NtQueryInformationFile@20:
call autoload_common
.long ntdll_info
.ascii "NtQueryInformationFile\0"
.section .autoload_text,"wx"
.global _NtSetInformationFile@20
_NtSetInformationFile@20:
call autoload_common
.long ntdll_info
.ascii "NtSetInformationFile\0"
.section .autoload_text,"wx"
.global _RtlInitUnicodeString@8
_RtlInitUnicodeString@8:
call autoload_common
.long ntdll_info
.ascii "RtlInitUnicodeString\0"
.section .autoload_text,"wx"
.global _RtlNtStatusToDosError@4
_RtlNtStatusToDosError@4:
call autoload_common
.long ntdll_info
.ascii "RtlNtStatusToDosError\0"
.text
/NO_APP
.text
.p2align 4,,15
.def autoload_common; .scl 3; .type 32; .endef
autoload_common:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $20, %esp
movl 4(%ebp), %ebx
movl (%ebx), %edx
movl 4(%edx), %eax
testl %eax, %eax
je L4
L2:
leal 4(%ebx), %edx
movl %edx, 4(%esp)
movl %eax, (%esp)
call _GetProcAddress@8
movb $-23, -5(%ebx)
subl %ebx, %eax
subl $8, %esp
movl %eax, %edx
sarl $8, %edx
movb %dl, -3(%ebx)
movl %eax, %edx
movb %al, -4(%ebx)
sarl $16, %edx
sarl $24, %eax
movb %dl, -2(%ebx)
movb %al, -1(%ebx)
movl -4(%ebp), %ebx
leave
ret
.p2align 4,,7
L4:
movl (%edx), %eax
movl %eax, (%esp)
call _LoadLibraryA@4
movl (%ebx), %edx
subl $4, %esp
movl %eax, 4(%edx)
jmp L2
.section .rdata,"dr"
LC0:
.ascii "ntdll\0"
.data
.align 4
ntdll_info:
.long LC0
.long 0
.section .rdata,"dr"
LC1:
.ascii "advapi32\0"
.data
.align 4
advapi32_info:
.long LC1
.long 0
.section .rdata,"dr"
LC2:
.ascii "wininet\0"
.data
.align 4
wininet_info:
.long LC2
.long 0
.def _GetProcAddress@8; .scl 2; .type 32; .endef
.def _LoadLibraryA@4; .scl 2; .type 32; .endef
-------------- next part --------------
A non-text attachment was scrubbed...
Name: setup-gcc45-take2.patch
Type: text/x-patch
Size: 4903 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-apps/attachments/20100723/d5094e5d/attachment.bin>
More information about the Cygwin-apps
mailing list