Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Unified Diff: gdb/utils.c

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/utils.h ('k') | gdb/v850-tdep.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/utils.c
diff --git a/gdb/utils.c b/gdb/utils.c
index 556614996b8bc14a804c105e210ebfe80c010b4f..975c43288639adf48b23d5c280be8b820da8d821 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -1,6 +1,6 @@
/* General utility routines for GDB, the GNU debugger.
- Copyright (C) 1986, 1988-2012 Free Software Foundation, Inc.
+ Copyright (C) 1986-2013 Free Software Foundation, Inc.
This file is part of GDB.
@@ -21,12 +21,13 @@
#include "dyn-string.h"
#include "gdb_assert.h"
#include <ctype.h>
-#include "gdb_string.h"
+#include <string.h>
#include "gdb_wait.h"
#include "event-top.h"
#include "exceptions.h"
#include "gdbthread.h"
#include "fnmatch.h"
+#include "gdb_bfd.h"
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif /* HAVE_SYS_RESOURCE_H */
@@ -39,11 +40,6 @@
#include <pc.h>
#endif
-/* SunOS's curses.h has a '#define reg register' in it. Thank you Sun. */
-#ifdef reg
-#undef reg
-#endif
-
#include <signal.h>
#include "timeval-utils.h"
#include "gdbcmd.h"
@@ -65,8 +61,6 @@
#include "inferior.h" /* for signed_pointer_to_address */
-#include <sys/param.h> /* For MAXPATHLEN */
-
#include "gdb_curses.h"
#include "readline/readline.h"
@@ -88,9 +82,6 @@ extern PTR realloc (); /* ARI: PTR */
extern void free ();
#endif
-/* readline defines this. */
-#undef savestring
-
void (*deprecated_error_begin_hook) (void);
/* Prototypes for local functions */
@@ -105,6 +96,14 @@ static void prompt_for_continue (void);
static void set_screen_size (void);
static void set_width (void);
+/* Time spent in prompt_for_continue in the currently executing command
+ waiting for user to respond.
+ Initialized in make_command_stats_cleanup.
+ Modified in prompt_for_continue and defaulted_query.
+ Used in report_command_stats. */
+
+static struct timeval prompt_for_continue_wait_time;
+
/* A flag indicating whether to timestamp debugging messages. */
static int debug_timestamp = 0;
@@ -113,9 +112,11 @@ static int debug_timestamp = 0;
int job_control;
+#ifndef HAVE_PYTHON
/* Nonzero means a quit has been requested. */
int quit_flag;
+#endif /* HAVE_PYTHON */
/* Nonzero means quit immediately if Control-C is typed now, rather
than waiting until QUIT is executed. Be careful in setting this;
@@ -130,6 +131,41 @@ int quit_flag;
int immediate_quit;
+#ifndef HAVE_PYTHON
+
+/* Clear the quit flag. */
+
+void
+clear_quit_flag (void)
+{
+ quit_flag = 0;
+}
+
+/* Set the quit flag. */
+
+void
+set_quit_flag (void)
+{
+ quit_flag = 1;
+}
+
+/* Return true if the quit flag has been set, false otherwise. */
+
+int
+check_quit_flag (void)
+{
+ /* This is written in a particular way to avoid races. */
+ if (quit_flag)
+ {
+ quit_flag = 0;
+ return 1;
+ }
+
+ return 0;
+}
+
+#endif /* HAVE_PYTHON */
+
/* Nonzero means that strings with character values >0x7F should be printed
as octal escapes. Zero means just print the value (e.g. it's an
international character, and the terminal or window can cope.) */
@@ -144,14 +180,6 @@ show_sevenbit_strings (struct ui_file *file, int from_tty,
value);
}
-/* String to be printed before error messages, if any. */
-
-char *error_pre_print;
-
-/* String to be printed before quit messages, if any. */
-
-char *quit_pre_print;
-
/* String to be printed before warning messages, if any. */
char *warning_pre_print = "\nwarning: ";
@@ -198,11 +226,11 @@ make_cleanup_dyn_string_delete (dyn_string_t arg)
static void
do_bfd_close_cleanup (void *arg)
{
- bfd_close (arg);
+ gdb_bfd_unref (arg);
}
struct cleanup *
-make_cleanup_bfd_close (bfd *abfd)
+make_cleanup_bfd_unref (bfd *abfd)
{
return make_cleanup (do_bfd_close_cleanup, abfd);
}
@@ -457,6 +485,28 @@ make_cleanup_free_so (struct so_list *so)
return make_cleanup (do_free_so, so);
}
+/* Helper for make_cleanup_restore_current_language. */
+
+static void
+do_restore_current_language (void *p)
+{
+ enum language saved_lang = (uintptr_t) p;
+
+ set_language (saved_lang);
+}
+
+/* Remember the current value of CURRENT_LANGUAGE and make it restored when
+ the cleanup is run. */
+
+struct cleanup *
+make_cleanup_restore_current_language (void)
+{
+ enum language saved_lang = current_language->la_language;
+
+ return make_cleanup (do_restore_current_language,
+ (void *) (uintptr_t) saved_lang);
+}
+
/* This function is useful for cleanups.
Do
@@ -479,109 +529,6 @@ free_current_contents (void *ptr)
*location = NULL;
}
}
-
-/* If nonzero, display time usage both at startup and for each command. */
-
-static int display_time;
-
-/* If nonzero, display space usage both at startup and for each command. */
-
-static int display_space;
-
-/* Records a run time and space usage to be used as a base for
- reporting elapsed time or change in space. In addition,
- the msg_type field indicates whether the saved time is from the
- beginning of GDB execution (0) or the beginning of an individual
- command execution (1). */
-struct cmd_stats
-{
- int msg_type;
- long start_cpu_time;
- struct timeval start_wall_time;
- long start_space;
-};
-
-/* Set whether to display time statistics to NEW_VALUE (non-zero
- means true). */
-void
-set_display_time (int new_value)
-{
- display_time = new_value;
-}
-
-/* Set whether to display space statistics to NEW_VALUE (non-zero
- means true). */
-void
-set_display_space (int new_value)
-{
- display_space = new_value;
-}
-
-/* As indicated by display_time and display_space, report GDB's elapsed time
- and space usage from the base time and space provided in ARG, which
- must be a pointer to a struct cmd_stat. This function is intended
- to be called as a cleanup. */
-static void
-report_command_stats (void *arg)
-{
- struct cmd_stats *start_stats = (struct cmd_stats *) arg;
- int msg_type = start_stats->msg_type;
-
- if (display_time)
- {
- long cmd_time = get_run_time () - start_stats->start_cpu_time;
- struct timeval now_wall_time, delta_wall_time;
-
- gettimeofday (&now_wall_time, NULL);
- timeval_sub (&delta_wall_time,
- &now_wall_time, &start_stats->start_wall_time);
-
- printf_unfiltered (msg_type == 0
- ? _("Startup time: %ld.%06ld (cpu), %ld.%06ld (wall)\n")
- : _("Command execution time: %ld.%06ld (cpu), %ld.%06ld (wall)\n"),
- cmd_time / 1000000, cmd_time % 1000000,
- (long) delta_wall_time.tv_sec,
- (long) delta_wall_time.tv_usec);
- }
-
- if (display_space)
- {
-#ifdef HAVE_SBRK
- char *lim = (char *) sbrk (0);
-
- long space_now = lim - lim_at_start;
- long space_diff = space_now - start_stats->start_space;
-
- printf_unfiltered (msg_type == 0
- ? _("Space used: %ld (%s%ld during startup)\n")
- : _("Space used: %ld (%s%ld for this command)\n"),
- space_now,
- (space_diff >= 0 ? "+" : ""),
- space_diff);
-#endif
- }
-}
-
-/* Create a cleanup that reports time and space used since its
- creation. Precise messages depend on MSG_TYPE:
- 0: Initial time/space
- 1: Individual command time/space. */
-struct cleanup *
-make_command_stats_cleanup (int msg_type)
-{
- struct cmd_stats *new_stat = XMALLOC (struct cmd_stats);
-
-#ifdef HAVE_SBRK
- char *lim = (char *) sbrk (0);
- new_stat->start_space = lim - lim_at_start;
-#endif
-
- new_stat->msg_type = msg_type;
- new_stat->start_cpu_time = get_run_time ();
- gettimeofday (&new_stat->start_wall_time, NULL);
-
- return make_cleanup_dtor (report_command_stats, new_stat, xfree);
-}
@@ -751,6 +698,7 @@ internal_vproblem (struct internal_problem *problem,
int quit_p;
int dump_core_p;
char *reason;
+ struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
/* Don't allow infinite error/warning recursion. */
{
@@ -859,6 +807,7 @@ internal_vproblem (struct internal_problem *problem,
}
dejavu = 0;
+ do_cleanups (cleanup);
}
static struct internal_problem internal_error_problem = {
@@ -869,7 +818,7 @@ void
internal_verror (const char *file, int line, const char *fmt, va_list ap)
{
internal_vproblem (&internal_error_problem, file, line, fmt, ap);
- deprecated_throw_reason (RETURN_ERROR);
+ fatal (_("Command aborted."));
}
void
@@ -1003,29 +952,66 @@ add_internal_problem_command (struct internal_problem *problem)
xfree (show_doc);
}
-/* Print the system error message for errno, and also mention STRING
- as the file name for which the error was encountered.
- Then return to command level. */
+/* Return a newly allocated string, containing the PREFIX followed
+ by the system error message for errno (separated by a colon).
-void
-perror_with_name (const char *string)
+ The result must be deallocated after use. */
+
+static char *
+perror_string (const char *prefix)
{
char *err;
char *combined;
err = safe_strerror (errno);
- combined = (char *) alloca (strlen (err) + strlen (string) + 3);
- strcpy (combined, string);
+ combined = (char *) xmalloc (strlen (err) + strlen (prefix) + 3);
+ strcpy (combined, prefix);
strcat (combined, ": ");
strcat (combined, err);
+ return combined;
+}
+
+/* Print the system error message for errno, and also mention STRING
+ as the file name for which the error was encountered. Use ERRCODE
+ for the thrown exception. Then return to command level. */
+
+void
+throw_perror_with_name (enum errors errcode, const char *string)
+{
+ char *combined;
+
+ combined = perror_string (string);
+ make_cleanup (xfree, combined);
+
/* I understand setting these is a matter of taste. Still, some people
may clear errno but not know about bfd_error. Doing this here is not
unreasonable. */
bfd_set_error (bfd_error_no_error);
errno = 0;
- error (_("%s."), combined);
+ throw_error (errcode, _("%s."), combined);
+}
+
+/* See throw_perror_with_name, ERRCODE defaults here to GENERIC_ERROR. */
+
+void
+perror_with_name (const char *string)
+{
+ throw_perror_with_name (GENERIC_ERROR, string);
+}
+
+/* Same as perror_with_name except that it prints a warning instead
+ of throwing an error. */
+
+void
+perror_warning_with_name (const char *string)
+{
+ char *combined;
+
+ combined = perror_string (string);
+ warning (_("%s"), combined);
+ xfree (combined);
}
/* Print the system error message for ERRCODE, and also mention STRING
@@ -1110,20 +1096,6 @@ myread (int desc, char *addr, int len)
return orglen;
}
-/* Make a copy of the string at PTR with SIZE characters
- (and add a null character at the end in the copy).
- Uses malloc to get the space. Returns the address of the copy. */
-
-char *
-savestring (const char *ptr, size_t size)
-{
- char *p = (char *) xmalloc (size + 1);
-
- memcpy (p, ptr, size);
- p[size] = 0;
- return p;
-}
-
void
print_spaces (int n, struct ui_file *file)
{
@@ -1168,6 +1140,29 @@ get_regcomp_error (int code, regex_t *rx)
return result;
}
+/* Compile a regexp and throw an exception on error. This returns a
+ cleanup to free the resulting pattern on success. RX must not be
+ NULL. */
+
+struct cleanup *
+compile_rx_or_error (regex_t *pattern, const char *rx, const char *message)
+{
+ int code;
+
+ gdb_assert (rx != NULL);
+
+ code = regcomp (pattern, rx, REG_NOSUB);
+ if (code != 0)
+ {
+ char *err = get_regcomp_error (code, pattern);
+
+ make_cleanup (xfree, err);
+ error (("%s: %s"), message, err);
+ }
+
+ return make_regfree_cleanup (pattern);
+}
+
/* This function supports the query, nquery, and yquery functions.
@@ -1189,6 +1184,9 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
int def_value;
char def_answer, not_def_answer;
char *y_string, *n_string, *question;
+ /* Used to add duration we waited for user to respond to
+ prompt_for_continue_wait_time. */
+ struct timeval prompt_started, prompt_ended, prompt_delta;
/* Set up according to which answer is the default. */
if (defchar == '\0')
@@ -1246,6 +1244,9 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
/* Format the question outside of the loop, to avoid reusing args. */
question = xstrvprintf (ctlstr, args);
+ /* Used for calculating time spend waiting for user. */
+ gettimeofday (&prompt_started, NULL);
+
while (1)
{
wrap_here (""); /* Flush any buffered output. */
@@ -1323,6 +1324,12 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
y_string, n_string);
}
+ /* Add time spend in this routine to prompt_for_continue_wait_time. */
+ gettimeofday (&prompt_ended, NULL);
+ timeval_sub (&prompt_delta, &prompt_ended, &prompt_started);
+ timeval_add (&prompt_for_continue_wait_time,
+ &prompt_for_continue_wait_time, &prompt_delta);
+
xfree (question);
if (annotation_level > 1)
printf_filtered (("\n\032\032post-query\n"));
@@ -1400,7 +1407,8 @@ host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c)
cleanups = make_cleanup_obstack_free (&host_data);
convert_between_encodings (target_charset (gdbarch), host_charset (),
- &the_char, 1, 1, &host_data, translit_none);
+ (gdb_byte *) &the_char, 1, 1,
+ &host_data, translit_none);
if (obstack_object_size (&host_data) == 1)
{
@@ -1428,7 +1436,7 @@ host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c)
after the zeros. A value of 0 does not mean end of string. */
int
-parse_escape (struct gdbarch *gdbarch, char **string_ptr)
+parse_escape (struct gdbarch *gdbarch, const char **string_ptr)
{
int target_char = -2; /* Initialize to avoid GCC warnings. */
int c = *(*string_ptr)++;
@@ -1676,20 +1684,19 @@ init_page_info (void)
lines_per_page = rows;
chars_per_line = cols;
- /* Readline should have fetched the termcap entry for us. */
- if (tgetnum ("li") < 0 || getenv ("EMACS"))
+ /* Readline should have fetched the termcap entry for us.
+ Only try to use tgetnum function if rl_get_screen_size
+ did not return a useful value. */
+ if (((rows <= 0) && (tgetnum ("li") < 0))
+ /* Also disable paging if inside EMACS. */
+ || getenv ("EMACS"))
{
- /* The number of lines per page is not mentioned in the
- terminal description. This probably means that paging is
- not useful (e.g. emacs shell window), so disable paging. */
+ /* The number of lines per page is not mentioned in the terminal
+ description or EMACS evironment variable is set. This probably
+ means that paging is not useful, so disable paging. */
lines_per_page = UINT_MAX;
}
- /* FIXME: Get rid of this junk. */
-#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
- SIGWINCH_HANDLER (SIGWINCH);
-#endif
-
/* If the output is not a terminal, don't paginate it. */
if (!ui_file_isatty (gdb_stdout))
lines_per_page = UINT_MAX;
@@ -1796,6 +1803,11 @@ prompt_for_continue (void)
{
char *ignore;
char cont_prompt[120];
+ /* Used to add duration we waited for user to respond to
+ prompt_for_continue_wait_time. */
+ struct timeval prompt_started, prompt_ended, prompt_delta;
+
+ gettimeofday (&prompt_started, NULL);
if (annotation_level > 1)
printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
@@ -1811,6 +1823,7 @@ prompt_for_continue (void)
reinitialize_more_filter ();
immediate_quit++;
+ QUIT;
/* On a real operating system, the user can quit with SIGINT.
But not on GO32.
@@ -1823,6 +1836,12 @@ prompt_for_continue (void)
out to DOS. */
ignore = gdb_readline_wrapper (cont_prompt);
+ /* Add time spend in this routine to prompt_for_continue_wait_time. */
+ gettimeofday (&prompt_ended, NULL);
+ timeval_sub (&prompt_delta, &prompt_ended, &prompt_started);
+ timeval_add (&prompt_for_continue_wait_time,
+ &prompt_for_continue_wait_time, &prompt_delta);
+
if (annotation_level > 1)
printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
@@ -1833,7 +1852,7 @@ prompt_for_continue (void)
while (*p == ' ' || *p == '\t')
++p;
if (p[0] == 'q')
- async_request_quit (0);
+ quit ();
xfree (ignore);
}
immediate_quit--;
@@ -1845,6 +1864,24 @@ prompt_for_continue (void)
dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
}
+/* Initalize timer to keep track of how long we waited for the user. */
+
+void
+reset_prompt_for_continue_wait_time (void)
+{
+ static const struct timeval zero_timeval = { 0 };
+
+ prompt_for_continue_wait_time = zero_timeval;
+}
+
+/* Fetch the cumulative time spent in prompt_for_continue. */
+
+struct timeval
+get_prompt_for_continue_wait_time (void)
+{
+ return prompt_for_continue_wait_time;
+}
+
/* Reinitialize filter; ie. tell it to reset to original values. */
void
@@ -2654,15 +2691,20 @@ void
initialize_utils (void)
{
add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
-Set number of characters gdb thinks are in a line."), _("\
-Show number of characters gdb thinks are in a line."), NULL,
+Set number of characters where GDB should wrap lines of its output."), _("\
+Show number of characters where GDB should wrap lines of its output."), _("\
+This affects where GDB wraps its output to fit the screen width.\n\
+Setting this to \"unlimited\" or zero prevents GDB from wrapping its output."),
set_width_command,
show_chars_per_line,
&setlist, &showlist);
add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
-Set number of lines gdb thinks are in a page."), _("\
-Show number of lines gdb thinks are in a page."), NULL,
+Set number of lines in a page for GDB output pagination."), _("\
+Show number of lines in a page for GDB output pagination."), _("\
+This affects the number of lines after which GDB will pause\n\
+its output and ask you whether to continue.\n\
+Setting this to \"unlimited\" or zero causes GDB never pause during output."),
set_height_command,
show_lines_per_page,
&setlist, &showlist);
@@ -2671,8 +2713,11 @@ Show number of lines gdb thinks are in a page."), NULL,
add_setshow_boolean_cmd ("pagination", class_support,
&pagination_enabled, _("\
-Set state of pagination."), _("\
-Show state of pagination."), NULL,
+Set state of GDB output pagination."), _("\
+Show state of GDB output pagination."), _("\
+When pagination is ON, GDB pauses at end of each screenful of\n\
+its output and asks you whether to continue.\n\
+Turning pagination off is an alternative to \"set height unlimited\"."),
NULL,
show_pagination_enabled,
&setlist, &showlist);
@@ -2703,11 +2748,6 @@ When set, debugging messages will be marked with seconds and microseconds."),
&setdebuglist, &showdebuglist);
}
-/* Machine specific function to handle SIGWINCH signal. */
-
-#ifdef SIGWINCH_HANDLER_BODY
-SIGWINCH_HANDLER_BODY
-#endif
/* Print routines to handle variable size regs, etc. */
/* Temporary storage using circular buffer. */
#define NUMCELLS 16
@@ -3108,22 +3148,14 @@ gdb_realpath (const char *filename)
path. Use that and realpath() to canonicalize the name. This is
the most common case. Note that, if there isn't a compile time
upper bound, you want to avoid realpath() at all costs. */
-#if defined(HAVE_REALPATH)
+#if defined (HAVE_REALPATH) && defined (PATH_MAX)
{
-# if defined (PATH_MAX)
char buf[PATH_MAX];
-# define USE_REALPATH
-# elif defined (MAXPATHLEN)
- char buf[MAXPATHLEN];
-# define USE_REALPATH
-# endif
-# if defined (USE_REALPATH)
const char *rp = realpath (filename, buf);
if (rp == NULL)
rp = filename;
return xstrdup (rp);
-# endif
}
#endif /* HAVE_REALPATH */
@@ -3157,7 +3189,7 @@ gdb_realpath (const char *filename)
pathconf()) making it impossible to pass a correctly sized buffer
to realpath() (it could always overflow). On those systems, we
skip this. */
-#if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
+#if defined (HAVE_REALPATH) && defined (_PC_PATH_MAX) && defined(HAVE_ALLOCA)
{
/* Find out the max path size. */
long path_max = pathconf ("/", _PC_PATH_MAX);
@@ -3200,7 +3232,7 @@ gdb_realpath (const char *filename)
by gdb_realpath. */
char *
-xfullpath (const char *filename)
+gdb_realpath_keepfile (const char *filename)
{
const char *base_name = lbasename (filename);
char *dir_name;
@@ -3242,75 +3274,30 @@ xfullpath (const char *filename)
return result;
}
+/* Return PATH in absolute form, performing tilde-expansion if necessary.
+ PATH cannot be NULL or the empty string.
+ This does not resolve symlinks however, use gdb_realpath for that.
+ Space for the result is allocated with malloc.
+ If the path is already absolute, it is strdup'd.
+ If there is a problem computing the absolute path, the path is returned
+ unchanged (still strdup'd). */
+
+char *
+gdb_abspath (const char *path)
+{
+ gdb_assert (path != NULL && path[0] != '\0');
+
+ if (path[0] == '~')
+ return tilde_expand (path);
+
+ if (IS_ABSOLUTE_PATH (path))
+ return xstrdup (path);
-/* This is the 32-bit CRC function used by the GNU separate debug
- facility. An executable may contain a section named
- .gnu_debuglink, which holds the name of a separate executable file
- containing its debug info, and a checksum of that file's contents,
- computed using this function. */
-unsigned long
-gnu_debuglink_crc32 (unsigned long crc, unsigned char *buf, size_t len)
-{
- static const unsigned int crc32_table[256] = {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
- 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
- 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
- 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
- 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
- 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
- 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
- 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
- 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
- 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
- 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
- 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
- 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
- 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
- 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
- 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
- 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
- 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
- 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
- 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
- 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
- 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
- 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
- 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
- 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
- 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
- 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
- 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
- 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
- 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
- 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
- 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
- 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
- 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
- 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
- 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
- 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
- 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
- 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
- 0x2d02ef8d
- };
- unsigned char *end;
-
- crc = ~crc & 0xffffffff;
- for (end = buf + len; buf < end; ++buf)
- crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
- return ~crc & 0xffffffff;
+ /* Beware the // my son, the Emacs barfs, the botch that catch... */
+ return concat (current_directory,
+ IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
+ ? "" : SLASH_STRING,
+ path, (char *) NULL);
}
ULONGEST
@@ -3329,6 +3316,23 @@ align_down (ULONGEST v, int n)
return (v & -n);
}
+/* See utils.h. */
+
+LONGEST
+gdb_sign_extend (LONGEST value, int bit)
+{
+ gdb_assert (bit >= 1 && bit <= 8 * sizeof (LONGEST));
+
+ if (((value >> (bit - 1)) & 1) != 0)
+ {
+ LONGEST signbit = ((LONGEST) 1) << (bit - 1);
+
+ value = (value ^ signbit) - signbit;
+ }
+
+ return value;
+}
+
/* Allocation function for the libiberty hash table which uses an
obstack. The obstack is passed as DATA. */
@@ -3636,24 +3640,6 @@ producer_is_gcc_ge_4 (const char *producer)
return minor;
}
-/* Call xfree for each element of CHAR_PTR_VEC and final VEC_free for
- CHAR_PTR_VEC itself.
-
- You must not modify CHAR_PTR_VEC after it got registered with this function
- by make_cleanup as the CHAR_PTR_VEC base address may change on its updates.
- Contrary to VEC_free this function does not (cannot) clear the pointer. */
-
-void
-free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
-{
- int ix;
- char *name;
-
- for (ix = 0; VEC_iterate (char_ptr, char_ptr_vec, ix, name); ++ix)
- xfree (name);
- VEC_free (char_ptr, char_ptr_vec);
-}
-
/* Helper for make_cleanup_free_char_ptr_vec. */
static void
@@ -3677,54 +3663,6 @@ make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
return make_cleanup (do_free_char_ptr_vec, char_ptr_vec);
}
-/* Extended version of dirnames_to_char_ptr_vec - additionally if *VECP is
- non-NULL the new list elements from DIRNAMES are appended to the existing
- *VECP list of entries. *VECP address will be updated by this call. */
-
-void
-dirnames_to_char_ptr_vec_append (VEC (char_ptr) **vecp, const char *dirnames)
-{
- do
- {
- size_t this_len;
- char *next_dir, *this_dir;
-
- next_dir = strchr (dirnames, DIRNAME_SEPARATOR);
- if (next_dir == NULL)
- this_len = strlen (dirnames);
- else
- {
- this_len = next_dir - dirnames;
- next_dir++;
- }
-
- this_dir = xmalloc (this_len + 1);
- memcpy (this_dir, dirnames, this_len);
- this_dir[this_len] = '\0';
- VEC_safe_push (char_ptr, *vecp, this_dir);
-
- dirnames = next_dir;
- }
- while (dirnames != NULL);
-}
-
-/* Split DIRNAMES by DIRNAME_SEPARATOR delimiter and return a list of all the
- elements in their original order. For empty string ("") DIRNAMES return
- list of one empty string ("") element.
-
- You may modify the returned strings.
- Read free_char_ptr_vec for its cleanup. */
-
-VEC (char_ptr) *
-dirnames_to_char_ptr_vec (const char *dirnames)
-{
- VEC (char_ptr) *retval = NULL;
-
- dirnames_to_char_ptr_vec_append (&retval, dirnames);
-
- return retval;
-}
-
/* Substitute all occurences of string FROM by string TO in *STRINGP. *STRINGP
must come from xrealloc-compatible allocator and it may be updated. FROM
needs to be delimited by IS_DIR_SEPARATOR or DIRNAME_SEPARATOR (or be
« no previous file with comments | « gdb/utils.h ('k') | gdb/v850-tdep.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698