From mboxrd@z Thu Jan 1 00:00:00 1970 From: "John S. Kallal" To: gdb-patches@sources.redhat.com Cc: msnyder@cygnus.com Subject: [PATCH] Fix some error added with HEX2BIN Date: Tue, 15 May 2001 18:17:00 -0000 Message-id: X-SW-Source: 2001-05/msg00329.html The following patch corrects some errors that I think where added by the followin patch: http://sources.redhat.com/ml/gdb-patches/2001-05/msg00017.html . Without the patches, I was unable to work with the Linux version of GDBSERVER. 2001-05-15 John S Kallal * remote.c (remote_write_bytes) : Fixed string pointer & string end byte bug added when function of hex2bin added. * remote.c (remote_wait): Remove unused i variable. Merge variables p1 and p_temp into a single variable pt. Change long strings to use standard C string concatenation. Added new variable fieldsize to fix string pointer adjustment bug added when function call of hex2bin added. *** ../gdb+dejagnu-20010515-org/gdb/remote.c Tue May 15 10:26:57 2001 --- gdb/remote.c Tue May 15 12:13:59 2001 *************** *** 2825,2831 **** continue; case 'T': /* Status with PC, SP, FP, ... */ { - int i; long regno; char* regs = (char*) alloca (MAX_REGISTER_RAW_SIZE); --- 2825,2830 ---- *************** *** 2839,2882 **** while (*p) { ! unsigned char *p1; ! char *p_temp; /* Read the register number */ ! regno = strtol ((const char *) p, &p_temp, 16); ! p1 = (unsigned char *) p_temp; ! if (p1 == p) /* No register number present here */ { ! p1 = (unsigned char *) strchr ((const char *) p, ':'); ! if (p1 == NULL) ! warning ("Malformed packet(a) (missing colon): %s\n\ ! Packet: '%s'\n", ! p, buf); ! if (strncmp ((const char *) p, "thread", p1 - p) == 0) { ! p_temp = unpack_varlen_hex (++p1, &thread_num); record_currthread (thread_num); - p = (unsigned char *) p_temp; } } else { ! p = p1; if (*p++ != ':') ! warning ("Malformed packet(b) (missing colon): %s\n\ ! Packet: '%s'\n", ! p, buf); if (regno >= NUM_REGS) ! warning ("Remote sent bad register number %ld: %s\n\ ! Packet: '%s'\n", ! regno, p, buf); ! if (hex2bin (p, regs, REGISTER_RAW_SIZE (regno)) ! < REGISTER_RAW_SIZE (regno)) warning ("Remote reply is too short: %s", buf); supply_register (regno, regs); } --- 2838,2880 ---- while (*p) { ! char *pt; /* Read the register number */ ! regno = strtol ((const char *) p, &pt, 16); ! if (pt == (char *)p) /* No register number present here */ { ! pt = strchr ((const char *) p, ':'); ! if (pt == NULL) ! warning ("Malformed packet(a) (missing colon): %s\n" ! "Packet: '%s'\n", p, buf); ! ! if (strncmp ((const char *) p, "thread", pt - (char *)p) == 0) { ! p = (unsigned char *)(unpack_varlen_hex (++pt, &thread_num) ); record_currthread (thread_num); } } else { ! int fieldsize; ! ! p = pt; if (*p++ != ':') ! warning ("Malformed packet(b) (missing colon): %s\n" ! "Packet: '%s'\n", p, buf); if (regno >= NUM_REGS) ! warning ("Remote sent bad register number %ld: %s\n" ! "Packet: '%s'\n", regno, p, buf); ! fieldsize = hex2bin (p, regs, REGISTER_RAW_SIZE (regno)); ! p += 2*fieldsize; ! if ( fieldsize < REGISTER_RAW_SIZE (regno)) warning ("Remote reply is too short: %s", buf); + supply_register (regno, regs); } *************** *** 2928,2935 **** if (symfile_objfile == NULL) { ! warning ("Relocation packet received with no symbol file. \ ! Packet Dropped"); goto got_status; } --- 2926,2933 ---- if (symfile_objfile == NULL) { ! warning ("Relocation packet received with no symbol file. " ! "Packet Dropped"); goto got_status; } *************** *** 3628,3633 **** --- 3626,3633 ---- increasing byte addresses. Each byte is encoded as a two hex value. */ nr_bytes = bin2hex (myaddr, p, todo); + p += 2*nr_bytes; + *p = '\0'; break; case PACKET_SUPPORT_UNKNOWN: internal_error (__FILE__, __LINE__,