remove outdated patches

This commit is contained in:
Dave Murphy
2007-12-10 23:53:29 +00:00
parent ebc8208ed0
commit 1db83c43d6
8 changed files with 0 additions and 17435 deletions

View File

@@ -1,796 +0,0 @@
diff -Nbaur gcc-4.1.1/gcc/c-incpath.c gcc-4.1.1-arm/gcc/c-incpath.c
--- gcc-4.1.1/gcc/c-incpath.c Sat Jun 25 03:02:01 2005
+++ gcc-4.1.1-arm/gcc/c-incpath.c Mon Jun 5 06:58:56 2006
@@ -331,13 +331,18 @@
cpp_dir *p;
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* Convert all backslashes to slashes. The native CRT stat()
- function does not recognize a directory that ends in a backslash
- (unless it is a drive root dir, such "c:\"). Forward slashes,
- trailing or otherwise, cause no problems for stat(). */
- char* c;
- for (c = path; *c; c++)
- if (*c == '\\') *c = '/';
+ /* Remove unnecessary trailing slashes. On some versions of MS
+ Windows, trailing _forward_ slashes cause no problems for stat().
+ On newer versions, stat() does not recognise a directory that ends
+ in a '\\' or '/', unless it is a drive root dir, such as "c:/",
+ where it is obligatory. */
+ int pathlen = strlen (path);
+ char* end = path + pathlen - 1;
+ /* Preserve the lead '/' or lead "c:/". */
+ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1);
+
+ for (; end > start && IS_DIR_SEPARATOR (*end); end--)
+ *end = 0;
#endif
p = xmalloc (sizeof (cpp_dir));
diff -Nbaur gcc-4.1.1/gcc/gcc.c gcc-4.1.1-arm/gcc/gcc.c
--- gcc-4.1.1/gcc/gcc.c Wed May 17 19:38:58 2006
+++ gcc-4.1.1-arm/gcc/gcc.c Mon Jun 5 06:58:56 2006
@@ -3250,8 +3250,6 @@
gcc_libexec_prefix = make_relative_prefix (argv[0],
standard_bindir_prefix,
standard_libexec_prefix);
- if (gcc_exec_prefix)
- putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL));
}
else
gcc_libexec_prefix = make_relative_prefix (gcc_exec_prefix,
@@ -6148,10 +6146,21 @@
/* We need to check standard_exec_prefix/just_machine_suffix/specs
for any override of as, ld and libraries. */
+ if ( gcc_exec_prefix )
+ {
+ specs_file = alloca (strlen (gcc_exec_prefix)
+ + strlen (just_machine_suffix) + sizeof ("specs"));
+
+ strcpy (specs_file, gcc_exec_prefix);
+ } else {
+
specs_file = alloca (strlen (standard_exec_prefix)
+ strlen (just_machine_suffix) + sizeof ("specs"));
strcpy (specs_file, standard_exec_prefix);
+
+ }
+
strcat (specs_file, just_machine_suffix);
strcat (specs_file, "specs");
if (access (specs_file, R_OK) == 0)
diff -Nbaur gcc-4.1.1/gcc/prefix.c gcc-4.1.1-arm/gcc/prefix.c
--- gcc-4.1.1/gcc/prefix.c Sat Jun 25 03:02:01 2005
+++ gcc-4.1.1-arm/gcc/prefix.c Mon Jun 5 06:58:56 2006
@@ -246,13 +246,16 @@
The returned string is always malloc-ed, and the caller is
responsible for freeing it. */
+
+static const char *old_prefix = PREFIX;
+
char *
update_path (const char *path, const char *key)
{
char *result, *p;
- const int len = strlen (std_prefix);
+ const int len = strlen (old_prefix);
- if (! strncmp (path, std_prefix, len)
+ if (! strncmp (path, old_prefix, len)
&& (IS_DIR_SEPARATOR(path[len])
|| path[len] == '\0')
&& key != 0)
@@ -354,4 +357,6 @@
set_std_prefix (const char *prefix, int len)
{
std_prefix = save_string (prefix, len);
+
+ putenv (concat ("GCC_EXEC_PREFIX=", std_prefix, NULL));
}
diff -Nbaur gcc-4.1.1/gcc/toplev.c gcc-4.1.1-arm/gcc/toplev.c
--- gcc-4.1.1/gcc/toplev.c Sat Feb 4 22:13:20 2006
+++ gcc-4.1.1-arm/gcc/toplev.c Mon Jun 5 06:58:56 2006
@@ -82,6 +82,7 @@
#include "value-prof.h"
#include "alloc-pool.h"
#include "tree-mudflap.h"
+#include "prefix.h"
#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
#include "dwarf2out.h"
@@ -1434,6 +1435,10 @@
progname = p;
xmalloc_set_program_name (progname);
+
+ p = getenv("GCC_EXEC_PREFIX");
+ if (p && strlen(p)) set_std_prefix (p, strlen(p));
+
hex_init ();
diff -Nbaur gcc-4.1.1/gcc/version.c gcc-4.1.1-arm/gcc/version.c
--- gcc-4.1.1/gcc/version.c Wed Mar 16 06:04:10 2005
+++ gcc-4.1.1-arm/gcc/version.c Wed Jun 7 16:14:31 2006
@@ -8,7 +8,7 @@
in parentheses. You may also wish to include a number indicating
the revision of your modified compiler. */
-#define VERSUFFIX ""
+#define VERSUFFIX " (devkitARM release 20)"
/* This is the location of the online document giving instructions for
reporting bugs. If you distribute a modified version of GCC,
@@ -17,7 +17,7 @@
forward us bugs reported to you, if you determine that they are
not bugs in your modifications.) */
-const char bug_report_url[] = "<URL:http://gcc.gnu.org/bugs.html>";
+const char bug_report_url[] = "<URL:http://devkitpro.sourceforge.net/bugs.shtml>";
/* The complete version string, assembled from several pieces.
BASEVER, DATESTAMP, and DEVPHASE are defined by the Makefile. */
diff -Nbaur gcc-4.1.1/libiberty/pex-win32.c gcc-4.1.1-arm/libiberty/pex-win32.c
--- gcc-4.1.1/libiberty/pex-win32.c Thu Sep 15 01:46:20 2005
+++ gcc-4.1.1-arm/libiberty/pex-win32.c Sun Jun 4 21:04:21 2006
@@ -41,6 +41,7 @@
#include <fcntl.h>
#include <signal.h>
#include <sys/stat.h>
+#include <errno.h>
/* mingw32 headers may not define the following. */
@@ -72,115 +73,6 @@
return;
}
-/* This is a kludge to get around the Microsoft C spawn functions' propensity
- to remove the outermost set of double quotes from all arguments. */
-
-static const char * const *
-fix_argv (char * const *argvec)
-{
- char **argv;
- int i;
- char *command0;
-
- /* See whether we need to change anything. */
- for (command0 = argvec[0]; *command0 != '\0'; command0++)
- if (*command0 == '/')
- break;
- if (*command0 == '\0')
- {
- for (i = 1; argvec[i] != NULL; i++)
- if (strpbrk (argvec[i], "\" \t") != NULL)
- break;
-
- if (argvec[i] == NULL)
- return (const char * const *) argvec;
- }
-
- for (i = 0; argvec[i] != NULL; i++)
- ;
- argv = XNEWVEC (char *, i + 2);
-
- argv++; /* Leave space at the beginning of argv
- for potential #! handling */
-
- for (i = 0; argvec[i] != NULL; i++)
- argv[i] = xstrdup (argvec[i]);
- argv[i] = NULL;
-
- backslashify (argv[0]);
-
- for (i = 1; argv[i] != 0; i++)
- {
- int len, j;
- char *temp, *newtemp;
-
- temp = argv[i];
- len = strlen (temp);
- for (j = 0; j < len; j++)
- {
- if (temp[j] == '"')
- {
- newtemp = XNEWVEC (char, len + 2);
- strncpy (newtemp, temp, j);
- newtemp [j] = '\\';
- strncpy (&newtemp [j+1], &temp [j], len-j);
- newtemp [len+1] = 0;
- temp = newtemp;
- len++;
- j++;
- }
- }
-
- if (argv[i] != temp)
- {
- free (argv[i]);
- argv[i] = temp;
- }
- }
-
- for (i = 0; argv[i] != 0; i++)
- {
- if (strpbrk (argv[i], " \t"))
- {
- int len, trailing_backslash;
- char *temp;
-
- len = strlen (argv[i]);
- trailing_backslash = 0;
-
- /* There is an added complication when an arg with embedded white
- space ends in a backslash (such as in the case of -iprefix arg
- passed to cpp). The resulting quoted strings gets misinterpreted
- by the command interpreter -- it thinks that the ending quote
- is escaped by the trailing backslash and things get confused.
- We handle this case by escaping the trailing backslash, provided
- it was not escaped in the first place. */
- if (len > 1
- && argv[i][len-1] == '\\'
- && argv[i][len-2] != '\\')
- {
- trailing_backslash = 1;
- ++len; /* to escape the final backslash. */
- }
-
- len += 2; /* and for the enclosing quotes. */
-
- temp = XNEWVEC (char, len + 1);
- temp[0] = '"';
- strcpy (temp + 1, argv[i]);
- if (trailing_backslash)
- temp[len - 2] = '\\';
- temp[len - 1] = '"';
- temp[len] = '\0';
-
- free (argv[i]);
- argv[i] = temp;
- }
- }
-
- return (const char * const *) argv;
-}
-
static int pex_win32_open_read (struct pex_obj *, const char *, int);
static int pex_win32_open_write (struct pex_obj *, const char *, int);
static long pex_win32_exec_child (struct pex_obj *, int, const char *,
@@ -422,8 +314,225 @@
}
#endif
+/* Return a Windows command-line from ARGV. It is the caller's
+ responsibility to free the string returned. */
+
+static char *
+argv_to_cmdline (char *const *argv)
+{
+ char *cmdline;
+ char *p;
+ size_t cmdline_len;
+ int i, j, k;
+
+ cmdline_len = 0;
+ for (i = 0; argv[i]; i++)
+ {
+ /* We quote every last argument. This simplifies the problem;
+ we need only escape embedded double-quotes and immediately
+ preceeding backslash characters. A sequence of backslach characters
+ that is not follwed by a double quote character will not be
+ escaped. */
+ for (j = 0; argv[i][j]; j++)
+ {
+ if (argv[i][j] == '"')
+ {
+ /* Escape preceeding backslashes. */
+ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
+ cmdline_len++;
+ /* Escape the qote character. */
+ cmdline_len++;
+ }
+ }
+ /* Trailing backslashes also need to be escaped because they will be
+ followed by the terminating quote. */
+ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
+ cmdline_len++;
+ cmdline_len += j;
+ cmdline_len += 3; /* for leading and trailing quotes and space */
+ }
+ cmdline = xmalloc (cmdline_len);
+ p = cmdline;
+ for (i = 0; argv[i]; i++)
+ {
+ *p++ = '"';
+ for (j = 0; argv[i][j]; j++)
+ {
+ if (argv[i][j] == '"')
+ {
+ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
+ *p++ = '\\';
+ *p++ = '\\';
+ }
+ *p++ = argv[i][j];
+ }
+ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
+ *p++ = '\\';
+ *p++ = '"';
+ *p++ = ' ';
+ }
+ p[-1] = '\0';
+ return cmdline;
+}
+
+static const char *const
+std_suffixes[] = {
+ ".com",
+ ".exe",
+ ".bat",
+ ".cmd",
+ 0
+};
+static const char *const
+no_suffixes[] = {
+ "",
+ 0
+};
+
+/* Returns the full path to PROGRAM. If SEARCH is true, look for
+ PROGRAM in each directory in PATH. */
+
+static char *
+find_executable (const char *program, BOOL search)
+{
+ char *full_executable;
+ char *e;
+ size_t fe_len;
+ const char *path = 0;
+ const char *const *ext;
+ const char *p, *q;
+ size_t proglen = strlen (program);
+ int has_extension = !!strchr (program, '.');
+ int has_slash = (strchr (program, '/') || strchr (program, '\\'));
+ HANDLE h;
+
+ if (has_slash)
+ search = FALSE;
+
+ if (search)
+ path = getenv ("PATH");
+ if (!path)
+ path = "";
+
+ fe_len = 0;
+ for (p = path; *p; p = q)
+ {
+ q = p;
+ while (*q != ';' && *q != '\0')
+ q++;
+ if ((size_t)(q - p) > fe_len)
+ fe_len = q - p;
+ if (*q == ';')
+ q++;
+ }
+ fe_len = fe_len + 1 + proglen + (has_extension ? 1 : 5);
+ full_executable = xmalloc (fe_len);
+
+ p = path;
+ do
+ {
+ q = p;
+ while (*q != ';' && *q != '\0')
+ q++;
+
+ e = full_executable;
+ memcpy (e, p, q - p);
+ e += (q - p);
+ if (q - p)
+ *e++ = '\\';
+ strcpy (e, program);
+
+ if (*q == ';')
+ q++;
+
+ for (e = full_executable; *e; e++)
+ if (*e == '/')
+ *e = '\\';
+
+ /* At this point, e points to the terminating NUL character for
+ full_executable. */
+ for (ext = has_extension ? no_suffixes : std_suffixes; *ext; ext++)
+ {
+ /* Remove any current extension. */
+ *e = '\0';
+ /* Add the new one. */
+ strcat (full_executable, *ext);
+
+ /* Attempt to open this file. */
+ h = CreateFile (full_executable, GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (h != INVALID_HANDLE_VALUE)
+ goto found;
+ }
+ p = q;
+ }
+ while (*p);
+ free (full_executable);
+ return 0;
+
+ found:
+ CloseHandle (h);
+ return full_executable;
+}
+
+/* Low-level process creation function. */
+
+static long
+win32_spawn (const char *executable,
+ BOOL search,
+ char *const *argv,
+ DWORD dwCreationFlags,
+ LPSTARTUPINFO si,
+ LPPROCESS_INFORMATION pi)
+{
+ char *full_executable;
+ char *cmdline;
+
+ full_executable = NULL;
+ cmdline = NULL;
+
+ full_executable = find_executable (executable, search);
+ if (!full_executable)
+ goto error;
+ cmdline = argv_to_cmdline (argv);
+ if (!cmdline)
+ goto error;
+
+ /* Create the child process. */
+ if (!CreateProcess (full_executable, cmdline,
+ /*lpProcessAttributes=*/NULL,
+ /*lpThreadAttributes=*/NULL,
+ /*bInheritHandles=*/TRUE,
+ dwCreationFlags,
+ /*lpEnvironment=*/NULL,
+ /*lpCurrentDirectory=*/NULL,
+ si,
+ pi))
+ {
+ free (full_executable);
+ return -1;
+ }
+
+ /* Clean up. */
+ CloseHandle (pi->hThread);
+ free (full_executable);
+
+ return (long) pi->hProcess;
+
+ error:
+ if (cmdline)
+ free (cmdline);
+ if (full_executable)
+ free (full_executable);
+ return -1;
+}
+
static long
-spawn_script (const char *executable, const char * const * argv)
+spawn_script (const char *executable, char *const *argv,
+ DWORD dwCreationFlags,
+ LPSTARTUPINFO si,
+ LPPROCESS_INFORMATION pi)
{
int pid = -1;
int save_errno = errno;
@@ -455,17 +564,21 @@
executable = strrchr (executable1, '\\') + 1;
if (!executable)
executable = executable1;
- pid = _spawnvp (_P_NOWAIT, executable, argv);
+ pid = win32_spawn (executable, TRUE, argv,
+ dwCreationFlags, si, pi);
#else
if (strchr (executable1, '\\') == NULL)
- pid = _spawnvp (_P_NOWAIT, executable1, argv);
+ pid = win32_spawn (executable1, TRUE, argv,
+ dwCreationFlags, si, pi);
else if (executable1[0] != '\\')
- pid = _spawnv (_P_NOWAIT, executable1, argv);
+ pid = win32_spawn (executable1, FALSE, argv,
+ dwCreationFlags, si, pi);
else
{
const char *newex = mingw_rootify (executable1);
*avhere = newex;
- pid = _spawnv (_P_NOWAIT, newex, argv);
+ pid = win32_spawn (newex, FALSE, argv,
+ dwCreationFlags, si, pi);
if (executable1 != newex)
free ((char *) newex);
if (pid < 0)
@@ -474,7 +587,8 @@
if (newex != executable1)
{
*avhere = newex;
- pid = _spawnv (_P_NOWAIT, newex, argv);
+ pid = win32_spawn (newex, FALSE, argv,
+ dwCreationFlags, si, pi);
free ((char *) newex);
}
}
@@ -496,149 +610,95 @@
int in, int out, int errdes, const char **errmsg,
int *err)
{
- int org_in, org_out, org_errdes;
long pid;
- const char * const * newargv;
-
- org_in = -1;
- org_out = -1;
- org_errdes = -1;
-
- if (in != STDIN_FILE_NO)
- {
- org_in = _dup (STDIN_FILE_NO);
- if (org_in < 0)
- {
- *err = errno;
- *errmsg = "_dup";
- return -1;
- }
- if (_dup2 (in, STDIN_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "_dup2";
- return -1;
- }
- if (_close (in) < 0)
- {
- *err = errno;
- *errmsg = "_close";
- return -1;
- }
- }
+ HANDLE stdin_handle;
+ HANDLE stdout_handle;
+ HANDLE stderr_handle;
+ DWORD dwCreationFlags;
+ OSVERSIONINFO version_info;
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+
+ stdin_handle = INVALID_HANDLE_VALUE;
+ stdout_handle = INVALID_HANDLE_VALUE;
+ stderr_handle = INVALID_HANDLE_VALUE;
+
+ stdin_handle = (HANDLE) _get_osfhandle (in);
+ stdout_handle = (HANDLE) _get_osfhandle (out);
+ if (!(flags & PEX_STDERR_TO_STDOUT))
+ stderr_handle = (HANDLE) _get_osfhandle (errdes);
+ else
+ stderr_handle = stdout_handle;
- if (out != STDOUT_FILE_NO)
- {
- org_out = _dup (STDOUT_FILE_NO);
- if (org_out < 0)
- {
- *err = errno;
- *errmsg = "_dup";
- return -1;
- }
- if (_dup2 (out, STDOUT_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "_dup2";
- return -1;
- }
- if (_close (out) < 0)
+ /* Determine the version of Windows we are running on. */
+ version_info.dwOSVersionInfoSize = sizeof (version_info);
+ GetVersionEx (&version_info);
+ if (version_info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
+ /* On Windows 95/98/ME the CREATE_NO_WINDOW flag is not
+ supported, so we cannot avoid creating a console window. */
+ dwCreationFlags = 0;
+ else
{
- *err = errno;
- *errmsg = "_close";
- return -1;
- }
- }
+ HANDLE conout_handle;
- if (errdes != STDERR_FILE_NO
- || (flags & PEX_STDERR_TO_STDOUT) != 0)
- {
- org_errdes = _dup (STDERR_FILE_NO);
- if (org_errdes < 0)
- {
- *err = errno;
- *errmsg = "_dup";
- return -1;
- }
- if (_dup2 ((flags & PEX_STDERR_TO_STDOUT) != 0 ? STDOUT_FILE_NO : errdes,
- STDERR_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "_dup2";
- return -1;
- }
- if (errdes != STDERR_FILE_NO)
- {
- if (_close (errdes) < 0)
+ /* Determine whether or not we have an associated console. */
+ conout_handle = CreateFile("CONOUT$",
+ GENERIC_WRITE,
+ FILE_SHARE_WRITE,
+ /*lpSecurityAttributes=*/NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ /*hTemplateFile=*/NULL);
+ if (conout_handle == INVALID_HANDLE_VALUE)
+ /* There is no console associated with this process. Since
+ the child is a console process, the OS would normally
+ create a new console Window for the child. Since we'll be
+ redirecting the child's standard streams, we do not need
+ the console window. */
+ dwCreationFlags = CREATE_NO_WINDOW;
+ else
{
- *err = errno;
- *errmsg = "_close";
- return -1;
- }
+ /* There is a console associated with the process, so the OS
+ will not create a new console. And, if we use
+ CREATE_NO_WINDOW in this situation, the child will have
+ no associated console. Therefore, if the child's
+ standard streams are connected to the console, the output
+ will be discarded. */
+ CloseHandle(conout_handle);
+ dwCreationFlags = 0;
}
}
- newargv = fix_argv (argv);
- pid = (((flags & PEX_SEARCH) != 0 ? _spawnvp : _spawnv)
- (_P_NOWAIT, executable, newargv));
-
+ /* Since the child will be a console process, it will, by default,
+ connect standard input/output to its console. However, we want
+ the child to use the handles specifically designated above. In
+ addition, if there is no console (such as when we are running in
+ a Cygwin X window), then we must redirect the child's
+ input/output, as there is no console for the child to use. */
+ memset (&si, 0, sizeof (si));
+ si.cb = sizeof (si);
+ si.dwFlags = STARTF_USESTDHANDLES;
+ si.hStdInput = stdin_handle;
+ si.hStdOutput = stdout_handle;
+ si.hStdError = stderr_handle;
+
+ /* Create the child process. */
+ pid = win32_spawn (executable, (flags & PEX_SEARCH) != 0,
+ argv, dwCreationFlags, &si, &pi);
if (pid == -1)
- pid = spawn_script (executable, newargv);
-
+ pid = spawn_script (executable, argv, dwCreationFlags, &si, &pi);
if (pid == -1)
{
- *err = errno;
- *errmsg = ((flags & PEX_SEARCH) != 0) ? "_spawnvp" : "_spawnv";
- }
-
- if (in != STDIN_FILE_NO)
- {
- if (_dup2 (org_in, STDIN_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "_dup2";
- return -1;
- }
- if (_close (org_in) < 0)
- {
- *err = errno;
- *errmsg = "_close";
- return -1;
- }
- }
-
- if (out != STDOUT_FILE_NO)
- {
- if (_dup2 (org_out, STDOUT_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "_dup2";
- return -1;
- }
- if (_close (org_out) < 0)
- {
- *err = errno;
- *errmsg = "_close";
- return -1;
- }
+ *err = ENOENT;
+ *errmsg = "CreateProcess";
}
- if (errdes != STDERR_FILE_NO
- || (flags & PEX_STDERR_TO_STDOUT) != 0)
- {
- if (_dup2 (org_errdes, STDERR_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "_dup2";
- return -1;
- }
- if (_close (org_errdes) < 0)
- {
- *err = errno;
- *errmsg = "_close";
- return -1;
- }
- }
+ /* Close the standard output and standard error handles in the
+ parent. */
+ if (out != STDOUT_FILENO)
+ obj->funcs->close (obj, out);
+ if (errdes != STDERR_FILENO)
+ obj->funcs->close (obj, errdes);
return pid;
}
@@ -656,30 +716,34 @@
int *status, struct pex_time *time, int done ATTRIBUTE_UNUSED,
const char **errmsg, int *err)
{
- int termstat;
+ DWORD termstat;
+ HANDLE h;
if (time != NULL)
memset (time, 0, sizeof *time);
+ h = (HANDLE) pid;
+
/* FIXME: If done is non-zero, we should probably try to kill the
process. */
-
- if (_cwait (&termstat, pid, WAIT_CHILD) < 0)
+ if (WaitForSingleObject (h, INFINITE) != WAIT_OBJECT_0)
{
- *err = errno;
- *errmsg = "_cwait";
+ CloseHandle (h);
+ *err = ECHILD;
+ *errmsg = "WaitForSingleObject";
return -1;
}
- /* cwait returns the child process exit code in termstat. A value
- of 3 indicates that the child caught a signal, but not which one.
- Since only SIGABRT, SIGFPE and SIGINT do anything, we report
- SIGABRT. */
+ GetExitCodeProcess (h, &termstat);
+ CloseHandle (h);
+ /* A value of 3 indicates that the child caught a signal, but not
+ which one. Since only SIGABRT, SIGFPE and SIGINT do anything, we
+ report SIGABRT. */
if (termstat == 3)
*status = SIGABRT;
else
- *status = ((termstat & 0xff) << 8);
+ *status = (termstat & 0xff) << 8;
return 0;
}

View File

@@ -1,556 +0,0 @@
diff -Nbaur gdb-6.6/configure gdb-6.6-mingw/configure
--- gdb-6.6/configure Tue Nov 14 23:26:39 2006
+++ gdb-6.6-mingw/configure Tue Jun 12 18:33:14 2007
@@ -3271,7 +3271,7 @@
# Host dirs don't like to share a cache file either, horribly enough.
# This seems to be due to autoconf 2.5x stupidity.
-host_configargs="--cache-file=./config.cache --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
+host_configargs="${cache_file_option} --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
target_configargs=${baseargs}
diff -Nbaur gdb-6.6/configure.in gdb-6.6-mingw/configure.in
--- gdb-6.6/configure.in Mon Dec 18 07:22:58 2006
+++ gdb-6.6-mingw/configure.in Tue Jun 12 18:33:14 2007
@@ -2024,7 +2024,7 @@
# Host dirs don't like to share a cache file either, horribly enough.
# This seems to be due to autoconf 2.5x stupidity.
-host_configargs="--cache-file=./config.cache --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
+host_configargs="${cache_file_option} --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
target_configargs=${baseargs}
diff -Nbaur gdb-6.6/gdb/Makefile.in gdb-6.6-mingw/gdb/Makefile.in
--- gdb-6.6/gdb/Makefile.in Fri Nov 24 19:54:14 2006
+++ gdb-6.6-mingw/gdb/Makefile.in Tue Jun 12 18:33:14 2007
@@ -2983,7 +2983,7 @@
insight$(EXEEXT): gdbtk-main.o libgdb.a $(ADD_DEPS) \
$(CDEPS) $(TDEPLIBS)
rm -f insight$(EXEEXT)
- $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
+ $(CC_LD) -mwindows $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
-o insight$(EXEEXT) gdbtk-main.o libgdb.a \
$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)
diff -Nbaur gdb-6.6/gdb/config/i386/mingw.mh gdb-6.6-mingw/gdb/config/i386/mingw.mh
--- gdb-6.6/gdb/config/i386/mingw.mh Thu Jan 1 00:00:00 1970
+++ gdb-6.6-mingw/gdb/config/i386/mingw.mh Tue Jun 12 18:33:15 2007
@@ -0,0 +1,5 @@
+MH_CFLAGS=-D_POSIX_
+XM_FILE=xm-mingw32.h
+NATDEPFILES= i386-nat.o win32-nat.o corelow.o
+NAT_FILE=nm-mingw32.h
+XM_CLIBS=
diff -Nbaur gdb-6.6/gdb/config/i386/mingw.mt gdb-6.6-mingw/gdb/config/i386/mingw.mt
--- gdb-6.6/gdb/config/i386/mingw.mt Thu Jan 1 00:00:00 1970
+++ gdb-6.6-mingw/gdb/config/i386/mingw.mt Tue Jun 12 18:33:15 2007
@@ -0,0 +1,4 @@
+# Target: Intel x86 running Win32 (MinGW)
+TDEPFILES= i386-tdep.o i386-win32-tdep.o i387-tdep.o
+DEPRECATED_TM_FILE= tm-mingw32.h
+GDBSERVER_DEPFILES=
diff -Nbaur gdb-6.6/gdb/config/i386/nm-mingw32.h gdb-6.6-mingw/gdb/config/i386/nm-mingw32.h
--- gdb-6.6/gdb/config/i386/nm-mingw32.h Thu Jan 1 00:00:00 1970
+++ gdb-6.6-mingw/gdb/config/i386/nm-mingw32.h Tue Jun 12 18:33:15 2007
@@ -0,0 +1,38 @@
+/* Native definitions for Intel x86 running MinGW.
+ Copyright (C) 2002 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#define NO_PTRACE_H
+
+#define I386_USE_GENERIC_WATCHPOINTS
+
+#include "i386/nm-i386.h"
+
+/* Support for hardware-assisted breakpoints and watchpoints. */
+
+#define I386_DR_LOW_SET_CONTROL(VAL) cygwin_set_dr7 (VAL)
+extern void cygwin_set_dr7 (unsigned);
+
+#define I386_DR_LOW_SET_ADDR(N,ADDR) cygwin_set_dr (N,ADDR)
+extern void cygwin_set_dr (int, CORE_ADDR);
+
+#define I386_DR_LOW_RESET_ADDR(N)
+
+#define I386_DR_LOW_GET_STATUS() cygwin_get_dr6 ()
+extern unsigned cygwin_get_dr6 (void);
diff -Nbaur gdb-6.6/gdb/config/i386/tm-mingw32.h gdb-6.6-mingw/gdb/config/i386/tm-mingw32.h
--- gdb-6.6/gdb/config/i386/tm-mingw32.h Thu Jan 1 00:00:00 1970
+++ gdb-6.6-mingw/gdb/config/i386/tm-mingw32.h Tue Jun 12 18:33:15 2007
@@ -0,0 +1,21 @@
+/* Macro definitions for i386 running under Win32.
+ Copyright 1999 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "i386/tm-cygwin.h"
+
diff -Nbaur gdb-6.6/gdb/config/i386/xm-mingw32.h gdb-6.6-mingw/gdb/config/i386/xm-mingw32.h
--- gdb-6.6/gdb/config/i386/xm-mingw32.h Thu Jan 1 00:00:00 1970
+++ gdb-6.6-mingw/gdb/config/i386/xm-mingw32.h Tue Jun 12 18:33:15 2007
@@ -0,0 +1,25 @@
+/* Definitions for hosting on WIN32, building with MinGW, for GDB.
+ Copyright 1999 Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+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.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "fopen-bin.h"
+#define getkey getch
+#define DIRNAME_SEPARATOR ';'
+
+/* Define this if source files use \r\n rather than just \n. */
+#define CRLF_SOURCE_FILES
diff -Nbaur gdb-6.6/gdb/defs.h gdb-6.6-mingw/gdb/defs.h
--- gdb-6.6/gdb/defs.h Thu Sep 21 14:50:51 2006
+++ gdb-6.6-mingw/gdb/defs.h Tue Jun 12 18:33:15 2007
@@ -1167,7 +1167,7 @@
/* FIXME, this doesn't work very well if host and executable
filesystems conventions are different. */
-#ifdef __MSDOS__
+#if defined(__MSDOS__) || (!defined (__CYGWIN__) && defined (_WIN32))
# define CANT_FORK
# define GLOBAL_CURDIR
# define DIRNAME_SEPARATOR ';'
diff -Nbaur gdb-6.6/gdb/tui/tui-io.c gdb-6.6-mingw/gdb/tui/tui-io.c
--- gdb-6.6/gdb/tui/tui-io.c Fri Dec 23 19:10:02 2005
+++ gdb-6.6-mingw/gdb/tui/tui-io.c Tue Jun 12 18:33:24 2007
@@ -113,8 +113,11 @@
/* For gdb 5.3, prefer to continue the pipe hack as a backup wheel. */
#define TUI_USE_PIPE_FOR_READLINE
-/*#undef TUI_USE_PIPE_FOR_READLINE*/
+/* but remove for mingw host */
+#ifdef __MINGW32__
+#undef TUI_USE_PIPE_FOR_READLINE
+#endif
/* TUI output files. */
static struct ui_file *tui_stdout;
static struct ui_file *tui_stderr;
diff -Nbaur gdb-6.6/gdb/win32-nat.c gdb-6.6-mingw/gdb/win32-nat.c
--- gdb-6.6/gdb/win32-nat.c Mon May 22 00:04:39 2006
+++ gdb-6.6-mingw/gdb/win32-nat.c Tue Jun 12 18:33:24 2007
@@ -43,7 +43,11 @@
#include <stdlib.h>
#include <windows.h>
#include <imagehlp.h>
+
+#if defined (__CYGWIN__)
#include <sys/cygwin.h>
+#endif /* __CYGWIN__ */
+
#include <signal.h>
#include "buildsym.h"
@@ -81,7 +85,65 @@
CONTEXT_DEBUGGER = (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
};
#endif
-#include <sys/procfs.h>
+#ifndef __MINGW32__
+ #include <sys/procfs.h>
+#else
+ #define NOTE_INFO_PROCESS 1
+ #define NOTE_INFO_THREAD 2
+ #define NOTE_INFO_MODULE 3
+
+ struct win32_core_process_info
+ {
+ DWORD pid;
+ int signal;
+ int command_line_size;
+ char command_line[1];
+ }
+ #ifdef __GNUC__
+ __attribute__ ((packed))
+ #endif
+ ;
+
+ struct win32_core_thread_info
+ {
+ DWORD tid;
+ BOOL is_active_thread;
+ CONTEXT thread_context;
+ }
+ #ifdef __GNUC__
+ __attribute__ ((packed))
+ #endif
+ ;
+
+ struct win32_core_module_info
+ {
+ void* base_address;
+ int module_name_size;
+ char module_name[1];
+ }
+ #ifdef __GNUC__
+ __attribute__ ((packed))
+ #endif
+ ;
+
+ struct win32_pstatus
+ {
+ unsigned long data_type;
+ union
+ {
+ struct win32_core_process_info process_info;
+ struct win32_core_thread_info thread_info;
+ struct win32_core_module_info module_info;
+ } data ;
+ }
+ #ifdef __GNUC__
+ __attribute__ ((packed))
+ #endif
+ ;
+
+ typedef struct win32_pstatus win32_pstatus_t ;
+
+#endif
#include <psapi.h>
#define CONTEXT_DEBUGGER_DR CONTEXT_DEBUGGER | CONTEXT_DEBUG_REGISTERS \
@@ -446,30 +508,23 @@
static BOOL WINAPI (*psapi_GetModuleInformation) (HANDLE, HMODULE, LPMODULEINFO, DWORD) = NULL;
static DWORD WINAPI (*psapi_GetModuleFileNameExA) (HANDLE, HMODULE, LPSTR, DWORD) = NULL;
-static int
-psapi_get_dll_name (DWORD BaseAddress, char *dll_name_ret)
-{
- DWORD len;
- MODULEINFO mi;
- int i;
- HMODULE dh_buf[1];
- HMODULE *DllHandle = dh_buf;
- DWORD cbNeeded;
- BOOL ok;
+BOOL
+load_psapi ()
+{
if (!psapi_loaded ||
psapi_EnumProcessModules == NULL ||
psapi_GetModuleInformation == NULL ||
psapi_GetModuleFileNameExA == NULL)
{
if (psapi_loaded)
- goto failed;
+ return FALSE;
psapi_loaded = 1;
psapi_module_handle = LoadLibrary ("psapi.dll");
if (!psapi_module_handle)
{
/* printf_unfiltered ("error loading psapi.dll: %u", GetLastError ()); */
- goto failed;
+ return FALSE;
}
psapi_EnumProcessModules = GetProcAddress (psapi_module_handle, "EnumProcessModules");
psapi_GetModuleInformation = GetProcAddress (psapi_module_handle, "GetModuleInformation");
@@ -478,8 +533,24 @@
if (psapi_EnumProcessModules == NULL ||
psapi_GetModuleInformation == NULL ||
psapi_GetModuleFileNameExA == NULL)
- goto failed;
+ return FALSE;
}
+ return TRUE;
+}
+
+int
+psapi_get_dll_name (DWORD BaseAddress, char *dll_name_ret)
+{
+ DWORD len;
+ MODULEINFO mi;
+ int i;
+ HMODULE dh_buf[1];
+ HMODULE *DllHandle = dh_buf;
+ DWORD cbNeeded;
+ BOOL ok;
+
+ if (!load_psapi ())
+ goto failed;
cbNeeded = 0;
ok = (*psapi_EnumProcessModules) (current_process_handle,
@@ -507,14 +578,14 @@
DllHandle[i],
&mi,
sizeof (mi)))
- error (_("Can't get module info"));
+ error ("Can't get module info");
len = (*psapi_GetModuleFileNameExA) (current_process_handle,
DllHandle[i],
dll_name_ret,
MAX_PATH);
if (len == 0)
- error (_("Error getting dll name: %u."), (unsigned) GetLastError ());
+ error ("Error getting dll name: %u\n", (unsigned) GetLastError ());
if ((DWORD) (mi.lpBaseOfDll) == BaseAddress)
return 1;
@@ -525,6 +596,30 @@
return 0;
}
+int
+psapi_get_module_filename (HANDLE hProcess,
+ HMODULE hModule,
+ LPTSTR lpFilename,
+ DWORD nSize)
+{
+ DWORD len;
+
+ if (!load_psapi ())
+ goto failed;
+
+ len = (*psapi_GetModuleFileNameExA) (hProcess,
+ hModule,
+ lpFilename,
+ nSize);
+ if (len == 0)
+ error ("Error getting file name: %u\n", (unsigned) GetLastError ());
+
+failed:
+ lpFilename[0] = '\0';
+ return 0;
+}
+
+
/* Encapsulate the information required in a call to
symbol_file_add_args */
struct safe_symbol_file_add_args
@@ -753,7 +848,13 @@
so = XZALLOC (struct so_list);
so->lm_info = (struct lm_info *) xmalloc (sizeof (struct lm_info));
so->lm_info->load_addr = load_addr;
+
+#ifdef __CYGWIN__
cygwin_conv_to_posix_path (buf, so->so_name);
+#else
+ strcpy( so->so_name, buf);
+#endif
+
strcpy (so->so_original_name, so->so_name);
solib_end->next = so;
@@ -1734,6 +1835,7 @@
if (!ok)
{
+#ifdef __CYGWIN__
/* Try fall back to Cygwin pid */
pid = cygwin_internal (CW_CYGWIN_PID_TO_WINPID, pid);
@@ -1741,6 +1843,7 @@
ok = DebugActiveProcess (pid);
if (!ok)
+#endif /* __CYGWIN__ */
error (_("Can't attach to process."));
}
@@ -1800,13 +1903,14 @@
static char *
win32_pid_to_exec_file (int pid)
{
+ static char path[MAX_PATH + 1];
+ char *path_ptr = NULL;
+#ifdef __CYGWIN__
/* Try to find the process path using the Cygwin internal process list
pid isn't a valid pid, unfortunately. Use current_event.dwProcessId
instead. */
/* TODO: Also find native Windows processes using CW_GETPINFO_FULL. */
- static char path[MAX_PATH + 1];
- char *path_ptr = NULL;
int cpid;
struct external_pinfo *pinfo;
@@ -1824,6 +1928,13 @@
}
}
cygwin_internal (CW_UNLOCK_PINFO);
+#else
+ if (!psapi_get_module_filename (current_process_handle, NULL, path, MAX_PATH))
+ printf_unfiltered ("error reading the process's file name: %lu",
+ GetLastError ());
+ else
+ path_ptr = path;
+#endif
return path_ptr;
}
@@ -1873,8 +1984,16 @@
char *toexec;
char shell[MAX_PATH + 1]; /* Path to shell */
const char *sh;
+#if defined (__MINGW32__)
+ /* BEGIN: Fragment of Al Stevens's patch for GDB on Win9x */
+ HANDLE hStdInput = 0;
+ HANDLE hStdOutput = 0;
+ HANDLE hStdError = 0;
+ /* END: Fragment of Al Stevens's patch for GDB on Win9x */
+#else /* !__MINGW32__ */
int tty;
int ostdin, ostdout, ostderr;
+#endif /* !__MINGW32__ */
const char *inferior_io_terminal = get_inferior_io_terminal ();
if (!exec_file)
@@ -1886,7 +2005,12 @@
if (!useshell)
{
flags = DEBUG_ONLY_THIS_PROCESS;
+#ifdef __CYGWIN__
cygwin_conv_to_win32_path (exec_file, real_path);
+#else
+ strcpy (real_path, exec_file);
+#endif
+
toexec = real_path;
}
else
@@ -1895,7 +2019,11 @@
sh = getenv ("SHELL");
if (!sh)
sh = "/bin/sh";
+#ifdef __CYGWIN__
cygwin_conv_to_win32_path (sh, shell);
+#else
+ strcpy (shell, sh);
+#endif
newallargs = alloca (sizeof (" -c 'exec '") + strlen (exec_file)
+ strlen (allargs) + 2);
sprintf (newallargs, " -c 'exec %s %s'", exec_file, allargs);
@@ -1946,10 +2074,12 @@
len = strlen (conv_path_names[j]);
if (strncmp (conv_path_names[j], in_env[i], len) == 0)
{
- if (cygwin_posix_path_list_p (in_env[i] + len))
+#ifdef __CYGWIN__
+ if (cygwin_posix_path_list_p (env[i] + len))
envlen += len
- + cygwin_posix_to_win32_path_list_buf_size (in_env[i] + len);
+ + cygwin_posix_to_win32_path_list_buf_size (env[i] + len);
else
+#endif
envlen += strlen (in_env[i]) + 1;
break;
}
@@ -1976,12 +2106,14 @@
len = strlen (conv_path_names[j]);
if (strncmp (conv_path_names[j], env[i], len) == 0)
{
+#ifdef __CYGWIN__
if (cygwin_posix_path_list_p (env[i] + len))
{
memcpy (temp, env[i], len);
cygwin_posix_to_win32_path_list (env[i] + len, temp + len);
}
else
+#endif
strcpy (temp, env[i]);
break;
}
@@ -1996,6 +2128,20 @@
*temp = 0;
}
+#if defined (__MINGW32__)
+ /* BEGIN: Fragment of Al Stevens's patch for GDB on Win9x */
+ if ( new_console)
+ {
+ hStdInput = GetStdHandle( STD_INPUT_HANDLE);
+ hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE);
+ hStdError = GetStdHandle( STD_ERROR_HANDLE);
+
+ SetStdHandle( STD_INPUT_HANDLE, INVALID_HANDLE_VALUE);
+ SetStdHandle( STD_OUTPUT_HANDLE, INVALID_HANDLE_VALUE);
+ SetStdHandle( STD_ERROR_HANDLE, INVALID_HANDLE_VALUE);
+ }
+ /* END: Fragment of Al Stevens's patch for GDB on Win9x */
+#else /* !__MINGW32__ */
if (!inferior_io_terminal)
tty = ostdin = ostdout = ostderr = -1;
else
@@ -2016,6 +2162,7 @@
dup2 (tty, 2);
}
}
+#endif /* !__MINGW32__ */
win32_init_thread_list ();
ret = CreateProcess (0,
@@ -2028,6 +2175,16 @@
NULL, /* current directory */
&si,
&pi);
+#if defined (__MINGW32__)
+ /* BEGIN: Fragment of Al Stevens's patch for GDB on Win9x */
+ if ( new_console)
+ {
+ SetStdHandle( STD_INPUT_HANDLE, hStdInput);
+ SetStdHandle( STD_OUTPUT_HANDLE, hStdOutput);
+ SetStdHandle( STD_ERROR_HANDLE, hStdError);
+ }
+ /* END: Fragment of Al Stevens's patch for GDB on Win9x */
+#else /* !__MINGW32__ */
if (tty >= 0)
{
close (tty);
@@ -2038,6 +2195,7 @@
close (ostdout);
close (ostderr);
}
+#endif /* !__MINGW32__ */
if (!ret)
error (_("Error creating process %s, (error %d)."),

File diff suppressed because it is too large Load Diff