* Re: Support of gdb for Windows 64 native systems [not found] <20071011142348.GA18239@caradoc.them.org> @ 2007-10-11 14:47 ` Kai Tietz [not found] ` <20071011145549.GA19918@caradoc.them.org> 0 siblings, 1 reply; 28+ messages in thread From: Kai Tietz @ 2007-10-11 14:47 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb Daniel Jacobowitz wrote on 11.10.2007 16:23:48: > On Thu, Oct 11, 2007 at 04:18:40PM +0200, Kai Tietz wrote: > > Hmm, wouldn't this be a good chance to bring back the mingw32 support to > > the FSF GDB tree ? For sure most of those patches for i?86-mingw are > > needed for 64-bit mingw32 too (especially the file-I/O and shared object > > stuff). But the calling convention for 64-bit is more simple than for the > > 32-bit version. > > Do you think there is no chance for this support ? > > All it needs is someone who is interested to do the work. And we > can't start from the MinGW project's patches, because they are not > assigned to the FSF (I don't know why not but that's what I was told). Ok, I questioned mingw, why they did not assigned those patches to the FSF. But on the otherhand, I would do this work (I need to make an other FSF assignement for gdb), if I get some advice. Until now, I haven't worked with gdb sources, so the architecture is a bit strange for me. Is there a good documentation about the subject how to add an new target (TUI) ? Cheers, i.A. Kai Tietz | (\_/) This is Bunny. Copy and paste Bunny | (='.'=) into your signature to help him gain | (")_(") world domination. ------------------------------------------------------------------------------------------ OneVision Software Entwicklungs GmbH & Co. KG Dr.-Leo-Ritter-Straße 9 - 93049 Regensburg Tel: +49.(0)941.78004.0 - Fax: +49.(0)941.78004.489 - www.OneVision.com Commerzbank Regensburg - BLZ 750 400 62 - Konto 6011050 Handelsregister: HRA 6744, Amtsgericht Regensburg Komplementärin: OneVision Software Entwicklungs Verwaltungs GmbH Dr.-Leo-Ritter-Straße 9 – 93049 Regensburg Handelsregister: HRB 8932, Amtsgericht Regensburg - Geschäftsführer: Ulrike Döhler, Manuela Kluger ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <20071011145549.GA19918@caradoc.them.org>]
* Re: Support of gdb for Windows 64 native systems [not found] ` <20071011145549.GA19918@caradoc.them.org> @ 2007-10-11 16:01 ` Joel Brobecker 2007-10-12 3:38 ` Christopher Faylor 2007-10-11 16:37 ` Mark Kettenis ` (2 subsequent siblings) 3 siblings, 1 reply; 28+ messages in thread From: Joel Brobecker @ 2007-10-11 16:01 UTC (permalink / raw) To: Kai Tietz, gdb > There's documentation in the internals manual. For a native Windows > target, you'd have to talk to Chris about how to avoid duplicating > or complicating the Cygwin support. Just for the record, AdaCore has a native win32 port of GDB, inspired mostly from the mingw project. Our patch is kept up to date against the FSF head too, so it should be relatively easy to submit it. Except, as Daniel mentions, there are probably some issues relative to co-existence with cygwin support that need to be addressed. This is high on my list, so if I wasn't so busy for this end of year, it's a project I would have already started. (and there is the copyright assignment issue, but I'm hoping this is solvable) -- Joel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-11 16:01 ` Joel Brobecker @ 2007-10-12 3:38 ` Christopher Faylor 2007-10-12 4:27 ` Joel Brobecker 0 siblings, 1 reply; 28+ messages in thread From: Christopher Faylor @ 2007-10-12 3:38 UTC (permalink / raw) To: gdb, Joel Brobecker, Kai Tietz On Thu, Oct 11, 2007 at 09:00:58AM -0700, Joel Brobecker wrote: >>There's documentation in the internals manual. For a native Windows >>target, you'd have to talk to Chris about how to avoid duplicating or >>complicating the Cygwin support. > >Just for the record, AdaCore has a native win32 port of GDB, inspired >mostly from the mingw project. Our patch is kept up to date against >the FSF head too, so it should be relatively easy to submit it. >Except, as Daniel mentions, there are probably some issues relative to >co-existence with cygwin support that need to be addressed. This is >high on my list, so if I wasn't so busy for this end of year, it's a >project I would have already started. (and there is the copyright >assignment issue, but I'm hoping this is solvable) If you're using modified mingw patches then it seems to me like you've actually compounded the whole issue of copyright assignment. cgf ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-12 3:38 ` Christopher Faylor @ 2007-10-12 4:27 ` Joel Brobecker 0 siblings, 0 replies; 28+ messages in thread From: Joel Brobecker @ 2007-10-12 4:27 UTC (permalink / raw) To: gdb, Kai Tietz > If you're using modified mingw patches then it seems to me like you've > actually compounded the whole issue of copyright assignment. That's completely possible; this was a while ago, and I didn't think about assignment issues as much as I do today. I'll try to find out more precisely what needs to be done... -- Joel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems [not found] ` <20071011145549.GA19918@caradoc.them.org> 2007-10-11 16:01 ` Joel Brobecker @ 2007-10-11 16:37 ` Mark Kettenis 2007-10-12 7:19 ` Kai Tietz 2007-10-12 8:44 ` Eli Zaretskii 3 siblings, 0 replies; 28+ messages in thread From: Mark Kettenis @ 2007-10-11 16:37 UTC (permalink / raw) To: drow; +Cc: Kai.Tietz, gdb > Date: Thu, 11 Oct 2007 10:55:49 -0400 > From: Daniel Jacobowitz <drow@false.org> > > On Thu, Oct 11, 2007 at 04:47:28PM +0200, Kai Tietz wrote: > > Ok, I questioned mingw, why they did not assigned those patches to the > > FSF. But on the otherhand, I would do this work (I need to make an other > > FSF assignement for gdb), if I get some advice. Until now, I haven't > > worked with gdb sources, so the architecture is a bit strange for me. Is > > there a good documentation about the subject how to add an new target > > (TUI) ? > > What does the TUI have to do with it? TUI in particular is > troublesome for mingw because of the lack of good curses libraries. That's easily solved by disabling the TUI on mingw. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems [not found] ` <20071011145549.GA19918@caradoc.them.org> 2007-10-11 16:01 ` Joel Brobecker 2007-10-11 16:37 ` Mark Kettenis @ 2007-10-12 7:19 ` Kai Tietz 2007-10-12 8:44 ` Eli Zaretskii 3 siblings, 0 replies; 28+ messages in thread From: Kai Tietz @ 2007-10-12 7:19 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb Daniel, > On Thu, Oct 11, 2007 at 04:47:28PM +0200, Kai Tietz wrote: > > Ok, I questioned mingw, why they did not assigned those patches to the > > FSF. But on the otherhand, I would do this work (I need to make an other > > FSF assignement for gdb), if I get some advice. Until now, I haven't > > worked with gdb sources, so the architecture is a bit strange for me. Is > > there a good documentation about the subject how to add an new target > > (TUI) ? > > What does the TUI have to do with it? TUI in particular is > troublesome for mingw because of the lack of good curses libraries. > > There's documentation in the internals manual. For a native Windows > target, you'd have to talk to Chris about how to avoid duplicating > or complicating the Cygwin support. Thank you for your help. I will contact cfg when the paper-work with FSF for the gdb assignment is done. Cheers, i.A. Kai Tietz | (\_/) This is Bunny. Copy and paste Bunny | (='.'=) into your signature to help him gain | (")_(") world domination. ------------------------------------------------------------------------------------------ OneVision Software Entwicklungs GmbH & Co. KG Dr.-Leo-Ritter-Straße 9 - 93049 Regensburg Tel: +49.(0)941.78004.0 - Fax: +49.(0)941.78004.489 - www.OneVision.com Commerzbank Regensburg - BLZ 750 400 62 - Konto 6011050 Handelsregister: HRA 6744, Amtsgericht Regensburg Komplementärin: OneVision Software Entwicklungs Verwaltungs GmbH Dr.-Leo-Ritter-Straße 9 – 93049 Regensburg Handelsregister: HRB 8932, Amtsgericht Regensburg - Geschäftsführer: Ulrike Döhler, Manuela Kluger ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems [not found] ` <20071011145549.GA19918@caradoc.them.org> ` (2 preceding siblings ...) 2007-10-12 7:19 ` Kai Tietz @ 2007-10-12 8:44 ` Eli Zaretskii 2007-10-12 16:11 ` Joel Brobecker 3 siblings, 1 reply; 28+ messages in thread From: Eli Zaretskii @ 2007-10-12 8:44 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: Kai.Tietz, gdb > Date: Thu, 11 Oct 2007 10:55:49 -0400 > From: Daniel Jacobowitz <drow@false.org> > Cc: gdb@sourceware.org > > For a native Windows target, you'd have to talk to Chris about how > to avoid duplicating or complicating the Cygwin support. Actually, wouldn't it be better to separate the two completely? That should avoid a lot of ugly ifdefs, and make each native backend much cleaner, I think. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-12 8:44 ` Eli Zaretskii @ 2007-10-12 16:11 ` Joel Brobecker 2007-10-12 16:51 ` Eli Zaretskii 2007-10-12 17:38 ` Pedro Alves 0 siblings, 2 replies; 28+ messages in thread From: Joel Brobecker @ 2007-10-12 16:11 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Daniel Jacobowitz, Kai.Tietz, gdb > Actually, wouldn't it be better to separate the two completely? That > should avoid a lot of ugly ifdefs, and make each native backend much > cleaner, I think. The issue with that is that we'll end up duplicating a bit of code. In our merge, I counted 5 instances of "ifdef/ifndef __MINGW32__ in total, all of them in win32-nat.c: - One to define MAXPATHLEN: Should really be done in a proper way, so should go away - One to avoid the #include <sys/procfs.h>: Should also be done using HAVE_SYS_PROCFS_H, so should also go away - 3 #ifdef __MINGW32__ in create_inferior to replace unix-style IO handling with Windows-style IO handling. Can we call functions like GetStdHandle from the cygwin compiler, or do we need the MinGW headers for that? Perhaps the mingw code could also work with cygwin? The rest seems to be in i386-win32-tdep.c which is a separate file. -- Joel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-12 16:11 ` Joel Brobecker @ 2007-10-12 16:51 ` Eli Zaretskii 2007-10-12 17:45 ` Joel Brobecker 2007-10-12 17:38 ` Pedro Alves 1 sibling, 1 reply; 28+ messages in thread From: Eli Zaretskii @ 2007-10-12 16:51 UTC (permalink / raw) To: Joel Brobecker; +Cc: drow, Kai.Tietz, gdb > Date: Fri, 12 Oct 2007 09:11:32 -0700 > From: Joel Brobecker <brobecker@adacore.com> > Cc: Daniel Jacobowitz <drow@false.org>, Kai.Tietz@onevision.com, > gdb@sourceware.org > > > Actually, wouldn't it be better to separate the two completely? That > > should avoid a lot of ugly ifdefs, and make each native backend much > > cleaner, I think. > > The issue with that is that we'll end up duplicating a bit of code. So what? the duplicates will never be linked into the same build. We already have duplicate code in targets that are alike, one more cannot hurt. In my experience, mixing two different targets is asking for trouble in the long run. > In our merge, I counted 5 instances of "ifdef/ifndef __MINGW32__ You need to count "ifdef __CYGWIN__" as well. > in total, all of them in win32-nat.c: > - One to define MAXPATHLEN: Should really be done in a proper way, > so should go away I don't see this one in the current CVS; am I missing something? > The rest seems to be in i386-win32-tdep.c which is a separate file. I don't see this file, either, so I cannot comment on that. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-12 16:51 ` Eli Zaretskii @ 2007-10-12 17:45 ` Joel Brobecker 2007-10-12 20:29 ` Eli Zaretskii 0 siblings, 1 reply; 28+ messages in thread From: Joel Brobecker @ 2007-10-12 17:45 UTC (permalink / raw) To: Eli Zaretskii; +Cc: drow, Kai.Tietz, gdb > So what? the duplicates will never be linked into the same build. We > already have duplicate code in targets that are alike, one more cannot > hurt. I have to disagree on that. We're looking at duplicating 95% of the code. That means duplicating 95% of the maintenance. I just had a look at our code and I was surprised to see how little code is needed now to add support for native win32 support. If it wasn't for copyright issues, I'm thinking that I could be submitting this for inclusion with at most a day or two of work! I'm happy to keep discussing this design aspect, but I think we should leave that discussion to when someone is ready to contribute something. > In my experience, mixing two different targets is asking for trouble > in the long run. It depends. I somehow we could abstract out the code that handles IO in a way that it is transparent to the windows nat code, just the same way we introduced gdb_select, then we can share everything. > > In our merge, I counted 5 instances of "ifdef/ifndef __MINGW32__ > > You need to count "ifdef __CYGWIN__" as well. Actually, currently all except one such ifdef are used as "if on windows". They look like this: #if defined(_WIN32) || defined(__CYGWIN__) The only one is in gdbserver, to convert a solib path into a posix path when using cygwin. > > in total, all of them in win32-nat.c: > > - One to define MAXPATHLEN: Should really be done in a proper way, > > so should go away > > I don't see this one in the current CVS; am I missing something? Yes, this is not necessary on cygwin, and mingw is not supported, so it's only in our (AdaCore) tree (and probably the mingw tree as well). It is: #ifdef __MINGW32__ #define MAXPATHLEN PATH_MAX #endif > > The rest seems to be in i386-win32-tdep.c which is a separate file. > > I don't see this file, either, so I cannot comment on that. Yes, this is normal, because this file is not part of the FSF CVS. It's a separate file that would only be needed for native win32 support. And now that I'm having a closer look at it, it looks like this file is a subset of the cygwin-tdep file, so I should probably experiment with the idea of replacing the win32-tdep file by the cygwin-tdep one! It's been a profitable discussion. Thanks a lot! -- Joel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-12 17:45 ` Joel Brobecker @ 2007-10-12 20:29 ` Eli Zaretskii 2007-10-12 22:28 ` Joel Brobecker 0 siblings, 1 reply; 28+ messages in thread From: Eli Zaretskii @ 2007-10-12 20:29 UTC (permalink / raw) To: Joel Brobecker; +Cc: drow, Kai.Tietz, gdb > Date: Fri, 12 Oct 2007 10:42:18 -0700 > From: Joel Brobecker <brobecker@adacore.com> > Cc: drow@false.org, Kai.Tietz@onevision.com, gdb@sourceware.org > > > So what? the duplicates will never be linked into the same build. We > > already have duplicate code in targets that are alike, one more cannot > > hurt. > > I have to disagree on that. We're looking at duplicating 95% of > the code. That means duplicating 95% of the maintenance. I assumed the two files will have different maintainers, too. > > > In our merge, I counted 5 instances of "ifdef/ifndef __MINGW32__ > > > > You need to count "ifdef __CYGWIN__" as well. > > Actually, currently all except one such ifdef are used as "if on > windows". They look like this: > > #if defined(_WIN32) || defined(__CYGWIN__) Not in the GDB CVS. > #ifdef __MINGW32__ > #define MAXPATHLEN PATH_MAX > #endif This, for example, is strictly speaking wrong on Windows: Windows supports much longer file names (up to 32K), if you use Unicode APIs. > > > The rest seems to be in i386-win32-tdep.c which is a separate file. > > > > I don't see this file, either, so I cannot comment on that. > > Yes, this is normal, because this file is not part of the FSF CVS. > It's a separate file that would only be needed for native win32 support. Well, in that case, maybe you already refactored the code in a way that makes my points moot. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-12 20:29 ` Eli Zaretskii @ 2007-10-12 22:28 ` Joel Brobecker 2007-10-13 2:41 ` Joel Brobecker 0 siblings, 1 reply; 28+ messages in thread From: Joel Brobecker @ 2007-10-12 22:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: drow, Kai.Tietz, gdb > > I have to disagree on that. We're looking at duplicating 95% of > > the code. That means duplicating 95% of the maintenance. > > I assumed the two files will have different maintainers, too. I would like us to avoid this situation if we can because we'll waste time keeping the two ports in sync. I'm actually ready to accept a situation where Chris doesn't have to worry at all about breaking MingW, and I'll fix the broken pieces as I discover them. > > Actually, currently all except one such ifdef are used as "if on > > windows". They look like this: > > > > #if defined(_WIN32) || defined(__CYGWIN__) > > Not in the GDB CVS. Sorry, you're right. But I think my point still stands: Most __CYGWIN__ ifdefs are here to mean "if we are on windows", and the same code would apply for both ports. > > #ifdef __MINGW32__ > > #define MAXPATHLEN PATH_MAX > > #endif > > This, for example, is strictly speaking wrong on Windows: Windows > supports much longer file names (up to 32K), if you use Unicode APIs. You are probably correct, I really know very little about Windows. My point was that this is the wrong way of doing it anyway, so this too will go, thus reducing a bit more the differences. > > > > The rest seems to be in i386-win32-tdep.c which is a separate file. > > > > > > I don't see this file, either, so I cannot comment on that. > > > > Yes, this is normal, because this file is not part of the FSF CVS. > > It's a separate file that would only be needed for native win32 support. > > Well, in that case, maybe you already refactored the code in a way > that makes my points moot. I did chop a lot of code off, that's for sure :). That was thanks to CodeSourcery's work in porting GDB to MinGW as a host. I have created some action items on my side to investigate how much I can get rid of... So far today, I'm working on getting my latest merge to work, and then I'll take a look at this. -- Joel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-12 22:28 ` Joel Brobecker @ 2007-10-13 2:41 ` Joel Brobecker 2007-10-13 10:48 ` Eli Zaretskii 0 siblings, 1 reply; 28+ messages in thread From: Joel Brobecker @ 2007-10-13 2:41 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Kai.Tietz, gdb [-- Attachment #1: Type: text/plain, Size: 2592 bytes --] Hello Eli, I was able to get rid of i386-win32-tdep.c and use i386-cygwin-tdep.c instead. So one more difference gone. I fixed the problem with including <sys/procfs.h> trivially, since we already check for this include file during the configure phase. The size of the patch has reduced quite a bit thanks to our discussing this together. I'm attaching a rough sketch of the changes I think are needed to adapt the cygwin port to also support mingw. It turns out that there are more changes that I was claiming. My approach of serching for ifdefs was a bit over simplistic. Since we have copyright assignment issues anyway, I haven't tried to be extremely precise in the patch, as I can't officially submit it for inclusion. However, this gives a rough idea of the magnitude of the task. Please ignore the TO_HOST_DIR_SPEC etc changes. These are relics from the times when we used to provide a cygwin debugger that pretended to be mingw debugger by outputing/accepting mingw paths. We should really clean these out of our tree someday... Back when I worked on this, my approach was to patch only the files that I thought needed to be patched, rather than importing the entire mega patch. However, I did tend to apply blindly the pieces I took, so I don't necessarily know that all the changes in win32-nat.c are necessary. That's a cleanup left for later. I haven't included the configure.tgt change, since it is trivial. I might be missing some configure.ac changes, I'm not sure. Here is the mingw.mt makefile fragment: # Target: Intel x86 running Win32 (MinGW) TDEPFILES= i386-tdep.o i386-cygwin-tdep.o i387-tdep.o solib-target.o DEPRECATED_TM_FILE= tm-mingw32.h GDBSERVER_DEPFILES= Unfortunately, as you can see, we're still using a tm file, which only contains the following definition: #define ATTACH_NO_WAIT It should be pretty easy to work around this. It's strange that mingw would require it and not cygwin, but I haven't looked deaper into this. Perhaps cygwin does some magic to fake an event. It just happens that I had to do the same in my wait loop on my WTX backend (for VxWorks). > > > #ifdef __MINGW32__ > > > #define MAXPATHLEN PATH_MAX > > > #endif > > > > This, for example, is strictly speaking wrong on Windows: Windows > > supports much longer file names (up to 32K), if you use Unicode APIs. > > You are probably correct, I really know very little about Windows. This, I still haven't fixed, because I don't know what the proper thing to do is. What do you think I should use on Windows? I'll happily fix it. -- Joel [-- Attachment #2: mingw.diff --] [-- Type: text/plain, Size: 15359 bytes --] Index: win32-nat.c =================================================================== --- win32-nat.c (.../branches/gdb/FSF/current/gdb) (revision 15044) +++ win32-nat.c (.../trunk/gdb/gdb-head/gdb) (revision 15044) @@ -22,8 +22,6 @@ /* Originally by Steve Chamberlain, sac@cygnus.com */ -/* We assume we're being built with and will be used for cygwin. */ - #include "defs.h" #include "frame.h" /* required by inferior.h */ #include "inferior.h" @@ -40,7 +38,9 @@ #include <stdlib.h> #include <windows.h> #include <imagehlp.h> +#ifdef HAVE_SYS_CYGWIN_H #include <sys/cygwin.h> +#endif #include <signal.h> #include "buildsym.h" @@ -51,6 +51,9 @@ #include "gdbthread.h" #include "gdbcmd.h" #include <sys/param.h> +#ifdef __MINGW32__ + #define MAXPATHLEN PATH_MAX +#endif #include <unistd.h> #include "exec.h" #include "solist.h" @@ -81,7 +84,9 @@ enum CONTEXT_DEBUGGER = (CONTEXT_FULL | CONTEXT_FLOATING_POINT) }; #endif +#ifdef HAVE_SYS_PROCFS_H #include <sys/procfs.h> +#endif #include <psapi.h> #define CONTEXT_DEBUGGER_DR CONTEXT_DEBUGGER | CONTEXT_DEBUG_REGISTERS \ @@ -105,6 +110,7 @@ static int debug_registers_used; static void win32_stop (void); static int win32_win32_thread_alive (ptid_t); +static char *win32_pid_to_str (ptid_t ptid); static void win32_kill_inferior (void); static enum target_signal last_sig = TARGET_SIGNAL_0; @@ -237,10 +243,52 @@ static void check (BOOL ok, const char *file, int line) { if (!ok) - printf_filtered ("error return %s:%d was %lu\n", file, line, - GetLastError ()); + { + LPVOID lpMsgBuf; + DWORD last_error = GetLastError (); + if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + last_error, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, + NULL)) + { + printf_filtered ("error return %s:%d was %lu\n", file, line, + last_error); + } + else + { + printf_filtered ("error return %s:%d: [%lu] %s\n", file, line, + last_error, (LPCTSTR) lpMsgBuf); + LocalFree (lpMsgBuf); + } + } } +#ifndef HAVE_CYGWIN_CONV_TO_POSIX_PATH +/* A basic replacement implementation for cygwin_conv_to_posix_path () + when not available (basically, when building using a MinGW compiler). */ + +static void +cygwin_conv_to_posix_path (const char *path, char *posix_path) +{ + strcpy (posix_path, path); +} +#endif + +#ifndef HAVE_CYGWIN_CONV_TO_WIN32_PATH +/* A basic replacement implementation for cygwin_conv_to_win32_path () + when not available (basically, when building using a MinGW compiler). */ +static void +cygwin_conv_to_win32_path (const char *path, char *win32_path) +{ + strcpy (win32_path, path); +} +#endif + /* Find a thread record given a thread id. If get_context then also retrieve the context for this thread. */ @@ -446,30 +494,22 @@ static BOOL WINAPI (*psapi_EnumProcessMo 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) +BOOL +load_psapi () { - DWORD len; - MODULEINFO mi; - int i; - HMODULE dh_buf[1]; - HMODULE *DllHandle = dh_buf; - DWORD cbNeeded; - BOOL ok; - 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,9 +518,25 @@ psapi_get_dll_name (DWORD BaseAddress, c 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, DllHandle, @@ -525,6 +581,29 @@ failed: 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 @@ -542,6 +621,9 @@ struct safe_symbol_file_add_args struct lm_info { DWORD load_addr; + + /* The ImageBase, aka the prefered load address. */ + CORE_ADDR image_base; }; static struct so_list solib_start, *solib_end; @@ -637,6 +719,7 @@ win32_make_so (const char *name, DWORD l so = XZALLOC (struct so_list); so->lm_info = (struct lm_info *) xmalloc (sizeof (struct lm_info)); so->lm_info->load_addr = load_addr; + so->lm_info->image_base = 0; /* Will be filled in later. */ cygwin_conv_to_posix_path (buf, so->so_name); strcpy (so->so_original_name, name); @@ -769,7 +852,14 @@ handle_unload_dll (void *dummy) return 1; } - error (_("Error: dll starting at 0x%lx not found."), (DWORD) lpBaseOfDll); + /* brobecker/2006-06-15: If we reach that point, that means that + the debugger doesn't know of any DLL loaded at this particular + address. The reason for this discrepancy is unknown, but what + we have found out is that all the users have found an error + message to be confusing, and useless (no real information as + to what is happening such as the DLL name for instance can be + computed). In any case, it's just fine to ignore this unload + event and continue silently. */ return 0; } @@ -1227,6 +1317,10 @@ win32_resume (ptid_t ptid, int step, enu FIXME: should we set dr6 also ?? */ th->context.Dr7 = dr[7]; } + + DEBUG_EVENTS (("gdb: child_resume.SetThreadContext: %s\n", + target_pid_to_str (pid_to_ptid (th->id)))); + CHECK (SetThreadContext (th->h, &th->context)); th->context.ContextFlags = 0; } @@ -1465,6 +1559,9 @@ do_initial_win32_stuff (DWORD pid) extern int stop_after_trap; int i; + DEBUG_EVENTS (("gdb: do_initial_child_stuff: %s\n", + target_pid_to_str (pid_to_ptid (pid)))); + last_sig = TARGET_SIGNAL_0; event_count = 0; exception_count = 0; @@ -1627,6 +1724,10 @@ win32_attach (char *args, int from_tty) if (!ok) { +#ifdef __CYGWIN__ + /* FIXME: This can be implemented better. Just moved the last + if (!ok) block out of this if block, and put this entire + if block under #ifdef __CYGWIN__. */ /* Try fall back to Cygwin pid */ pid = cygwin_internal (CW_CYGWIN_PID_TO_WINPID, pid); @@ -1634,6 +1735,7 @@ win32_attach (char *args, int from_tty) ok = DebugActiveProcess (pid); if (!ok) +#endif /* __CYGWIN__ */ error (_("Can't attach to process.")); } @@ -1694,13 +1796,14 @@ win32_detach (char *args, int from_tty) 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; @@ -1718,7 +1821,15 @@ win32_pid_to_exec_file (int pid) } } 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; + } /* Print status information about what we're accessing. */ @@ -1736,6 +1847,15 @@ win32_open (char *arg, int from_tty) error (_("Use the \"run\" command to start a Unix child process.")); } +/* Function called by qsort to sort environment strings. */ +static int +env_sort (const void *a, const void *b) +{ + const char **p = (const char **) a; + const char **q = (const char **) b; + return strcasecmp (*p, *q); +} + /* Start an inferior win32 child process and sets inferior_ptid to its pid. EXEC_FILE is the file to run. ALLARGS is a string containing the arguments to the program. @@ -1754,8 +1874,16 @@ win32_create_inferior (char *exec_file, 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) @@ -1799,8 +1927,90 @@ win32_create_inferior (char *exec_file, strcat (args, allargs); /* Prepare the environment vars for CreateProcess. */ +#ifdef __CYGWIN__ cygwin_internal (CW_SYNC_WINENV); +#else + { + static const char *conv_path_names[] = + { + "PATH=", + 0 + }; + int envlen; + int i; + size_t envsize; + char **env; + char *winenv; + char *temp; + + /* CreateProcess takes the environment list as a null terminated set of + strings (i.e. two nulls terminate the list). */ + + /* Get total size for env strings. */ + for (envlen = 0, i = 0; in_env[i] && *in_env[i]; i++) + { + int j, len; + + for (j = 0; conv_path_names[j]; j++) + { + len = strlen (conv_path_names[j]); + if (strncmp (conv_path_names[j], in_env[i], len) == 0) + { + envlen += strlen (in_env[i]) + 1; + break; + } + } + if (conv_path_names[j] == NULL) + envlen += strlen (in_env[i]) + 1; + } + + envsize = sizeof (in_env[0]) * (i + 1); + env = (char **) alloca (envsize); + memcpy (env, in_env, envsize); + /* Windows programs expect the environment block to be sorted. */ + qsort (env, i, sizeof (char *), env_sort); + + winenv = alloca (envlen + 1); + + /* Copy env strings into new buffer. */ + for (temp = winenv, i = 0; env[i] && *env[i]; i++) + { + int j, len; + + for (j = 0; conv_path_names[j]; j++) + { + len = strlen (conv_path_names[j]); + if (strncmp (conv_path_names[j], env[i], len) == 0) + { + strcpy (temp, env[i]); + break; + } + } + if (conv_path_names[j] == NULL) + strcpy (temp, env[i]); + temp += strlen (temp) + 1; + } + + /* Final nil string to terminate new env. */ + *temp = 0; + } +#endif + +#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 @@ -1821,6 +2031,7 @@ win32_create_inferior (char *exec_file, dup2 (tty, 2); } } +#endif /* !__MINGW32__ */ win32_init_thread_list (); ret = CreateProcess (0, @@ -1833,6 +2044,16 @@ win32_create_inferior (char *exec_file, 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); @@ -1843,7 +2064,7 @@ win32_create_inferior (char *exec_file, close (ostdout); close (ostderr); } - +#endif /* !__MINGW32__ */ if (!ret) error (_("Error creating process %s, (error %d)."), exec_file, (unsigned) GetLastError ()); @@ -1947,11 +2168,15 @@ win32_close (int x) { DEBUG_EVENTS (("gdb: win32_close, inferior_ptid=%d\n", PIDGET (inferior_ptid))); + win32_init_thread_list (); + disable_breakpoints_in_shlibs (); + win32_clear_solib (); + clear_proceed_status (); } /* Convert pid to printable format. */ static char * -cygwin_pid_to_str (ptid_t ptid) +win32_pid_to_str (ptid_t ptid) { static char buf[80]; int pid = PIDGET (ptid); @@ -2055,7 +2280,7 @@ init_win32_ops (void) win32_ops.to_mourn_inferior = win32_mourn_inferior; win32_ops.to_can_run = win32_can_run; win32_ops.to_thread_alive = win32_win32_thread_alive; - win32_ops.to_pid_to_str = cygwin_pid_to_str; + win32_ops.to_pid_to_str = win32_pid_to_str; win32_ops.to_stop = win32_stop; win32_ops.to_stratum = process_stratum; win32_ops.to_has_all_memory = 1; Index: symfile.c =================================================================== --- symfile.c (.../branches/gdb/FSF/current/gdb) (revision 15044) +++ symfile.c (.../trunk/gdb/gdb-head/gdb) (revision 15044) @@ -1641,10 +1674,21 @@ symfile_bfd_open (char *name) { close (desc); make_cleanup (xfree, name); - error (_("\"%s\": can't open to read symbols: %s."), name, + error (_("\"%s\": can't open to read symbols: %s."), + TO_HOST_FILE_SPEC (name), bfd_errmsg (bfd_get_error ())); } - bfd_set_cacheable (sym_bfd, 1); + +#ifdef _WIN32 + /* The executable must not be closed because it will not been possible to + reopen it later under Windows NT if this executable is the one being + debugged. */ + + if (strstr (name, ".exe") != NULL) + sym_bfd->cacheable = FALSE; + else +#endif + bfd_set_cacheable (sym_bfd, 1); if (!bfd_check_format (sym_bfd, bfd_object)) { ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 2:41 ` Joel Brobecker @ 2007-10-13 10:48 ` Eli Zaretskii 2007-10-13 15:47 ` Joel Brobecker 0 siblings, 1 reply; 28+ messages in thread From: Eli Zaretskii @ 2007-10-13 10:48 UTC (permalink / raw) To: Joel Brobecker; +Cc: Kai.Tietz, gdb > Date: Fri, 12 Oct 2007 19:41:16 -0700 > From: Joel Brobecker <brobecker@adacore.com> > Cc: Kai.Tietz@onevision.com, gdb@sourceware.org > > I'm attaching a rough sketch of the changes I think are needed > to adapt the cygwin port to also support mingw. Thanks! > It turns out that there are more changes that I was claiming. I'm not surprised, in particular because I've seen the patches applied by the MinGW folks to produce a native MinGW port. Personally, I still think that at this magnitude of ifdef'ing we can certainly justify two different targets. But this is not my call, and the prospects of finally having MinGW support part of the official repository are so thrilling for me that I'd hate if this argument would stand in the way. IOW, let's have MinGW support in the CVS, and argue about separation later! What follows are some more or less random comments on the patch; HTH. > > > > #ifdef __MINGW32__ > > > > #define MAXPATHLEN PATH_MAX > > > > #endif > > > > > > This, for example, is strictly speaking wrong on Windows: Windows > > > supports much longer file names (up to 32K), if you use Unicode APIs. > > > > You are probably correct, I really know very little about Windows. > > This, I still haven't fixed, because I don't know what the proper > thing to do is. What do you think I should use on Windows? I'll > happily fix it. Well, I don't think you should do anything with the issue of supporting longer file names, because I'm quite sure there are lots of problems with that elsewhere in GDB. I believe GDB currently can only support UTF-8 encoded file names, whereas Windows filesystems use UTF-16. Adding support for Windows non-ASCII file names to GDB will need much more work. However, I'm surprised you needed to define MAXPATHLEN at all, since sys/param.h in the MinGW headers already does that. Can you tell why you need this, and after including sys/param.h on top of that? > #include <sys/param.h> > +#ifdef __MINGW32__ > + #define MAXPATHLEN PATH_MAX > +#endif What am I missing here? Are you perhaps targeting some old MinGW versions that didn't have that in sys/param.h? > +#ifndef HAVE_CYGWIN_CONV_TO_POSIX_PATH > +/* A basic replacement implementation for cygwin_conv_to_posix_path () > + when not available (basically, when building using a MinGW compiler). */ > + > +static void > +cygwin_conv_to_posix_path (const char *path, char *posix_path) > +{ > + strcpy (posix_path, path); > +} > +#endif > + > +#ifndef HAVE_CYGWIN_CONV_TO_WIN32_PATH > +/* A basic replacement implementation for cygwin_conv_to_win32_path () > + when not available (basically, when building using a MinGW compiler). */ > +static void > +cygwin_conv_to_win32_path (const char *path, char *win32_path) > +{ > + strcpy (win32_path, path); > +} > +#endif I hope these will be eventually rewritten to do something useful, otherwise that's a gratuitous ugliness. > +#ifdef _WIN32 > + /* The executable must not be closed because it will not been possible to > + reopen it later under Windows NT if this executable is the one being > + debugged. */ > + > + if (strstr (name, ".exe") != NULL) > + sym_bfd->cacheable = FALSE; > + else > +#endif Doesn't Cygwin define _WIN32? If it does, why do you need to condition this fragment? ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 10:48 ` Eli Zaretskii @ 2007-10-13 15:47 ` Joel Brobecker 2007-10-13 17:05 ` Christopher Faylor 2007-10-13 17:36 ` Pedro Alves 0 siblings, 2 replies; 28+ messages in thread From: Joel Brobecker @ 2007-10-13 15:47 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Kai.Tietz, gdb > I'm not surprised, in particular because I've seen the patches applied > by the MinGW folks to produce a native MinGW port. Personally, I > still think that at this magnitude of ifdef'ing we can certainly > justify two different targets. Yes, it's less clear at this point. Perhaps we can reduce further the differences. As this thread has shown me, the chopping I have already done was not nearly enough... > But this is not my call, and the prospects of finally having MinGW > support part of the official repository are so thrilling for me that > I'd hate if this argument would stand in the way. I'm like you, if keeping them separate is what the group decides, that's also fine with me. Might be more like Chris' call. Note however, it's not a done deal yet, because the patches are slightly tainted by copyright assignment issues. Some of the changes have been replaced by my work, so you can say they are AdaCore's, but some others have been imported straight from the MinGW patch. Let's try to reduce it as much as we can, and then I'll try to track down all the authors of the pieces that are left. > > #include <sys/param.h> > > +#ifdef __MINGW32__ > > + #define MAXPATHLEN PATH_MAX > > +#endif > > What am I missing here? Are you perhaps targeting some old MinGW > versions that didn't have that in sys/param.h? You're right - it turns out this one is not needed anymore. > > +#ifndef HAVE_CYGWIN_CONV_TO_WIN32_PATH > > +/* A basic replacement implementation for cygwin_conv_to_win32_path () > > + when not available (basically, when building using a MinGW compiler). */ > > +static void > > +cygwin_conv_to_win32_path (const char *path, char *win32_path) > > +{ > > + strcpy (win32_path, path); > > +} > > +#endif > > I hope these will be eventually rewritten to do something useful, > otherwise that's a gratuitous ugliness. The thing is that they don't need to do anything useful. The PATH is already in win32 format. > > +#ifdef _WIN32 > > + /* The executable must not be closed because it will not been possible to > > + reopen it later under Windows NT if this executable is the one being > > + debugged. */ > > + > > + if (strstr (name, ".exe") != NULL) > > + sym_bfd->cacheable = FALSE; > > + else > > +#endif > > Doesn't Cygwin define _WIN32? If it does, why do you need to > condition this fragment? I wasn't the author of this change, I think it was Jerome Guitton. Nonetheless, I think that the intent was to try to avoid unexpected impact on other platforms. The #ifdef can certainly be removed. In fact, this change is not necessary at all, it's just a convenience in the following scenario (IIRC): After having debugged your exe, you found the bug, so you use the "kill" command to kill the process and, while leaving the debugger up and running, try to rebuild your program. Because GDB still has a handle on the EXE, the windows filesystem doesn't let you delete the file to replace with the new one. So this can be handled as a separate patch. I think at this point that the next thing to do is to review carefully the patch, and evaluate what is needed and what isn't anymore. Then we can tackle the issue of copyright assignement, and then finally submit/discuss a new patch. -- Joel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 15:47 ` Joel Brobecker @ 2007-10-13 17:05 ` Christopher Faylor 2007-10-13 17:36 ` Pedro Alves 1 sibling, 0 replies; 28+ messages in thread From: Christopher Faylor @ 2007-10-13 17:05 UTC (permalink / raw) To: gdb, Joel Brobecker, Kai.Tietz, Eli Zaretskii On Sat, Oct 13, 2007 at 08:47:15AM -0700, Joel Brobecker wrote: >> I'm not surprised, in particular because I've seen the patches applied >> by the MinGW folks to produce a native MinGW port. Personally, I >> still think that at this magnitude of ifdef'ing we can certainly >> justify two different targets. > >Yes, it's less clear at this point. Perhaps we can reduce further >the differences. As this thread has shown me, the chopping I have >already done was not nearly enough... > >> But this is not my call, and the prospects of finally having MinGW >> support part of the official repository are so thrilling for me that >> I'd hate if this argument would stand in the way. > >I'm like you, if keeping them separate is what the group decides, >that's also fine with me. Might be more like Chris' call. I'm ok with a limited number of ifdefs since I know that, as you say, it is likely that 95% of the code will be similar. It would be a maintenance nightmare otherwise. >> > +#ifdef _WIN32 >> > + /* The executable must not be closed because it will not been possible to >> > + reopen it later under Windows NT if this executable is the one being >> > + debugged. */ >> > + >> > + if (strstr (name, ".exe") != NULL) >> > + sym_bfd->cacheable = FALSE; >> > + else >> > +#endif >> >> Doesn't Cygwin define _WIN32? If it does, why do you need to >> condition this fragment? > >I wasn't the author of this change, I think it was Jerome Guitton. >Nonetheless, I think that the intent was to try to avoid unexpected >impact on other platforms. The #ifdef can certainly be removed. Cygwin doesn't define _WIN32 but I'm wondering why the above isn't needed for Cygwin, too. If we do go with the ifdef route, it would probably make sense to define a WINDOWSISH or a MINGW_OR_CYGWIN variable. I think there are other parts of the build which do something like that. cgf ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 15:47 ` Joel Brobecker 2007-10-13 17:05 ` Christopher Faylor @ 2007-10-13 17:36 ` Pedro Alves 2007-10-13 19:09 ` Eli Zaretskii 2007-10-13 20:51 ` Joel Brobecker 1 sibling, 2 replies; 28+ messages in thread From: Pedro Alves @ 2007-10-13 17:36 UTC (permalink / raw) To: Joel Brobecker; +Cc: Eli Zaretskii, Kai.Tietz, gdb Joel Brobecker wrote: > I think at this point that the next thing to do is to review carefully > the patch, and evaluate what is needed and what isn't anymore. Then > we can tackle the issue of copyright assignement, and then finally > submit/discuss a new patch. > That is IMHO, the wrong way to do it. The copyright assignment should be resolved first, before everyone looks into the patches. Otherwise, it taints whoever looks at the thread, and inhibits that someone from redoing it from scratch, if the copyright issues end up unresolved doesn't it? I propose goind the other way around. Start by adding the needed configury bits needed, a mingw.mt file, and disabling the cygwin specific bits in win32-nat.c around #ifdef __CYGWIN__ blocks. I'd like to keep the changes mostly in sync with gdbserver/win32-low.c too, but that shouldn't be a priority. We can then peacewise enhance the mingw port and bring its features up. We can even forget about stdio redirection and environment passing to the inferior on the first step - that leaves mostly only path handling to care about - really, look at gdbserver/win32-low.c (#ifdef USE_WIN32API). Cheers, Pedro Alves ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 17:36 ` Pedro Alves @ 2007-10-13 19:09 ` Eli Zaretskii 2007-10-13 19:19 ` Pedro Alves 2007-10-13 20:51 ` Joel Brobecker 1 sibling, 1 reply; 28+ messages in thread From: Eli Zaretskii @ 2007-10-13 19:09 UTC (permalink / raw) To: Pedro Alves; +Cc: brobecker, Kai.Tietz, gdb > Date: Sat, 13 Oct 2007 18:36:28 +0100 > From: Pedro Alves <pedro_alves@portugalmail.pt> > CC: Eli Zaretskii <eliz@gnu.org>, Kai.Tietz@onevision.com, > gdb@sourceware.org > > Joel Brobecker wrote: > > > I think at this point that the next thing to do is to review carefully > > the patch, and evaluate what is needed and what isn't anymore. Then > > we can tackle the issue of copyright assignement, and then finally > > submit/discuss a new patch. > > > > That is IMHO, the wrong way to do it. The copyright assignment > should be resolved first, before everyone looks into the patches. > Otherwise, it taints whoever looks at the thread, and inhibits that > someone from redoing it from scratch, if the copyright issues end up > unresolved doesn't it? If someone describes the changes, and someone else codes them, there's no need to resolve the copyright issues. Copyright only deals with verbatim copying of the code; ideas cannot be copyrighted. However, I agree that having everyone look at the patches is not a very good idea, since it will make it harder not to copy code. > I propose goind the other way around. Start by adding the needed configury > bits needed, a mingw.mt file, and disabling the cygwin specific bits in > win32-nat.c around #ifdef __CYGWIN__ blocks. I'd like to keep the > changes mostly in sync with gdbserver/win32-low.c too, but that shouldn't > be a priority. We can then peacewise enhance the mingw port and bring > its features up. We don't need to go that slow. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 19:09 ` Eli Zaretskii @ 2007-10-13 19:19 ` Pedro Alves 0 siblings, 0 replies; 28+ messages in thread From: Pedro Alves @ 2007-10-13 19:19 UTC (permalink / raw) To: Eli Zaretskii; +Cc: brobecker, Kai.Tietz, gdb Eli Zaretskii wrote: >> I propose goind the other way around. Start by adding the needed configury >> bits needed, a mingw.mt file, and disabling the cygwin specific bits in >> win32-nat.c around #ifdef __CYGWIN__ blocks. I'd like to keep the >> changes mostly in sync with gdbserver/win32-low.c too, but that shouldn't >> be a priority. We can then peacewise enhance the mingw port and bring >> its features up. > > We don't need to go that slow. > Sure, but it's the natural way to introduce the new target. I'm not saying it should be done slowly timewise. I'm saying it should start from the bottom up patchwise. It can be submitted in a patch series in the same minute for all I care. The point is, we shouldn't be looking at a patch and deciding what we *don't* need; we should be looking at what we have, and deciding what we *do* need. -- Cheers, Pedro Alves ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 17:36 ` Pedro Alves 2007-10-13 19:09 ` Eli Zaretskii @ 2007-10-13 20:51 ` Joel Brobecker 2007-10-13 22:52 ` Pedro Alves 1 sibling, 1 reply; 28+ messages in thread From: Joel Brobecker @ 2007-10-13 20:51 UTC (permalink / raw) To: Pedro Alves; +Cc: Eli Zaretskii, Kai.Tietz, gdb > I propose goind the other way around. Start by adding the needed configury > bits needed, a mingw.mt file, and disabling the cygwin specific bits in > win32-nat.c around #ifdef __CYGWIN__ blocks. That's mostly how I did it, except for the win32-nat.c changes. I like your suggestions. I think we can get something minimal pretty quickly. Just to avoid duplicating efforts, who's in charge? :-) -- Joel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 20:51 ` Joel Brobecker @ 2007-10-13 22:52 ` Pedro Alves 2007-10-14 5:16 ` Joel Brobecker 0 siblings, 1 reply; 28+ messages in thread From: Pedro Alves @ 2007-10-13 22:52 UTC (permalink / raw) To: Joel Brobecker; +Cc: Eli Zaretskii, Kai.Tietz, gdb Joel Brobecker wrote: >> I propose goind the other way around. Start by adding the needed configury >> bits needed, a mingw.mt file, and disabling the cygwin specific bits in >> win32-nat.c around #ifdef __CYGWIN__ blocks. > > That's mostly how I did it, except for the win32-nat.c changes. > I like your suggestions. I think we can get something minimal > pretty quickly. Just to avoid duplicating efforts, who's in charge? > :-) > Not sure who you're asking that, but, I'm not doing or going to do anything, since you're already about to :) Cheers, Pedro Alves ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-13 22:52 ` Pedro Alves @ 2007-10-14 5:16 ` Joel Brobecker 2007-10-14 11:44 ` Pedro Alves 0 siblings, 1 reply; 28+ messages in thread From: Joel Brobecker @ 2007-10-14 5:16 UTC (permalink / raw) To: Pedro Alves; +Cc: Eli Zaretskii, Kai.Tietz, gdb > Not sure who you're asking that, but, I'm not doing or going to do > anything, since you're already about to :) OK :). I don't have much time these days, and in fact, I wasn't really supposed to dedicate the 4+ hours I have already spent on this, but since we seem to be on a roll, I'll try to spend some time on it next week to start the process and get us a minimal MinGW debugger. -- Joel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-14 5:16 ` Joel Brobecker @ 2007-10-14 11:44 ` Pedro Alves 2007-10-14 20:33 ` Eli Zaretskii 0 siblings, 1 reply; 28+ messages in thread From: Pedro Alves @ 2007-10-14 11:44 UTC (permalink / raw) To: Joel Brobecker; +Cc: Eli Zaretskii, Kai.Tietz, gdb [-- Attachment #1: Type: text/plain, Size: 3018 bytes --] Joel Brobecker wrote: >> Not sure who you're asking that, but, I'm not doing or going to do >> anything, since you're already about to :) > > OK :). I don't have much time these days, and in fact, I wasn't > really supposed to dedicate the 4+ hours I have already spent on > this, but since we seem to be on a roll, I'll try to spend some > time on it next week to start the process and get us a minimal > MinGW debugger. > Nah, nah, na-na-naaah. I've done it, and I said wouldn't :) Seriously, and rethinking a bit after sleep, it is safer to do it from scratch, so the copyright issues are cleared. The initial changes are pretty mechanic, so, here goes. What's done: - Added mingw.mh, mingw.mt as copies from the cygwin files. - Updated configure.tgt to set gdb_target. - Disabled cygwin specific functionality in win32-nat.c. As can be seen, the changes are very small. - profs.h isn't needed anymore, since I've implemented cygwin cross-core support a few weeks ago (in i386-cygwin-tdep.c). The include can be unconditionally removed. What's next: Test with a mingw built libexpat to test dll support. win32_pid_to_exec_file: Could be done with GetModuleFileNameEx from PSAPI and/or with toolhelp. Rename a few things, which really aren't cygwin specific, like: * cygwin_get_dr6 -> win32_get_dr6 * i386-cygwin-tdep.h -> i386-win32-tdep.h * nm-cygwin.h -> nm-cygming.h What's disabled: Use a shell to start the subprocess. I'm sure there are other problems, but it is useable already. cygcheck.exe ./gdb.exe .\gdb.exe C:\WINDOWS\system32\KERNEL32.dll C:\WINDOWS\system32\ntdll.dll C:\WINDOWS\system32\msvcrt.dll C:\WINDOWS\system32\USER32.dll C:\WINDOWS\system32\GDI32.dll C:\WINDOWS\system32\WS2_32.DLL C:\WINDOWS\system32\WS2HELP.dll C:\WINDOWS\system32\ADVAPI32.dll C:\WINDOWS\system32\RPCRT4.dll C:\WINDOWS\system32\Secur32.dll build-gdb_mingw\gdb>gdb ./gdb.exe GNU gdb 6.7.50-20071012-cvs Copyright (C) 2007 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "mingw32"... Setting up the environment for debugging gdb. During symbol reading, struct/union type gets multiply defined: struct type. Breakpoint 1 at 0x40b513: file ../../gdb-server_submit/src/gdb/utils.c, line 817 . Breakpoint 2 at 0x4185c6: file ../../gdb-server_submit/src/gdb/cli/cli-cmds.c, l ine 199. (top-gdb) start Breakpoint 3 at 0x401309: file ../../gdb-server_submit/src/gdb/gdb.c, line 28. Starting program: D:\cegccsf\cegcc\cegcc\src\build-gdb_mingw\gdb/./gdb.exe warning: Can not parse XML library list; XML support was disabled at compile tim e main (argc=1, argv=0x3d24f0) at ../../gdb-server_submit/src/gdb/gdb.c:28 28 memset (&args, 0, sizeof args); Cheers, Pedro Alves [-- Attachment #2: mingw.diff --] [-- Type: text/x-diff, Size: 7187 bytes --] 2007-10-14 Pedro Alves <pedro_alves@portugalmail.pt> * config/i386/mingw.mh, config/i386/mingw.mt: New files. * configure.tgt (i[34567]86-*-mingw32*): Set gdb_target = mingw. * win32-nat.c: Only include cygwin.h on Cygwin host. Don't include procfs.h. (win32_make_so): Don't convert path to posix on MinGW. (win32_attach): Only fallback to Cygwin pids on Cygwin. (win32_pid_to_exec_file): Disable Cygwin specific code. (win32_create_inferior): Disable handle starting the inferior through a shell on MinGW. Disable environment var processing. Disable tty handling. (cygwin_pid_to_str): Rename to ... (win32_pid_to_str): ... this. (init_win32_ops): Update use of win32_pid_to_str. Disable "shell" command on MinGW. --- gdb/config/i386/mingw.mh | 4 ++++ gdb/config/i386/mingw.mt | 3 +++ gdb/configure.tgt | 2 +- gdb/win32-nat.c | 44 ++++++++++++++++++++++++++++++++++---------- 4 files changed, 42 insertions(+), 11 deletions(-) Index: src/gdb/config/i386/mingw.mh =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ src/gdb/config/i386/mingw.mh 2007-10-14 12:19:44.000000000 +0100 @@ -0,0 +1,4 @@ +MH_CFLAGS= +NATDEPFILES= i386-nat.o win32-nat.o +NAT_FILE=nm-cygwin.h +XM_CLIBS= Index: src/gdb/config/i386/mingw.mt =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ src/gdb/config/i386/mingw.mt 2007-10-14 10:36:20.000000000 +0100 @@ -0,0 +1,3 @@ +# Target: Intel 386 run win32 +TDEPFILES= i386-tdep.o i386-cygwin-tdep.o i387-tdep.o \ + solib-target.o corelow.o Index: src/gdb/configure.tgt =================================================================== --- src.orig/gdb/configure.tgt 2007-10-12 20:25:20.000000000 +0100 +++ src/gdb/configure.tgt 2007-10-14 11:19:50.000000000 +0100 @@ -120,7 +120,7 @@ i[34567]86-*-gnu*) gdb_target=i386gnu ;; i[34567]86-*-cygwin*) gdb_target=cygwin build_gdbserver=yes ;; -i[34567]86-*-mingw32*) gdb_target=i386 +i[34567]86-*-mingw32*) gdb_target=mingw build_gdbserver=yes ;; i[34567]86-*-*) gdb_target=i386 ;; Index: src/gdb/win32-nat.c =================================================================== --- src.orig/gdb/win32-nat.c 2007-10-13 02:27:04.000000000 +0100 +++ src/gdb/win32-nat.c 2007-10-14 12:23:22.000000000 +0100 @@ -22,8 +22,6 @@ /* Originally by Steve Chamberlain, sac@cygnus.com */ -/* We assume we're being built with and will be used for cygwin. */ - #include "defs.h" #include "frame.h" /* required by inferior.h */ #include "inferior.h" @@ -40,7 +38,9 @@ #include <stdlib.h> #include <windows.h> #include <imagehlp.h> +#ifdef __CYGWIN__ #include <sys/cygwin.h> +#endif #include <signal.h> #include "buildsym.h" @@ -81,7 +81,6 @@ enum CONTEXT_DEBUGGER = (CONTEXT_FULL | CONTEXT_FLOATING_POINT) }; #endif -#include <sys/procfs.h> #include <psapi.h> #define CONTEXT_DEBUGGER_DR CONTEXT_DEBUGGER | CONTEXT_DEBUG_REGISTERS \ @@ -637,7 +636,11 @@ win32_make_so (const char *name, DWORD l 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, name); /* Record cygwin1.dll .text start/end. */ @@ -1625,6 +1628,7 @@ win32_attach (char *args, int from_tty) ok = DebugActiveProcess (pid); saw_create = 0; +#ifdef __CYGWIN__ if (!ok) { /* Try fall back to Cygwin pid */ @@ -1632,10 +1636,11 @@ win32_attach (char *args, int from_tty) if (pid > 0) ok = DebugActiveProcess (pid); + } +#endif - if (!ok) - error (_("Can't attach to process.")); - } + if (!ok) + error (_("Can't attach to process.")); if (has_detach_ability ()) DebugSetProcessKillOnExit (FALSE); @@ -1697,10 +1702,12 @@ win32_pid_to_exec_file (int pid) /* 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; + +#ifdef __CYGWIN__ + /* TODO: Also find native Windows processes using CW_GETPINFO_FULL. */ int cpid; struct external_pinfo *pinfo; @@ -1718,6 +1725,10 @@ win32_pid_to_exec_file (int pid) } } cygwin_internal (CW_UNLOCK_PINFO); + if (path_ptr) + return path_ptr; +#endif + return path_ptr; } @@ -1764,9 +1775,12 @@ win32_create_inferior (char *exec_file, memset (&si, 0, sizeof (si)); si.cb = sizeof (si); + flags = DEBUG_ONLY_THIS_PROCESS; + toexec = exec_file; + +#ifdef __CYGWIN__ if (!useshell) { - flags = DEBUG_ONLY_THIS_PROCESS; cygwin_conv_to_win32_path (exec_file, real_path); toexec = real_path; } @@ -1784,6 +1798,7 @@ win32_create_inferior (char *exec_file, toexec = shell; flags = DEBUG_PROCESS; } +#endif if (new_group) flags |= CREATE_NEW_PROCESS_GROUP; @@ -1798,6 +1813,8 @@ win32_create_inferior (char *exec_file, strcat (args, " "); strcat (args, allargs); +#ifdef __CYGWIN__ + /* Prepare the environment vars for CreateProcess. */ cygwin_internal (CW_SYNC_WINENV); @@ -1822,6 +1839,8 @@ win32_create_inferior (char *exec_file, } } +#endif + win32_init_thread_list (); ret = CreateProcess (0, args, /* command line */ @@ -1833,6 +1852,8 @@ win32_create_inferior (char *exec_file, NULL, /* current directory */ &si, &pi); + +#ifdef __CYGWIN__ if (tty >= 0) { close (tty); @@ -1843,6 +1864,7 @@ win32_create_inferior (char *exec_file, close (ostdout); close (ostderr); } +#endif if (!ret) error (_("Error creating process %s, (error %d)."), @@ -1951,7 +1973,7 @@ win32_close (int x) /* Convert pid to printable format. */ static char * -cygwin_pid_to_str (ptid_t ptid) +win32_pid_to_str (ptid_t ptid) { static char buf[80]; int pid = PIDGET (ptid); @@ -2055,7 +2077,7 @@ init_win32_ops (void) win32_ops.to_mourn_inferior = win32_mourn_inferior; win32_ops.to_can_run = win32_can_run; win32_ops.to_thread_alive = win32_win32_thread_alive; - win32_ops.to_pid_to_str = cygwin_pid_to_str; + win32_ops.to_pid_to_str = win32_pid_to_str; win32_ops.to_stop = win32_stop; win32_ops.to_stratum = process_stratum; win32_ops.to_has_all_memory = 1; @@ -2086,12 +2108,14 @@ _initialize_win32_nat (void) add_com_alias ("sharedlibrary", "dll-symbols", class_alias, 1); +#ifdef __CYGWIN__ add_setshow_boolean_cmd ("shell", class_support, &useshell, _("\ Set use of shell to start subprocess."), _("\ Show use of shell to start subprocess."), NULL, NULL, NULL, /* FIXME: i18n: */ &setlist, &showlist); +#endif add_setshow_boolean_cmd ("cygwin-exceptions", class_support, &cygwin_exceptions, _("\ Break when an exception is detected in the Cygwin DLL itself."), _("\ ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-14 11:44 ` Pedro Alves @ 2007-10-14 20:33 ` Eli Zaretskii 0 siblings, 0 replies; 28+ messages in thread From: Eli Zaretskii @ 2007-10-14 20:33 UTC (permalink / raw) To: Pedro Alves; +Cc: brobecker, Kai.Tietz, gdb > Date: Sun, 14 Oct 2007 12:43:01 +0100 > From: Pedro Alves <pedro_alves@portugalmail.pt> > CC: Eli Zaretskii <eliz@gnu.org>, Kai.Tietz@onevision.com, > gdb@sourceware.org > > Nah, nah, na-na-naaah. I've done it, and I said wouldn't :) Thanks! > What's disabled: > Use a shell to start the subprocess. This will lose support for redirection. Perhaps we could later add something similar to what go32-nat.c did for DJGPP, to get that back. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-12 16:11 ` Joel Brobecker 2007-10-12 16:51 ` Eli Zaretskii @ 2007-10-12 17:38 ` Pedro Alves 1 sibling, 0 replies; 28+ messages in thread From: Pedro Alves @ 2007-10-12 17:38 UTC (permalink / raw) To: Joel Brobecker; +Cc: Eli Zaretskii, Daniel Jacobowitz, Kai.Tietz, gdb Thinking only of the target part of the story, and assuming the debug API is similar, the x64/i386 support in GDB could be done similarly to how x86/arm is split in gdbserver. It would probably be much easier to start with porting gdbserver and cross-debugging. gdbserver already supports x86 mingw. Take a look at win32-low.c, win32-i386-low.c and win32-arm-low.c in gdb/gdbserver/. On the gdb side, you would need at least a gdb/x64-(mingw|win32)-tdep.c and/or a i386-(mingw|win32)-tdep.c. Cheers, Pedro Alves ^ permalink raw reply [flat|nested] 28+ messages in thread
* Support of gdb for Windows 64 native systems
@ 2007-10-11 13:53 Kai Tietz
2007-10-11 14:05 ` Daniel Jacobowitz
0 siblings, 1 reply; 28+ messages in thread
From: Kai Tietz @ 2007-10-11 13:53 UTC (permalink / raw)
To: gdb
Hello,
I want to ask for a volunteer to port gdb for the target
x86_64-pc-mingw32. The support is already available in binutils and gcc,
but there is currently no gdb (supporting dwarf2) available for this host.
Is there somebody, who is interested to port it ? Or is willing to help me
to do this port ?
Thanks in advance,
i.A. Kai Tietz
| (\_/) This is Bunny. Copy and paste Bunny
| (='.'=) into your signature to help him gain
| (")_(") world domination.
------------------------------------------------------------------------------------------
OneVision Software Entwicklungs GmbH & Co. KG
Dr.-Leo-Ritter-Straße 9 - 93049 Regensburg
Tel: +49.(0)941.78004.0 - Fax: +49.(0)941.78004.489 - www.OneVision.com
Commerzbank Regensburg - BLZ 750 400 62 - Konto 6011050
Handelsregister: HRA 6744, Amtsgericht Regensburg
Komplementärin: OneVision Software Entwicklungs Verwaltungs GmbH
Dr.-Leo-Ritter-Straße 9 – 93049 Regensburg
Handelsregister: HRB 8932, Amtsgericht Regensburg - Geschäftsführer:
Ulrike Döhler, Manuela Kluger
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: Support of gdb for Windows 64 native systems 2007-10-11 13:53 Kai Tietz @ 2007-10-11 14:05 ` Daniel Jacobowitz 2007-10-11 14:18 ` Kai Tietz 0 siblings, 1 reply; 28+ messages in thread From: Daniel Jacobowitz @ 2007-10-11 14:05 UTC (permalink / raw) To: Kai Tietz; +Cc: gdb On Thu, Oct 11, 2007 at 03:53:28PM +0200, Kai Tietz wrote: > Hello, > > I want to ask for a volunteer to port gdb for the target > x86_64-pc-mingw32. The support is already available in binutils and gcc, > but there is currently no gdb (supporting dwarf2) available for this host. > Is there somebody, who is interested to port it ? Or is willing to help me > to do this port ? So far there hasn't even been anyone interested in i686-pc-mingw32 for the FSF GDB tree; the mingw project has some unsubmitted and unassigned patches. -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Support of gdb for Windows 64 native systems 2007-10-11 14:05 ` Daniel Jacobowitz @ 2007-10-11 14:18 ` Kai Tietz 0 siblings, 0 replies; 28+ messages in thread From: Kai Tietz @ 2007-10-11 14:18 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain; charset="UTF-8", Size: 1776 bytes --] Daniel Jacobowitz wrote on 11.10.2007 16:05:10: > On Thu, Oct 11, 2007 at 03:53:28PM +0200, Kai Tietz wrote: > > Hello, > > > > I want to ask for a volunteer to port gdb for the target > > x86_64-pc-mingw32. The support is already available in binutils and gcc, > > but there is currently no gdb (supporting dwarf2) available for this host. > > Is there somebody, who is interested to port it ? Or is willing to help me > > to do this port ? > > So far there hasn't even been anyone interested in i686-pc-mingw32 for > the FSF GDB tree; the mingw project has some unsubmitted and > unassigned patches. Hmm, wouldn't this be a good chance to bring back the mingw32 support to the FSF GDB tree ? For sure most of those patches for i?86-mingw are needed for 64-bit mingw32 too (especially the file-I/O and shared object stuff). But the calling convention for 64-bit is more simple than for the 32-bit version. Do you think there is no chance for this support ? Cheers, i.A. Kai Tietz | (\_/) This is Bunny. Copy and paste Bunny | (='.'=) into your signature to help him gain | (")_(") world domination. ------------------------------------------------------------------------------------------ OneVision Software Entwicklungs GmbH & Co. KG Dr.-Leo-Ritter-StraÃe 9 - 93049 Regensburg Tel: +49.(0)941.78004.0 - Fax: +49.(0)941.78004.489 - www.OneVision.com Commerzbank Regensburg - BLZ 750 400 62 - Konto 6011050 Handelsregister: HRA 6744, Amtsgericht Regensburg Komplementärin: OneVision Software Entwicklungs Verwaltungs GmbH Dr.-Leo-Ritter-StraÃe 9 â 93049 Regensburg Handelsregister: HRB 8932, Amtsgericht Regensburg - Geschäftsführer: Ulrike Döhler, Manuela Kluger \x16º&ÖëzÛ«o|ã¹b²Ö«r\x18\x1d ^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2007-10-14 20:33 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20071011142348.GA18239@caradoc.them.org>
2007-10-11 14:47 ` Support of gdb for Windows 64 native systems Kai Tietz
[not found] ` <20071011145549.GA19918@caradoc.them.org>
2007-10-11 16:01 ` Joel Brobecker
2007-10-12 3:38 ` Christopher Faylor
2007-10-12 4:27 ` Joel Brobecker
2007-10-11 16:37 ` Mark Kettenis
2007-10-12 7:19 ` Kai Tietz
2007-10-12 8:44 ` Eli Zaretskii
2007-10-12 16:11 ` Joel Brobecker
2007-10-12 16:51 ` Eli Zaretskii
2007-10-12 17:45 ` Joel Brobecker
2007-10-12 20:29 ` Eli Zaretskii
2007-10-12 22:28 ` Joel Brobecker
2007-10-13 2:41 ` Joel Brobecker
2007-10-13 10:48 ` Eli Zaretskii
2007-10-13 15:47 ` Joel Brobecker
2007-10-13 17:05 ` Christopher Faylor
2007-10-13 17:36 ` Pedro Alves
2007-10-13 19:09 ` Eli Zaretskii
2007-10-13 19:19 ` Pedro Alves
2007-10-13 20:51 ` Joel Brobecker
2007-10-13 22:52 ` Pedro Alves
2007-10-14 5:16 ` Joel Brobecker
2007-10-14 11:44 ` Pedro Alves
2007-10-14 20:33 ` Eli Zaretskii
2007-10-12 17:38 ` Pedro Alves
2007-10-11 13:53 Kai Tietz
2007-10-11 14:05 ` Daniel Jacobowitz
2007-10-11 14:18 ` Kai Tietz
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox