This is the mail archive of the
cygwin-apps
mailing list for the Cygwin project.
[PATCH] setup: remove autoload
- From: Yaakov (Cygwin/X) <yselkowitz at users dot sourceforge dot net>
- To: cygwin-apps at cygwin dot com
- Date: Mon, 4 Mar 2013 01:20:28 -0600
- Subject: [PATCH] setup: remove autoload
With XP being the minimum supported version, we can scrap autoload and
link all functions directly; patch attached.
Yaakov
2013-03-04 Yaakov Selkowitz <yselkowitz@...>
* Makefile.am (inilint_extras): Remove autoload.c.
(setup_SOURCES): Ditto.
(setup_LDADD): Add ntdll and wininet.
(autoload.o): Remove rule.
* autoload.c: Remove file.
Index: Makefile.am
===================================================================
RCS file: /cvs/cygwin-apps/setup/Makefile.am,v
retrieving revision 2.93
diff -u -p -r2.93 Makefile.am
--- Makefile.am 3 Mar 2013 10:09:10 -0000 2.93
+++ Makefile.am 4 Mar 2013 07:08:58 -0000
@@ -64,7 +64,6 @@ CLEANFILES = setup_version.c
if MINGWTARGET
inilint_extras = \
- autoload.c \
mklink2.cc
else
inilint_extras =
@@ -105,8 +104,8 @@ inilint_SOURCES = \
regex_SOURCES = regex/regex.c
setup_LDADD = \
- libgetopt++/libgetopt++.la -lgcrypt -lgpg-error \
- -lshlwapi -lcomctl32 -lole32 -lwsock32 -lnetapi32 -lpsapi -luuid -llzma -lbz2 -lz
+ libgetopt++/libgetopt++.la -lgcrypt -lgpg-error -llzma -lbz2 -lz \
+ -lshlwapi -lcomctl32 -lole32 -lwsock32 -lpsapi -luuid -lntdll -lwininet
setup_LDFLAGS = -mwindows -Wc,-static -static-libtool-libs
setup_SOURCES = \
AntiVirus.cc \
@@ -116,7 +115,6 @@ setup_SOURCES = \
archive_tar.cc \
archive_tar.h \
archive_tar_file.cc \
- autoload.c \
choose.cc \
choose.h \
compress.cc \
@@ -278,9 +276,6 @@ setup_SOURCES = \
csu_util/version_compare.cc \
csu_util/version_compare.h
-# autoload code does not optimize properly with gcc-4.x
-autoload.o: CFLAGS += -O0
-
VER := $(shell sed -ne 's/^\$$Revi[s]ion: *\([^ ]*\) *$$.*/\1/p' \
$(srcdir)/ChangeLog)
Index: autoload.c
===================================================================
RCS file: autoload.c
diff -N autoload.c
--- autoload.c 4 Sep 2012 13:55:17 -0000 2.10
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-#if 0
-static const char *cvsid = "\n%%% $Id: autoload.c,v 2.10 2012/09/04 13:55:17 yselkowitz Exp $\n";
-#endif
-
-#define WIN32_LEAN_AND_MEAN
-#define DECLSPEC_IMPORT
-#include <windows.h>
-
-typedef struct {
- const char *name;
- HINSTANCE handle;
-} DllInfo;
-
-#define DLL(n) __attribute__ ((used)) static DllInfo n ## _info __asm__ (#n "_info") = { #n, 0}
-
-#define Auto(dll, func, size) \
- __asm__ ("\t.section .autoload_text,\"wx\""); \
- __asm__ ("\t.global\t_" #func "@" #size); \
- __asm__ ("_" #func "@" #size ":"); \
- __asm__ ("\tcall\tautoload_common"); \
- __asm__ ("\t.long\t" #dll "_info"); \
- __asm__ ("\t.ascii\t\"" #func "\\0\"")
-
-DLL (wininet);
-
-Auto (wininet, InternetAttemptConnect, 4);
-Auto (wininet, InternetCloseHandle, 4);
-Auto (wininet, InternetGetLastResponseInfoA, 12);
-Auto (wininet, InternetOpenA, 20);
-Auto (wininet, InternetOpenUrlA, 24);
-Auto (wininet, InternetReadFile, 16);
-Auto (wininet, InternetSetOptionA, 16);
-Auto (wininet, InternetQueryOptionA, 16);
-Auto (wininet, HttpQueryInfoA, 20);
-Auto (wininet, HttpSendRequestA, 20);
-
-DLL (advapi32);
-
-Auto (advapi32, AddAccessAllowedAce, 16);
-Auto (advapi32, AllocateAndInitializeSid, 44);
-Auto (advapi32, FreeSid, 4);
-Auto (advapi32, InitializeAcl, 12);
-Auto (advapi32, OpenProcessToken, 12);
-Auto (advapi32, SetTokenInformation, 16);
-Auto (advapi32, OpenSCManagerA, 16);
-Auto (advapi32, CloseServiceHandle, 4);
-Auto (advapi32, OpenServiceA, 16);
-Auto (advapi32, QueryServiceStatus, 8);
-Auto (advapi32, StartServiceA, 16);
-
-DLL (ntdll);
-
-Auto (ntdll, NtCreateFile, 44);
-Auto (ntdll, NtOpenFile, 24);
-Auto (ntdll, NtClose, 4);
-Auto (ntdll, NtQueryAttributesFile, 8);
-Auto (ntdll, NtQueryInformationFile, 20);
-Auto (ntdll, NtSetInformationFile, 20);
-Auto (ntdll, RtlInitUnicodeString, 8);
-Auto (ntdll, RtlNtStatusToDosError, 4);
-
-typedef struct {
- DllInfo *dll;
- char name[100];
-} AutoEntry;
-
-__asm__ ("\t.text");
-
-__attribute__ ((used)) static void autoload_common (int x) __asm__ ("autoload_common");
-
-static void
-autoload_common (int x)
-{
- int fp, rel;
- unsigned char *proc;
- HINSTANCE h;
- AutoEntry *a;
-
- a = *(AutoEntry **)(&x - 1);
- if (a->dll->handle == 0)
- {
- h = LoadLibrary (a->dll->name);
- a->dll->handle = h;
- }
- fp = (int) GetProcAddress (a->dll->handle, a->name);
- proc = ((unsigned char *)a) - 5;
- rel = fp - (int)(a); /* now it's a relative call */
- *proc++ = 0xe9; /* jump near 32-bit relative */
- *proc++ = rel;
- *proc++ = rel>>8;
- *proc++ = rel>>16;
- *proc++ = rel>>24;
-
- *(int *)(&x-1) = (int)proc-5;
-}