This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Problem with COM1 port from with GDB 5.3 under Cygwin 1.5.3-1


I earlier posted to the gdb@sources.redhat.com list about a problem using the serial port on Cygwin 1.5.3 when using RDI (i.e. ARM Angel Debug Protocol) with GDB 5.3.

Using "com1" would hang, and GDB had never allowed names like "/dev/ttyS0", which Cygwin was supposed to support.

This patch avoids the Cygwin 1.5.* problem with "com*" port names, while still allowing "com*" names to be used in GDB scripts (they get translated to "/dev/com?"), and also allows "/dev/ttyS*" and "/dev/com*" device names to be used.


--- ./gdb/rdi-share/unixcomm.c~ 2002-06-08 14:34:41.000000000 -0600 +++ ./gdb/rdi-share/unixcomm.c 2003-09-23 12:12:43.703125000 -0600 @@ -96,7 +96,15 @@ #define PARPORT2 "/dev/par1" #endif

-#if defined(_WIN32) || defined (__CYGWIN__)
+#if defined (__CYGWIN__)
+#define SERIAL_PREFIX "/dev/com"
+#define SERPORT1   "/dev/com1"
+#define SERPORT2   "/dev/com2"
+#define PARPORT1   "lpt1"
+#define PARPORT2   "lpt2"
+#endif
+
+#if defined(_WIN32)
#define SERIAL_PREFIX "com"
#define SERPORT1   "com1"
#define SERPORT2   "com2"
@@ -154,6 +162,32 @@
  }
  if (strcmp(name, "2") == 0) return SERPORT2;

+  #if defined (__CYGWIN__)
+
+  /* allow Linux "/dev/ttyS*" names too */
+  if (strncmp(name, "/dev/ttyS", 9) == 0) return name;
+
+  /* allow Windows "com*" names too */
+  {
+    static const char *const real_name[] = {
+        SERIAL_PREFIX "0",
+        SERIAL_PREFIX "1",
+        SERIAL_PREFIX "2",
+        SERIAL_PREFIX "3",
+        SERIAL_PREFIX "4",
+        SERIAL_PREFIX "5",
+        SERIAL_PREFIX "6",
+        SERIAL_PREFIX "7",
+        SERIAL_PREFIX "8",
+        SERIAL_PREFIX "9",
+        };
+    if (strlen(name) == 4 && strncmp(name, "com", 3) == 0 &&
+        '0' <= name[3] && name[3] <= '9')
+      return real_name[name[3] - '0'];
+  }
+
+  #endif
+
  /* It wasn't one of the simple cases, so now we have to parse it
   * properly
   */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]