diff options
-rw-r--r-- | gdb/ChangeLog | 3 | ||||
-rw-r--r-- | gdb/defs.h | 3 | ||||
-rw-r--r-- | gdb/valprint.c | 29 |
3 files changed, 31 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 610bdcd..4dac525 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,8 @@ Fri Feb 18 08:26:29 1994 Jim Kingdon (kingdon@lioth.cygnus.com) + * defs.h, valprint.c: Make longest_to_int a function not a macro. + Only test against INT_MIN if a LONGEST is bigger than an int. + * README: Change GhostScript to Ghostscript. Fri Feb 18 07:30:55 1994 Jim Kingdon (kingdon@cygnus.com) @@ -556,8 +556,7 @@ enum val_prettyprint arguments to a function, number in a value history, register number, etc.) where the value must not be larger than can fit in an int. */ -#define longest_to_int(x) (((x) > INT_MAX || (x) < INT_MIN) \ - ? (error ("Value out of range."),0) : (int) (x)) +extern int longest_to_int PARAMS ((LONGEST)); /* Assorted functions we can declare, now that const and volatile are defined. */ diff --git a/gdb/valprint.c b/gdb/valprint.c index a3242fd..c5bd039 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -277,9 +277,12 @@ val_print_type_code_int (type, valaddr, stream) #endif if (len <= sizeof (LONGEST)) { - /* We can print it in decimal. */ + /* The most significant bytes are zero, so we can just get + the least significant sizeof (LONGEST) bytes and print it + in decimal. */ print_longest (stream, 'u', 0, - unpack_long (BUILTIN_TYPE_LONGEST, first_addr)); + extract_unsigned_integer (first_addr, + sizeof (LONGEST))); } else { @@ -424,6 +427,28 @@ print_longest (stream, format, use_local, val_long) #endif /* !PRINTF_HAS_LONG_LONG */ } +/* This used to be a macro, but I don't think it is called often enough + to merit such treatment. */ +/* Convert a LONGEST to an int. This is used in contexts (e.g. number of + arguments to a function, number in a value history, register number, etc.) + where the value must not be larger than can fit in an int. */ + +int +longest_to_int (arg) + LONGEST arg; +{ + + /* This check is in case a system header has botched the + definition of INT_MIN, like on BSDI. */ + if (sizeof (LONGEST) <= sizeof (int)) + return arg; + + if (arg > INT_MAX || arg < INT_MIN) + error ("Value out of range."); + + return arg; +} + /* Print a floating point value of type TYPE, pointed to in GDB by VALADDR, on STREAM. */ |