From fad466eb6de0629edc89081998337fd13566e989 Mon Sep 17 00:00:00 2001 From: Stan Shebs Date: Fri, 15 Apr 1994 21:55:49 +0000 Subject: [PATCH] Fri Apr 15 11:53:46 1994 Stan Shebs (shebs@andros.cygnus.com) * source.c (DIRNAME_SEPARATOR): New macro, replaces all references to : in search path processing. * defs.h (qsort): Rename argument in prototype. * symtab.h (SAYMBOL_VALUE): Rename value field, avoids bugs in some compilers. * breakpoint.c, exec.c, mdebugread.c, mipsread.c, xcoffexec.c (false): Eliminate usages. --- gdb/ChangeLog | 10 +++++++++ gdb/breakpoint.c | 2 +- gdb/defs.h | 28 ++++++++++++------------- gdb/mdebugread.c | 4 ++-- gdb/source.c | 62 ++++++++++++++++++++++++++++++++++---------------------- gdb/symtab.h | 4 ++-- gdb/xcoffexec.c | 4 ++-- 7 files changed, 69 insertions(+), 45 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7780a4a..690aaa0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +Fri Apr 15 11:53:46 1994 Stan Shebs (shebs@andros.cygnus.com) + + * source.c (DIRNAME_SEPARATOR): New macro, replaces all references + to : in search path processing. + * defs.h (qsort): Rename argument in prototype. + * symtab.h (SAYMBOL_VALUE): Rename value field, avoids bugs in + some compilers. + * breakpoint.c, exec.c, mdebugread.c, mipsread.c, xcoffexec.c + (false): Eliminate usages. + Fri Apr 15 11:35:19 1994 Steve Chamberlain (sac@cygnus.com) * h8500-tdep.c (initialize_h8500_tdep, large_command): diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 457ca91..dc15de2 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -2293,7 +2293,7 @@ can_use_hardware_watchpoint (b) if (!(v->lval == lval_memory) || v->lval == not_lval || (v->lval != not_lval - && v->modifiable == false)) + && v->modifiable == 0)) return 0; else if (v->lval == lval_memory) diff --git a/gdb/defs.h b/gdb/defs.h index 1a49d8c..d370434 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -520,24 +520,24 @@ enum val_prettyprint #else /* No BFD64 */ -/* Default to support for "long long" if the host compiler being used is gcc. - Config files must define CC_HAS_LONG_LONG to use other host compilers - that are capable of supporting "long long", and to cause gdb to use that - support. Not defining CC_HAS_LONG_LONG will suppress use of "long long" - regardless of what compiler is used. - - FIXME: For now, automatic selection of "long long" as the default when - gcc is used is disabled, pending further testing. Concerns include the - impact on gdb performance and the universality of bugfree long long - support on platforms that do have gcc. Compiling with FORCE_LONG_LONG - will select "long long" use for testing purposes. -fnf */ +/* If all compilers for this host support "long long" and we want to + use it for LONGEST (the performance hit is about 10% on a testsuite + run based on one DECstation test), then the xm.h file can define + CC_HAS_LONG_LONG. + + Using GCC 1.39 on BSDI with long long causes about 700 new + testsuite failures. Using long long for LONGEST on the DECstation + causes 3 new FAILs in the testsuite and many heuristic fencepost + warnings. These are not investigated, but a first guess would be + that the BSDI problems are GCC bugs in long long support and the + latter are GDB bugs. */ #ifndef CC_HAS_LONG_LONG -# if defined (__GNUC__) /*&& defined (FORCE_LONG_LONG)*/ /* See FIXME above */ +# if defined (__GNUC__) && defined (FORCE_LONG_LONG) # define CC_HAS_LONG_LONG 1 # endif #endif - + /* LONGEST should not be a typedef, because "unsigned LONGEST" needs to work. CC_HAS_LONG_LONG is defined if the host compiler supports "long long" variables and we wish to make use of that support. */ @@ -739,7 +739,7 @@ free PARAMS ((void *)); /* 4.10.3.2 */ extern void qsort PARAMS ((void *base, size_t nmemb, /* 4.10.5.2 */ size_t size, - int (*comp)(const void *, const void *))); + int (*compar)(const void *, const void *))); #ifndef MEM_FNS_DECLARED /* Some non-ANSI use void *, not char *. */ extern PTR diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 81e6945..cd0efa8 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -3767,8 +3767,8 @@ elfmdebug_build_psymtabs (objfile, swap, sec, section_offsets) struct ecoff_debug_info *info; buf = alloca (swap->external_hdr_size); - if (bfd_get_section_contents (abfd, sec, buf, (file_ptr) 0, - swap->external_hdr_size) == false) + if (!bfd_get_section_contents (abfd, sec, buf, (file_ptr) 0, + swap->external_hdr_size)) perror_with_name (bfd_get_filename (abfd)); info = ((struct ecoff_debug_info *) diff --git a/gdb/source.c b/gdb/source.c index 5a4733f..ec56937 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -25,10 +25,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "gdbcmd.h" #include "frame.h" -#ifdef USG #include -#endif - #include #include #include @@ -38,6 +35,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "symfile.h" #include "objfiles.h" +#ifndef DIRNAME_SEPARATOR +#define DIRNAME_SEPARATOR ':' +#endif + /* Prototypes for local functions. */ static int @@ -237,7 +238,10 @@ forget_cached_source_info () void init_source_path () { - source_path = savestring ("$cdir:$cwd", /* strlen of it */ 10); + char buf[20]; + + sprintf (buf, "$cdir%c$cwd", DIRNAME_SEPARATOR); + source_path = strsave (buf); forget_cached_source_info (); } @@ -288,7 +292,7 @@ mod_path (dirname, which_path) struct stat st; { - char *colon = strchr (name, ':'); + char *colon = strchr (name, DIRNAME_SEPARATOR); char *space = strchr (name, ' '); char *tab = strchr (name, '\t'); if (colon == 0 && space == 0 && tab == 0) @@ -303,7 +307,7 @@ mod_path (dirname, which_path) if (tab != 0 && (p == 0 || tab < p)) p = tab; dirname = p + 1; - while (*dirname == ':' || *dirname == ' ' || *dirname == '\t') + while (*dirname == DIRNAME_SEPARATOR || *dirname == ' ' || *dirname == '\t') ++dirname; } } @@ -378,7 +382,7 @@ mod_path (dirname, which_path) while (1) { if (!strncmp (p, name, len) - && (p[len] == '\0' || p[len] == ':')) + && (p[len] == '\0' || p[len] == DIRNAME_SEPARATOR)) { /* Found it in the search path, remove old copy */ if (p > *which_path) @@ -387,7 +391,7 @@ mod_path (dirname, which_path) goto skip_dup; /* Same dir twice in one cmd */ strcpy (p, &p[len+1]); /* Copy from next \0 or : */ } - p = strchr (p, ':'); + p = strchr (p, DIRNAME_SEPARATOR); if (p != 0) ++p; else @@ -395,6 +399,11 @@ mod_path (dirname, which_path) } if (p == 0) { + char tinybuf[2]; + + tinybuf[0] = DIRNAME_SEPARATOR; + tinybuf[1] = '\0'; + /* If we have already tacked on a name(s) in this command, be sure they stay on the front as we tack on some more. */ if (prefix) { @@ -402,7 +411,7 @@ mod_path (dirname, which_path) c = old[prefix]; old[prefix] = '\0'; - temp = concat (old, ":", name, NULL); + temp = concat (old, tinybuf, name, NULL); old[prefix] = c; *which_path = concat (temp, "", &old[prefix], NULL); prefix = strlen (temp); @@ -410,7 +419,7 @@ mod_path (dirname, which_path) } else { - *which_path = concat (name, (old[0]? ":" : old), old, NULL); + *which_path = concat (name, (old[0] ? tinybuf : old), old, NULL); prefix = strlen (name); } free (old); @@ -448,7 +457,7 @@ source_info (ignore, from_tty) -/* Open a file named STRING, searching path PATH (dir names sep by colons) +/* Open a file named STRING, searching path PATH (dir names sep by some char) using mode MODE and protection bits PROT in the calls to open. If TRY_CWD_FIRST, try to open ./STRING before searching PATH. @@ -503,7 +512,7 @@ openp (path, try_cwd_first, string, mode, prot, filename_opened) fd = -1; for (p = path; p; p = p1 ? p1 + 1 : 0) { - p1 = (char *) strchr (p, ':'); + p1 = (char *) strchr (p, DIRNAME_SEPARATOR); if (p1) len = p1 - p; else @@ -535,7 +544,7 @@ openp (path, try_cwd_first, string, mode, prot, filename_opened) strcat (filename+len, "/"); strcat (filename, string); - fd = open (filename, mode, prot); + fd = open (filename, mode); if (fd >= 0) break; } @@ -587,8 +596,8 @@ open_source_file (s) /* We cast strstr's result in case an ANSIhole has made it const, which produces a "required warning" when assigned to a nonconst. */ p = (char *)strstr (source_path, "$cdir"); - if (p && (p == path || p[-1] == ':') - && (p[cdir_len] == ':' || p[cdir_len] == '\0')) { + if (p && (p == path || p[-1] == DIRNAME_SEPARATOR) + && (p[cdir_len] == DIRNAME_SEPARATOR || p[cdir_len] == '\0')) { int len; path = (char *) @@ -606,12 +615,12 @@ open_source_file (s) /* Didn't work. Try using just the basename. */ p = basename (s->filename); if (p != s->filename) - result = openp(path, 0, p, O_RDONLY,0, &s->fullname); + result = openp (path, 0, p, O_RDONLY, 0, &s->fullname); } if (result >= 0) { - fullname = s -> fullname; - s -> fullname = mstrsave (s -> objfile -> md, s -> fullname); + fullname = s->fullname; + s->fullname = mstrsave (s->objfile->md, s->fullname); free (fullname); } return result; @@ -804,6 +813,8 @@ identify_source_line (s, line, mid_statement, pc) if (line > s->nlines) /* Don't index off the end of the line_charpos array. */ return 0; + /* FIXME-32x64: Need a version of print_address_numeric which does + not pass use_local to print_longest. */ printf_unfiltered ("\032\032%s:%d:%d:%s:0x%lx\n", s->fullname, line, s->line_charpos[line - 1], mid_statement ? "middle" : "beg", @@ -1025,20 +1036,23 @@ list_command (arg, from_tty) if (*arg == '*') { if (sal.symtab == 0) + /* FIXME-32x64--assumes sal.pc fits in long. */ error ("No source file for address %s.", local_hex_string((unsigned long) sal.pc)); sym = find_pc_function (sal.pc); if (sym) { - printf_filtered ("%s is in ", - local_hex_string((unsigned long) sal.pc)); + print_address_numeric (sal.pc, gdb_stdout); + printf_filtered (" is in "); fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout); printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line); } else - printf_filtered ("%s is at %s:%d.\n", - local_hex_string((unsigned long) sal.pc), - sal.symtab->filename, sal.line); + { + print_address_numeric (sal.pc, gdb_stdout); + printf_filtered (" is at %s:%d.\n", + sal.symtab->filename, sal.line); + } } /* If line was not specified by just a line number, @@ -1125,7 +1139,7 @@ line_info (arg, from_tty) printf_filtered ("\n"); } else if (sal.line > 0 - && find_line_pc_range (sal.symtab, sal.line, &start_pc, &end_pc)) + && find_line_pc_range (sal, &start_pc, &end_pc)) { if (start_pc == end_pc) { diff --git a/gdb/symtab.h b/gdb/symtab.h index 24a807a..cd1ad34 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -64,7 +64,7 @@ struct general_symbol_info /* The fact that this is a long not a LONGEST mainly limits the range of a LOC_CONST. Since LOC_CONST_BYTES exists, I'm not sure that is a big deal. */ - long value; + long ivalue; struct block *block; @@ -110,7 +110,7 @@ struct general_symbol_info }; #define SYMBOL_NAME(symbol) (symbol)->ginfo.name -#define SYMBOL_VALUE(symbol) (symbol)->ginfo.value.value +#define SYMBOL_VALUE(symbol) (symbol)->ginfo.value.ivalue #define SYMBOL_VALUE_ADDRESS(symbol) (symbol)->ginfo.value.address #define SYMBOL_VALUE_BYTES(symbol) (symbol)->ginfo.value.bytes #define SYMBOL_BLOCK_VALUE(symbol) (symbol)->ginfo.value.block diff --git a/gdb/xcoffexec.c b/gdb/xcoffexec.c index 892e2d8..2d57f92 100644 --- a/gdb/xcoffexec.c +++ b/gdb/xcoffexec.c @@ -358,7 +358,7 @@ xfer_memory (memaddr, myaddr, len, write, target) { /* Entire transfer is within this section. */ res = xfer_fn (p->bfd, p->the_bfd_section, myaddr, memaddr - p->addr, len); - return (res != false)? len: 0; + return (res != 0) ? len : 0; } else if (p->endaddr <= memaddr) { @@ -370,7 +370,7 @@ xfer_memory (memaddr, myaddr, len, write, target) /* This section overlaps the transfer. Just do half. */ len = p->endaddr - memaddr; res = xfer_fn (p->bfd, p->the_bfd_section, myaddr, memaddr - p->addr, len); - return (res != false)? len: 0; + return (res != 0) ? len : 0; } else if (p->addr < nextsectaddr) nextsectaddr = p->addr; -- 2.7.4