@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA . */
# include <stdio.h>
# include <string.h>
# include "defs.h"
# include <string.h>
# include "symtab.h"
# include "gdbtypes.h"
# include "value.h"
# include "gdbcore.h"
# include "gdbcmd.h"
@ -29,11 +29,59 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
# include "language.h"
# include <errno.h>
/* Prototypes for local functions */
static void
print_string PARAMS ( ( FILE * , char * , unsigned int , int ) ) ;
static void
show_print PARAMS ( ( char * , int ) ) ;
static void
set_print PARAMS ( ( char * , int ) ) ;
static void
set_radix PARAMS ( ( char * , int , struct cmd_list_element * ) ) ;
static void
set_output_radix PARAMS ( ( char * , int , struct cmd_list_element * ) ) ;
static void
type_print_base PARAMS ( ( struct type * , FILE * , int , int ) ) ;
static void
type_print_varspec_suffix PARAMS ( ( struct type * , FILE * , int , int ) ) ;
static void
type_print_varspec_prefix PARAMS ( ( struct type * , FILE * , int , int ) ) ;
static void
type_print_derivation_info PARAMS ( ( FILE * , struct type * ) ) ;
static void
type_print_method_args PARAMS ( ( struct type * * , char * , char * , int , FILE * ) ) ;
static void
cplus_val_print PARAMS ( ( struct type * , char * , FILE * , int , int ,
enum val_prettyprint , struct type * * ) ) ;
static void
val_print_fields PARAMS ( ( struct type * , char * , FILE * , int , int ,
enum val_prettyprint , struct type * * ) ) ;
static int
is_vtbl_member PARAMS ( ( struct type * ) ) ;
static int
is_vtbl_ptr_type PARAMS ( ( struct type * ) ) ;
static void
print_hex_chars PARAMS ( ( FILE * , unsigned char * , unsigned ) ) ;
extern int sys_nerr ;
extern char * sys_errlist [ ] ;
extern void print_scalar_formatted ( ) ; /* printcmd.c */
extern void print_address_demangle ( ) ; /* printcmd.c */
extern int demangle ; /* whether to print C++ syms raw or source-form */
/* Maximum number of chars to print for a string pointer value
@ -41,11 +89,6 @@ extern int demangle; /* whether to print C++ syms raw or source-form */
static unsigned int print_max ;
static void type_print_varspec_suffix ( ) ;
static void type_print_varspec_prefix ( ) ;
static void type_print_base ( ) ;
static void type_print_method_args ( ) ;
/* Default input and output radixes, and output format letter. */
unsigned input_radix = 10 ;
@ -74,14 +117,13 @@ int objectprint; /* Controls looking up an object's derived type
struct obstack dont_print_obstack ;
static void cplus_val_print ( ) ;
/* Print the character string STRING, printing at most LENGTH characters.
Printing stops early if the number hits print_max ; repeat counts
are printed as appropriate . Print ellipses at the end if we
had to stop before printing LENGTH characters , or if FORCE_ELLIPSES . */
void
static void
print_string ( stream , string , length , force_ellipses )
FILE * stream ;
char * string ;
@ -286,7 +328,7 @@ int
value_print ( val , stream , format , pretty )
value val ;
FILE * stream ;
char format ;
int format ;
enum val_prettyprint pretty ;
{
register unsigned int i , n , typelen ;
@ -439,12 +481,13 @@ is_vtbl_member(type)
DONT_PRINT is an array of baseclass types that we
should not print , or zero if called from top level . */
static void
val_print_fields ( type , valaddr , stream , format , recurse , pretty , dont_print )
struct type * type ;
char * valaddr ;
FILE * stream ;
char format ;
int format ;
int recurse ;
enum val_prettyprint pretty ;
struct type * * dont_print ;
@ -547,7 +590,7 @@ cplus_val_print (type, valaddr, stream, format, recurse, pretty, dont_print)
struct type * type ;
char * valaddr ;
FILE * stream ;
char format ;
int format ;
int recurse ;
enum val_prettyprint pretty ;
struct type * * dont_print ;
@ -634,13 +677,12 @@ cplus_val_print (type, valaddr, stream, format, recurse, pretty, dont_print)
The PRETTY parameter controls prettyprinting . */
int
val_print ( type , valaddr , address , stream , format ,
deref_ref , recurse , pretty )
val_print ( type , valaddr , address , stream , format , deref_ref , recurse , pretty )
struct type * type ;
char * valaddr ;
CORE_ADDR address ;
FILE * stream ;
char format ;
int format ;
int deref_ref ;
int recurse ;
enum val_prettyprint pretty ;
@ -927,10 +969,17 @@ val_print (type, valaddr, address, stream, format,
slower if print_max is set high , e . g . if you set
print_max to 1000 , not only will it take a long
time to fetch short strings , but if you are near
the end of the address space , it might not work .
FIXME . */
the end of the address space , it might not work . */
QUIT ;
errcode = target_read_memory ( addr , string , print_max ) ;
if ( errcode ! = 0 )
{
/* Try reading just one character. If that succeeds,
assume we hit the end of the address space , but
the initial part of the string is probably safe . */
char x [ 1 ] ;
errcode = target_read_memory ( addr , x , 1 ) ;
}
if ( errcode ! = 0 )
force_ellipses = 0 ;
else
@ -974,13 +1023,12 @@ val_print (type, valaddr, address, stream, format,
{
CORE_ADDR vt_address = unpack_pointer ( type , valaddr ) ;
int vt_index = find_pc_misc_function ( vt_address ) ;
if ( vt_index > = 0
& & vt_address = = misc_function_vector [ vt_index ] . address )
struct minimal_symbol * msymbol =
lookup_minimal_symbol_by_pc ( vt_address ) ;
if ( ( msymbol ! = NULL ) & & ( vt_address = = msymbol - > address ) )
{
fputs_filtered ( " < " , stream ) ;
fputs_demangled ( misc_function_vector [ vt_index ] . name ,
stream , 1 ) ;
fputs_demangled ( msymbol - > name , stream , 1 ) ;
fputs_filtered ( " > " , stream ) ;
}
if ( vtblprint )
@ -1698,7 +1746,7 @@ type_print_base (type, stream, show, level)
struct fn_field * f = TYPE_FN_FIELDLIST1 ( type , i ) ;
int j , len2 = TYPE_FN_FIELDLIST_LENGTH ( type , i ) ;
char * method_name = TYPE_FN_FIELDLIST_NAME ( type , i ) ;
int is_constructor = strcmp ( method_name , TYPE_NAME ( type ) ) = = 0 ;
int is_constructor = name & & strcmp ( method_name , name ) = = 0 ;
for ( j = 0 ; j < len2 ; j + + )
{
QUIT ;
@ -1723,7 +1771,6 @@ type_print_base (type, stream, show, level)
if ( TYPE_FN_FIELD_STUB ( f , j ) )
{
/* Build something we can demangle. */
char * strchr ( ) , * gdb_mangle_name ( ) , * cplus_demangle ( ) ;
char * mangled_name = gdb_mangle_name ( type , i , j ) ;
char * demangled_name = cplus_demangle ( mangled_name , 1 ) ;
if ( demangled_name = = 0 )
@ -2011,7 +2058,7 @@ _initialize_valprint ()
" Set default input and output number radix. " ,
& setlist ) ;
add_show_from_set ( c , & showlist ) ;
c - > function = set_radix ;
c - > function . sfunc = set_radix ;
/* Give people the defaults which they are used to. */
prettyprint = 0 ;