+Sun Nov 5 11:39:01 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * version.c: Change version to 3.4
+
+ * symtab.c (decode_line_1): Only skip past "struct" if it
+ is there.
+
+ * valops.c (value_ind), eval.c (evaluate_subexp, case UNOP_IND):
+ Have "*" <int-valued-exp> return an int, not a LONGEST.
+
+ * utils.c (fprintf_filtered): Pass arg{4,5,6} to sprintf.
+
+ * printcmd.c (x_command): Use variable itself rather
+ than treating it as a pointer only if it is a function.
+ (See comment "this makes x/i main work").
+
+ * coffread.c (symbol_file_command): Use error for
+ "%s does not have a symbol-table.\n".
+
+Wed Nov 1 19:56:18 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * dbxread.c [BELIEVE_PCC_PROMOTION_TYPE]: New code.
+ m-sparc.h: Define BELIEVE_PCC_PROMOTION_TYPE.
+
+Thu Oct 26 12:45:00 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * infrun.c: Include <sys/dir.h>.
+
+ * dbxread.c (read_dbx_symtab, case N_LSYM, case 'T'):
+ Check for enum types and put constants in psymtab.
+
+Mon Oct 23 15:02:25 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * dbxread.c (define_symbol, read_dbx_symtab): Handle enum
+ constants (e.g. "b:c=e6,0").
+
+Thu Oct 19 14:57:26 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * stack.c (frame_info): Use FRAME_ARGS_ADDRESS_CORRECT
+ m-vax.h (FRAME_ARGS_ADDRESS_CORRECT): New macro.
+ (FRAME_ARGS_ADDRESS): Restore old meaning.
+
+ * frame.h (Frame_unknown): New macro.
+ stack.c (frame_info): Check for Frame_unknown return from
+ FRAME_ARGS_ADDRESS.
+ m-vax.h (FRAME_ARGS_ADDRESS): Sometimes return Frame_unknown.
+
+ * utils.c (fatal_dump_core): Add "internal error" to message.
+
+ * infrun.c (IN_SIGTRAMP): New macro.
+ (wait_for_inferior): Use IN_SIGTRAMP.
+ m-vax.h (IN_SIGTRAMP): New macro.
+
+Wed Oct 18 15:09:22 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * config.gdb, Makefile.dist: Shorten m-i386-sv32.h.
+
+ * coffread.c (symbol_file_command): Pass 0 to select_source_symtab.
+
+Tue Oct 17 12:24:41 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * i386-dep.c (i386_frame_num_args): Take function from m-i386.h
+ file. Check for pfi null.
+ m-i386.h (FRAME_NUM_ARGS): Use i386_frame_num_args.
+
+ * infrun.c (wait_for_inferior): set stop_func_name to 0
+ before calling find_pc_partial_function.
+
+Thu Oct 12 01:08:50 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * breakpoint.c (_initialize_breakpoint): Add "disa".
+
+ * Makefile.dist: Add GLOBAL_CFLAGS and pass to readline.
+
+ * config.gdb (various): "$machine =" -> "machine =".
+
+Wed Oct 11 11:54:31 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * inflow.c (try_writing_regs): #if 0 out this function.
+
+ * main.c (main): Add "-help" option.
+
+ * dbxread.c (read_dbx_symtab): Merge code for N_FUN with
+ N_STSYM, etc.
+
+Mon Oct 9 14:21:55 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * inflow.c (try_writing_regs_command): Don't write past end
+ of struct user.
+
+ * dbxread.c (read_struct_type): #if 0 out code which checks for
+ bitpos and bitsize 0.
+
+ * config.gdb: Accept sequent-i386 (not seq386).
+ (symmetry): Set depfile and paramfile.
+
+ * m-convex.h (IGNORE_SYMBOL): Check for N_MONPT if defined.
+
+Thu Oct 5 10:14:26 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * default-dep.c (read_inferior_memory): Put #if 0'd out comment
+ within /* */.
+
+Wed Oct 4 18:44:41 1989 Jim Kingdon (kingdon at apple-gunkies.ai.mit.edu)
+
+ * config.gdb: Change /dev/null to m-i386.h for various
+ 386 machine "opcodefile" entries.
+
+ * config.gdb: Accept seq386 for sequent symmetry.
+
+Mon Oct 2 09:59:50 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * hp300bsd-dep.c: Fix copyright notice.
+
+Sun Oct 1 16:25:30 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * Makefile.dist (DEPFILES): Add isi-dep.c.
+
+ * default-dep.c (read_inferior_memory): Move #endif after else.
+
Sat Sep 30 12:50:16 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+ * version.c: Change version number to 3.3.xxx.
+
+ * GDB 3.3 released.
+
* version.c: Change version number to 3.3.
* Makefile.dist (READLINE): Add vi_mode.c
#define M_CFLAGS
#endif
-CFLAGS = -g -I. ${HAVE_VPRINTF_DEFINE} M_CFLAGS
-/* CFLAGS = -I. -g -pg ${HAVE_VPRINTF_DEFINE} */
+/* CFLAGS for both GDB and readline. */
+GLOBAL_CFLAGS = -g M_CFLAGS
+CFLAGS = -I. ${HAVE_VPRINTF_DEFINE} ${GLOBAL_CFLAGS}
/* None of the things in CFLAGS will do any harm, and on some systems
(e.g. SunOS4) it is important to use the M_CFLAGS. */
LDFLAGS = $(CFLAGS)
DEPFILES = umax-dep.c gould-dep.c default-dep.c sun3-dep.c \
sparc-dep.c hp9k320-dep.c hp300bsd-dep.c news-dep.c i386-dep.c \
- symmetry-dep.c convex-dep.c altos-dep.c
+ symmetry-dep.c convex-dep.c altos-dep.c isi-dep.c
PINSNS = gld-pinsn.c i386-pinsn.c sparc-pinsn.c vax-pinsn.c m68k-pinsn.c \
ns32k-pinsn.c convex-pinsn.c
ns32k-opcode.h convex-opcode.h
MFILES = m-hp9k320.h m-hp300bsd.h m-i386.h m-i386gas.h \
- m-i386-sysv3.2.h m-i386gas-sysv3.2.h m-isi.h m-merlin.h \
+ m-i386-sv32.h m-i386g-sv32.h m-isi.h m-merlin.h \
m-altos.h m-news.h m-newsos3.h m-npl.h m-pn.h \
m-sparc.h m-sun2.h m-sun3.h m-sun2os4.h \
m-sun3os4.h m-sun4os4.h m-umax.h m-vax.h m-symmetry.h m-convex.h
mv expread.tab.o expread.o
readline/libreadline.a : force_update
- cd readline ; ${MAKE} "SYSV=${SYSV_DEFINE}" "CC=${CC}" libreadline.a
+ cd readline ; ${MAKE} "SYSV=${SYSV_DEFINE}" \
+ "DEBUG_FLAGS=${GLOBAL_CFLAGS}" "CC=${CC}" libreadline.a
force_update :
About languages other than C...
-C++ support has been integrated into gdb. GDB should work with Pascal
-and FORTRAN programs, but I am not aware of anyone who is working on
-getting it to use the syntax of any language other than C or C++.
+C++ support has been integrated into gdb. GDB should work with
+FORTRAN programs (if you have problem, please send a bug report), but
+I am not aware of anyone who is working on getting it to use the
+syntax of any language other than C or C++. Pascal programs which use
+sets, subranges, file variables, or nested functions will not
+currently work.
About -gg format...
Currently GDB version 3.x does *not* support GCC's -gg format. This
-is because it is (in theory) has fast enough startup on dbx debugging
+is because it (in theory) has fast enough startup on dbx debugging
format object files that -gg format is unnecessary (and hence
undesirable, since it wastes space and processing power in gcc). I
would like to hear people's opinions on the amount of time currently
the machine-independent file which calls a (possibly)
machine-dependent macro (for example, the IGNORE_SYMBOL macro can be
used for any symbols which need to be ignored on a specific machine.
-Calling IGNORE_SYMBOL in dbxread.c is a lot cleaner than a maze of
-#if defined's). The machine-independent code should do whatever "most"
-machines want if the macro is not defined in param.h. Using #if defined
-can sometimes be OK (e.g. SET_STACK_LIMIT_HUGE) but should usually be
+Calling IGNORE_SYMBOL in dbxread.c is a lot cleaner than a maze of #if
+defined's). The machine-independent code should do whatever "most"
+machines want if the macro is not defined in param.h. Using #if
+defined can sometimes be OK (e.g. SET_STACK_LIMIT_HUGE) but should be
conditionalized on a specific feature of an operating system (set in
-param.h) rather than something like #if defined(vax) or #if defined(SYSV).
+param.h) rather than something like #if defined(vax) or #if
+defined(SYSV).
It is better to replace entire routines which may be system-specific,
rather than put in a whole bunch of hooks which are probably not going
to be helpful for any purpose other than your changes. For example,
if you want to modify dbxread.c to deal with DBX debugging symbols
-which are in COFF files rather than a.out files, do something
+which are in COFF files rather than BSD a.out files, do something
along the lines of a macro GET_NEXT_SYMBOL, which could have
different definitions for COFF and a.out, rather than trying to put
the necessary changes throughout all the code in dbxread.c that
-currently assumes a.out format.
+currently assumes BSD format.
Please avoid duplicating code. For example, if something needs to be
changed in read_inferior_memory, it is very painful because there is a
-copy in every dep.c file. The correct way to do this is to put the
-standard ptrace interfaces in a separate file ptrace.c, which is used
-by all systems which have ptrace. ptrace.c would deal with variations
-between systems the same way any system-independent file would (hooks,
-#if defined, etc.).
+copy in every dep.c file. The correct way to do this is to put (in
+this case) the standard ptrace interfaces in a separate file ptrace.c,
+which is used by all systems which have ptrace. ptrace.c would deal
+with variations between systems the same way any system-independent
+file would (hooks, #if defined, etc.).
About debugging gdb with itself...
distribution; this will put the machine dependent routines for your
local machine where they will be accessed first by a M-period .
-Also, you want to make sure that gdb is not compiled with shared
-libraries on the Sun 4. And you want to make sure that you've
-compiled gdb with your local cc or taken appropriate precautions
-regarding ansification of include files. See the Makefile for more
-information.
+Also, make sure that you've compiled gdb with your local cc or taken
+appropriate precautions regarding ansification of include files. See
+the Makefile for more information.
The "info" command, when executed without a subcommand in a gdb being
debugged by gdb, will pop you back up to the top level gdb. See
dbxread.c,2354
#define IGNORE_SYMBOL(\7f164,4914
#define IGNORE_SYMBOL(\7f169,5028
-#define MAX_OF_TYPE(\7f4957,136182
-#define MIN_OF_TYPE(\7f4958,136235
+#define MAX_OF_TYPE(\7f5113,141022
+#define MIN_OF_TYPE(\7f5114,141075
#define READ_FILE_HEADERS(\7f211,6321
#define READ_FILE_HEADERS(\7f218,6571
#define READ_STRING_TABLE_SIZE(\7f197,5872
#define SET_ELEMENT_P(\7f85,2728
#define STAB_REG_TO_REGNUM(\7f264,8007
#define TYPE_OF_SET_ELEMENT(\7f86,2788
-_initialize_dbxread \7f5237,144381
+_initialize_dbxread \7f5393,149221
add_bincl_to_list \7f1824,50638
-add_file_command \7f3525,97352
+add_file_command \7f3616,99938
add_new_header_file \7f686,20412
add_old_header_file \7f657,19394
add_symbol_to_list \7f867,25287
add_this_object_header_file \7f637,18767
-add_undefined_type \7f3904,108372
-cleanup_undefined_types \7f3920,108815
+add_undefined_type \7f4073,113549
+cleanup_undefined_types \7f4089,113992
compare_misc_functions \7f1399,39494
-compare_psymbols \7f2571,70005
+compare_psymbols \7f2662,72591
compare_symbols \7f1487,41458
-condense_addl_misc_bunches \7f3322,91797
+condense_addl_misc_bunches \7f3413,94383
condense_misc_bunches \7f1428,40167
-copy_pending \7f5201,143523
+copy_pending \7f5357,148363
dbx_alloc_type \7f814,24174
dbx_create_type \7f797,23649
dbx_lookup_type \7f746,22223
-define_symbol \7f3661,100810
+define_symbol \7f3778,104025
discard_misc_bunches \7f1412,39806
-end_psymtab \7f2595,70719
+end_psymtab \7f2686,73305
end_symtab \7f1207,34565
explicit_lookup_type \7f846,24755
-fill_in_vptr_fieldno \7f5189,143190
+fill_in_vptr_fieldno \7f5345,148030
fill_symbuf \7f1764,48931
find_corresponding_bincl_psymtab \7f1849,51331
finish_block \7f932,26830
-fix_common_block \7f5223,144077
- for \7f2521,68680
+fix_common_block \7f5379,148917
+ for \7f2612,71266
free_bincl_list \7f1867,51719
free_header_files \7f612,18133
get_sym_file \7f1740,48273
-hash_symsegs \7f3059,84015
-hashname \7f3032,83492
+hash_symsegs \7f3150,86601
+hashname \7f3123,86078
init_bincl_list \7f1812,50383
init_header_files \7f599,17782
init_misc_functions \7f1361,38562
obconcat \7f508,14582
obsavestring \7f486,14075
pop_subfile \7f1319,37721
-process_one_symbol \7f3090,84833
-psymtab_to_symtab(\7f2736,74790
-psymtab_to_symtab_1 \7f2673,73083
+process_one_symbol \7f3181,87419
+psymtab_to_symtab(\7f2827,77376
+psymtab_to_symtab_1 \7f2764,75669
push_subfile \7f1305,37370
-read_addl_syms \7f3365,92819
-read_args \7f5147,142033
-read_array_type \7f4797,131732
+read_addl_syms \7f3456,95405
+read_args \7f5303,146873
+read_array_type \7f4953,136572
read_dbx_symtab \7f1891,52496
-read_enum_type \7f4874,133737
-read_number \7f5108,141320
-read_ofile_symtab \7f2918,79777
-read_range_type \7f4961,136307
-read_struct_type \7f4300,118149
-read_type \7f3997,110898
-read_type_number \7f3970,110243
+read_enum_type \7f5030,138577
+read_number \7f5264,146160
+read_ofile_symtab \7f3009,82363
+read_range_type \7f5117,141147
+read_struct_type \7f4445,122700
+read_type \7f4142,115449
+read_type_number \7f3758,103693
really_free_pendings \7f896,26045
record_line \7f1065,30528
record_misc_function \7f1369,38676
-scan_file_globals \7f2845,77745
+scan_file_globals \7f2936,80331
sort_syms \7f1508,42042
sort_symtab_syms \7f1517,42168
-start_psymtab \7f2540,69215
+start_psymtab \7f2631,71801
start_subfile \7f1149,32781
start_symtab \7f1096,31315
symbol_file_command \7f1557,43492
\f
blockframe.c,647
#define FRAMELESS_LOOK_FOR_PROLOGUE(\7f163,4369
-_initialize_blockframe \7f587,15557
+_initialize_blockframe \7f595,15906
block_for_pc \7f351,9907
-block_innermost_frame \7f566,15144
+block_innermost_frame \7f574,15493
create_new_frame \7f80,2165
find_pc_function \7f422,11439
-find_pc_misc_function \7f521,13741
-find_pc_partial_function \7f437,11845
+find_pc_misc_function \7f529,14090
+find_pc_partial_function \7f445,12194
flush_cached_frames \7f132,3234
get_current_block \7f311,9005
get_current_frame \7f64,1933
dbxread.c,2354
#define IGNORE_SYMBOL(\7f164,4914
#define IGNORE_SYMBOL(\7f169,5028
-#define MAX_OF_TYPE(\7f4957,136182
-#define MIN_OF_TYPE(\7f4958,136235
+#define MAX_OF_TYPE(\7f5113,141022
+#define MIN_OF_TYPE(\7f5114,141075
#define READ_FILE_HEADERS(\7f211,6321
#define READ_FILE_HEADERS(\7f218,6571
#define READ_STRING_TABLE_SIZE(\7f197,5872
#define SET_ELEMENT_P(\7f85,2728
#define STAB_REG_TO_REGNUM(\7f264,8007
#define TYPE_OF_SET_ELEMENT(\7f86,2788
-_initialize_dbxread \7f5237,144381
+_initialize_dbxread \7f5393,149221
add_bincl_to_list \7f1824,50638
-add_file_command \7f3525,97352
+add_file_command \7f3616,99938
add_new_header_file \7f686,20412
add_old_header_file \7f657,19394
add_symbol_to_list \7f867,25287
add_this_object_header_file \7f637,18767
-add_undefined_type \7f3904,108372
-cleanup_undefined_types \7f3920,108815
+add_undefined_type \7f4073,113549
+cleanup_undefined_types \7f4089,113992
compare_misc_functions \7f1399,39494
-compare_psymbols \7f2571,70005
+compare_psymbols \7f2662,72591
compare_symbols \7f1487,41458
-condense_addl_misc_bunches \7f3322,91797
+condense_addl_misc_bunches \7f3413,94383
condense_misc_bunches \7f1428,40167
-copy_pending \7f5201,143523
+copy_pending \7f5357,148363
dbx_alloc_type \7f814,24174
dbx_create_type \7f797,23649
dbx_lookup_type \7f746,22223
-define_symbol \7f3661,100810
+define_symbol \7f3778,104025
discard_misc_bunches \7f1412,39806
-end_psymtab \7f2595,70719
+end_psymtab \7f2686,73305
end_symtab \7f1207,34565
explicit_lookup_type \7f846,24755
-fill_in_vptr_fieldno \7f5189,143190
+fill_in_vptr_fieldno \7f5345,148030
fill_symbuf \7f1764,48931
find_corresponding_bincl_psymtab \7f1849,51331
finish_block \7f932,26830
-fix_common_block \7f5223,144077
- for \7f2521,68680
+fix_common_block \7f5379,148917
+ for \7f2612,71266
free_bincl_list \7f1867,51719
free_header_files \7f612,18133
get_sym_file \7f1740,48273
-hash_symsegs \7f3059,84015
-hashname \7f3032,83492
+hash_symsegs \7f3150,86601
+hashname \7f3123,86078
init_bincl_list \7f1812,50383
init_header_files \7f599,17782
init_misc_functions \7f1361,38562
obconcat \7f508,14582
obsavestring \7f486,14075
pop_subfile \7f1319,37721
-process_one_symbol \7f3090,84833
-psymtab_to_symtab(\7f2736,74790
-psymtab_to_symtab_1 \7f2673,73083
+process_one_symbol \7f3181,87419
+psymtab_to_symtab(\7f2827,77376
+psymtab_to_symtab_1 \7f2764,75669
push_subfile \7f1305,37370
-read_addl_syms \7f3365,92819
-read_args \7f5147,142033
-read_array_type \7f4797,131732
+read_addl_syms \7f3456,95405
+read_args \7f5303,146873
+read_array_type \7f4953,136572
read_dbx_symtab \7f1891,52496
-read_enum_type \7f4874,133737
-read_number \7f5108,141320
-read_ofile_symtab \7f2918,79777
-read_range_type \7f4961,136307
-read_struct_type \7f4300,118149
-read_type \7f3997,110898
-read_type_number \7f3970,110243
+read_enum_type \7f5030,138577
+read_number \7f5264,146160
+read_ofile_symtab \7f3009,82363
+read_range_type \7f5117,141147
+read_struct_type \7f4445,122700
+read_type \7f4142,115449
+read_type_number \7f3758,103693
really_free_pendings \7f896,26045
record_line \7f1065,30528
record_misc_function \7f1369,38676
-scan_file_globals \7f2845,77745
+scan_file_globals \7f2936,80331
sort_syms \7f1508,42042
sort_symtab_syms \7f1517,42168
-start_psymtab \7f2540,69215
+start_psymtab \7f2631,71801
start_subfile \7f1149,32781
start_symtab \7f1096,31315
symbol_file_command \7f1557,43492
xxmalloc \7f470,13738
\f
coffread.c,1153
-_initialize_coff \7f1997,51184
+_initialize_coff \7f1995,51136
add_symbol_to_list \7f239,6659
coff_alloc_type \7f216,6044
coff_lookup_type \7f191,5303
compare_symbols \7f643,17250
complete_symtab \7f420,11661
condense_misc_bunches \7f600,16328
-decode_base_type \7f1695,43602
-decode_function_type \7f1680,43270
-decode_type \7f1611,41633
+decode_base_type \7f1693,43554
+decode_function_type \7f1678,43222
+decode_type \7f1609,41585
discard_misc_bunches \7f587,16136
end_symtab \7f443,12339
-enter_linenos \7f1325,33811
-fill_in_vptr_fieldno \7f1976,50629
+enter_linenos \7f1323,33763
+fill_in_vptr_fieldno \7f1974,50581
finish_block \7f255,7053
-free_stringtab \7f1244,32313
-get_sym_file \7f830,22060
-getfilename \7f1272,32775
-getsymname \7f1252,32409
-hashname \7f1349,34504
-init_lineno \7f1301,33409
+free_stringtab \7f1242,32265
+get_sym_file \7f828,22012
+getfilename \7f1270,32727
+getsymname \7f1250,32361
+hashname \7f1347,34456
+init_lineno \7f1299,33361
init_misc_functions \7f530,14772
-init_stringtab \7f1207,31526
+init_stringtab \7f1205,31478
make_blockvector \7f334,9209
-patch_opaque_types \7f1397,35664
-patch_type \7f1370,34784
-process_coff_symbol \7f1458,37365
-psymtab_to_symtab \7f1989,50997
-read_aout_hdr \7f1143,30011
-read_coff_symtab \7f853,22645
-read_enum_type \7f1894,48302
-read_file_hdr \7f1106,29439
-read_one_sym \7f1177,30725
-read_section_hdr \7f1156,30264
-read_struct_type \7f1799,45905
+patch_opaque_types \7f1395,35616
+patch_type \7f1368,34736
+process_coff_symbol \7f1456,37317
+psymtab_to_symtab \7f1987,50949
+read_aout_hdr \7f1141,29963
+read_coff_symtab \7f851,22597
+read_enum_type \7f1892,48254
+read_file_hdr \7f1104,29391
+read_one_sym \7f1175,30677
+read_section_hdr \7f1154,30216
+read_struct_type \7f1797,45857
record_line \7f372,10317
record_misc_function \7f538,14886
sort_syms \7f655,17641
#define N_MAGIC(\7f37,1073
#define N_MAGIC(\7f39,1116
#define N_TXTADDR(\7f56,1392
-_initialize_core(\7f501,11926
-close_exec_file \7f161,3640
-files_info \7f222,4960
-get_exec_file \7f206,4709
-have_core_file_p \7f216,4899
-myread \7f457,11172
-read_memory \7f274,6239
-register_addr \7f484,11657
-reopen_exec_file \7f169,3729
-specify_exec_file_hook \7f150,3406
-validate_files \7f185,4128
-write_memory \7f298,6798
-xfer_core_file \7f324,7539
+_initialize_core(\7f501,11938
+close_exec_file \7f161,3652
+files_info \7f222,4972
+get_exec_file \7f206,4721
+have_core_file_p \7f216,4911
+myread \7f457,11184
+read_memory \7f274,6251
+register_addr \7f484,11669
+reopen_exec_file \7f169,3741
+specify_exec_file_hook \7f150,3418
+validate_files \7f185,4140
+write_memory \7f298,6810
+xfer_core_file \7f324,7551
\f
environ.c,205
environ_vector \7f87,2273
eval.c,320
evaluate_expression \7f119,3366
evaluate_subexp \7f138,3760
-evaluate_subexp_for_address \7f888,25910
-evaluate_subexp_for_sizeof \7f983,28436
-evaluate_subexp_with_coercion \7f951,27623
+evaluate_subexp_for_address \7f888,25906
+evaluate_subexp_for_sizeof \7f983,28432
+evaluate_subexp_with_coercion \7f951,27619
evaluate_type \7f130,3614
parse_and_eval \7f62,1782
parse_and_eval_address \7f31,978
write_pc \7f757,17808
\f
inflow.c,335
-_initialize_inflow \7f500,11655
+_initialize_inflow \7f511,12264
create_inferior \7f365,8512
inferior_died \7f459,10830
kill_command \7f447,10602
terminal_ours \7f193,4436
terminal_ours_1 \7f202,4530
terminal_ours_for_output \7f180,4199
-try_writing_regs_command \7f474,11137
-\f
-infrun.c,422
-_initialize_infrun \7f1340,40505
-attach_program \7f423,12649
-clear_proceed_status \7f238,7822
-handle_command \7f1135,33944
-insert_step_breakpoint \7f1113,33367
-normal_stop \7f1005,30118
-proceed \7f266,8680
-remove_step_breakpoint \7f1125,33669
-restore_inferior_status \7f1294,39027
-save_inferior_status \7f1263,37798
-signals_info \7f1222,36546
-start_inferior \7f358,11034
-start_remote \7f405,12289
-wait_for_inferior \7f447,13290
-writing_pc \7f345,10713
+try_writing_regs_command \7f479,11383
+\f
+infrun.c,452
+#define IN_SIGTRAMP(\7f166,5961
+_initialize_infrun \7f1366,41425
+attach_program \7f448,13556
+clear_proceed_status \7f263,8729
+handle_command \7f1161,34864
+insert_step_breakpoint \7f1139,34287
+normal_stop \7f1031,31038
+proceed \7f291,9587
+remove_step_breakpoint \7f1151,34589
+restore_inferior_status \7f1320,39947
+save_inferior_status \7f1289,38718
+signals_info \7f1248,37466
+start_inferior \7f383,11941
+start_remote \7f430,13196
+wait_for_inferior \7f472,14197
+writing_pc \7f370,11620
\f
kdb-start.c,14
start \7f29,911
\f
main.c,1395
#define ISATTY(\7f47,1291
-add_com \7f1066,26905
-add_com_alias \7f1078,27132
-add_info \7f1034,26190
-add_info_alias \7f1045,26383
+add_com \7f1096,28194
+add_com_alias \7f1108,28421
+add_info \7f1064,27479
+add_info_alias \7f1075,27672
catch_errors \7f177,4170
-catch_termination \7f763,19120
-cd_command \7f1318,32114
-command_line_input \7f818,20970
-command_loop \7f495,12271
-define_command \7f1124,27925
+catch_termination \7f793,20409
+cd_command \7f1348,33403
+command_line_input \7f848,22259
+command_loop \7f525,13560
+define_command \7f1154,29214
disconnect \7f207,4712
-do_nothing \7f488,12171
-document_command \7f1164,28926
-dont_repeat \7f519,12935
-dump_me_command \7f1433,34141
-echo_command \7f1407,33757
-editing_info \7f1482,35163
-error_no_arg \7f1088,27330
-execute_command \7f445,11096
-float_handler \7f1665,39616
-free_command_lines \7f1016,25881
-gdb_readline \7f536,13456
-help_command \7f1095,27424
-info_command \7f1057,26711
-initialize_cmd_lists \7f1672,39713
-initialize_main \7f1686,40170
-initialize_signals \7f778,19567
-input_from_terminal_p \7f1297,31668
+do_nothing \7f518,13460
+document_command \7f1194,30215
+dont_repeat \7f549,14224
+dump_me_command \7f1463,35430
+echo_command \7f1437,35046
+editing_info \7f1512,36452
+error_no_arg \7f1118,28619
+execute_command \7f475,12385
+float_handler \7f1695,40905
+free_command_lines \7f1046,27170
+gdb_readline \7f566,14745
+help_command \7f1125,28713
+info_command \7f1087,28000
+initialize_cmd_lists \7f1702,41002
+initialize_main \7f1716,41459
+initialize_signals \7f808,20856
+input_from_terminal_p \7f1327,32957
main \7f231,5192
-parse_binary_operation \7f1443,34288
-print_gdb_version \7f1209,29850
-print_prompt \7f1229,30348
-pwd_command \7f1303,31739
-quit_command \7f1276,31154
-read_command_lines \7f965,24579
+parse_binary_operation \7f1473,35577
+print_gdb_version \7f1239,31139
+print_prompt \7f1259,31637
+pwd_command \7f1333,33028
+quit_command \7f1306,32443
+read_command_lines \7f995,25868
return_to_top_level \7f160,3706
-set_editing \7f1472,34921
-set_history \7f1596,38350
-set_history_expansion \7f1580,38024
-set_history_filename \7f1616,38738
-set_history_size \7f1605,38571
-set_history_write \7f1588,38193
-set_prompt_command \7f1238,30489
-set_verbose_command \7f1645,39221
+set_editing \7f1502,36210
+set_history \7f1626,39639
+set_history_expansion \7f1610,39313
+set_history_filename \7f1646,40027
+set_history_size \7f1635,39860
+set_history_write \7f1618,39482
+set_prompt_command \7f1268,31778
+set_verbose_command \7f1675,40510
source_cleanup \7f220,5004
-source_command \7f1378,33251
-stop_sig \7f711,17950
-symbol_completion_function \7f603,15200
-validate_comname \7f1103,27558
-verbose_info \7f1653,39371
-version_info \7f1219,30200
+source_command \7f1408,34540
+stop_sig \7f741,19239
+symbol_completion_function \7f633,16489
+validate_comname \7f1133,28847
+verbose_info \7f1683,40660
+version_info \7f1249,31489
\f
printcmd.c,943
-_initialize_printcmd \7f1623,38100
+_initialize_printcmd \7f1625,38235
address_info \7f592,13980
-clear_displays \7f914,21618
-compare_ints \7f1208,27665
-containing_function_bounds \7f1537,35960
+clear_displays \7f916,21753
+compare_ints \7f1210,27800
+containing_function_bounds \7f1539,36095
decode_format \7f80,2251
-delete_display \7f929,21829
-disable_current_display \7f1082,25057
-disable_display \7f1067,24819
-disable_display_command \7f1160,26792
-disassemble_command \7f1563,36620
-display_command \7f851,20435
-display_info \7f1094,25338
-do_displays \7f1055,24569
+delete_display \7f931,21964
+disable_current_display \7f1084,25192
+disable_display \7f1069,24954
+disable_display_command \7f1162,26927
+disassemble_command \7f1565,36755
+display_command \7f853,20570
+display_info \7f1096,25473
+do_displays \7f1057,24704
do_examine \7f432,10303
-do_one_display \7f1000,23202
-enable_display \7f1121,26123
-free_display \7f902,21400
+do_one_display \7f1002,23337
+enable_display \7f1123,26258
+free_display \7f904,21535
output_command \7f553,13174
print_address \7f404,9676
print_command \7f513,12305
print_formatted \7f175,4422
-print_frame_args \7f1221,27981
-print_frame_nameless_args \7f1306,30230
+print_frame_args \7f1223,28116
+print_frame_nameless_args \7f1308,30365
print_scalar_formatted \7f218,5618
-print_variable_value \7f1198,27446
-printf_command \7f1331,30817
-ptype_command \7f766,18216
+print_variable_value \7f1200,27581
+printf_command \7f1333,30952
+ptype_command \7f768,18351
set_command \7f581,13730
set_next_address \7f389,9302
-undisplay_command \7f962,22446
+undisplay_command \7f964,22581
validate_format \7f498,11866
-whatis_command \7f738,17564
+whatis_command \7f740,17699
x_command \7f678,15908
\f
remote.c,714
source_line_charpos \7f406,9635
\f
stack.c,657
-_initialize_stack \7f859,22042
-args_info \7f625,15676
-backtrace_command \7f432,11191
-backtrace_limit_info \7f418,10894
-down_command \7f792,20320
-find_relative_frame \7f682,17313
-frame_command \7f734,18898
-frame_info \7f308,8077
-get_selected_block \7f662,16609
-locals_info \7f569,14484
+_initialize_stack \7f879,22697
+args_info \7f645,16331
+backtrace_command \7f452,11846
+backtrace_limit_info \7f438,11549
+down_command \7f812,20975
+find_relative_frame \7f702,17968
+frame_command \7f754,19553
+frame_info \7f318,8503
+get_selected_block \7f682,17264
+locals_info \7f589,15139
parse_frame_specification \7f216,6084
-print_block_frame_locals \7f494,12726
-print_frame_arg_vars \7f578,14659
+print_block_frame_locals \7f514,13381
+print_frame_arg_vars \7f598,15314
print_frame_info \7f76,2220
-print_frame_local_vars \7f533,13684
+print_frame_local_vars \7f553,14339
print_sel_frame \7f191,5582
print_selected_frame \7f201,5792
print_stack_frame \7f59,1892
-record_selected_frame \7f650,16289
-return_command \7f811,20839
-select_frame \7f636,15968
-set_backtrace_limit_command \7f405,10622
-up_command \7f767,19616
+record_selected_frame \7f670,16944
+return_command \7f831,21494
+select_frame \7f656,16623
+set_backtrace_limit_command \7f425,11277
+up_command \7f787,20271
\f
standalone.c,1177
_exit \7f434,8321
relocate_typevector \7f270,7878
\f
symtab.c,1477
-_initialize_symtab \7f2382,65276
+_initialize_symtab \7f2388,65501
block_function \7f1102,30299
-compare_symbols \7f2173,59132
-completion_list_add_symbol \7f2239,60743
-contained_in \7f2224,60473
+compare_symbols \7f2179,59357
+completion_list_add_symbol \7f2245,60968
+contained_in \7f2230,60698
create_array_type \7f604,16947
decode_line_1 \7f1438,39022
-decode_line_2 \7f1800,49861
-decode_line_spec \7f1785,49470
+decode_line_2 \7f1806,50086
+decode_line_spec \7f1791,49695
find_line_common \7f1354,36778
find_line_pc \7f1289,34998
find_line_pc_range \7f1311,35530
find_pc_psymbol \7f765,21363
find_pc_psymtab \7f750,20994
find_pc_symtab \7f1114,30525
-functions_info \7f2150,58796
-init_type \7f2196,59740
-list_symbols \7f1974,53807
+functions_info \7f2156,59021
+init_type \7f2202,59965
+list_symbols \7f1980,54032
lookup_basetype_type \7f507,14022
lookup_block_symbol \7f1007,27715
lookup_enum \7f268,7169
lookup_function_type \7f569,15751
lookup_member_type \7f383,10719
lookup_method_type \7f437,12136
-lookup_misc_func \7f1897,52101
+lookup_misc_func \7f1903,52326
lookup_partial_symbol \7f945,26144
lookup_partial_symtab \7f165,4536
lookup_pointer_type \7f323,8661
lookup_typename \7f183,4935
lookup_union \7f250,6688
lookup_unsigned_typename \7f214,5725
-make_symbol_completion_list \7f2264,61514
-methods_info \7f2164,58968
-output_source_filename \7f1912,52401
+make_symbol_completion_list \7f2270,61739
+methods_info \7f2170,59193
+output_source_filename \7f1918,52626
smash_to_function_type \7f724,20334
smash_to_member_type \7f658,18480
smash_to_method_type \7f675,18938
smash_to_pointer_type \7f631,17770
smash_to_reference_type \7f695,19530
-sort_block_syms \7f2185,59523
-sources_info \7f1940,52854
-types_info \7f2157,58884
-variables_info \7f2143,58708
+sort_block_syms \7f2191,59748
+sources_info \7f1946,53079
+types_info \7f2163,59109
+variables_info \7f2149,58933
\f
utils.c,893
#define ISATTY(\7f34,1102
-_initialize_utils \7f837,18051
-bcmp \7f738,16766
-bcopy \7f732,16693
-bzero \7f743,16830
-concat \7f315,7156
+_initialize_utils \7f839,18194
+bcmp \7f740,16909
+bcopy \7f734,16836
+bzero \7f745,16973
+concat \7f317,7281
discard_cleanups \7f96,2598
do_cleanups \7f80,2219
error \7f256,5801
fatal \7f272,6217
fatal_dump_core \7f286,6518
-fprintf_filtered \7f672,15357
-fputs_filtered \7f585,12889
+fprintf_filtered \7f674,15482
+fputs_filtered \7f587,13014
free_current_contents \7f134,3355
-getwd \7f750,16893
-index \7f757,16956
-insque \7f807,17512
+getwd \7f752,17036
+index \7f759,17099
+insque \7f809,17655
make_cleanup \7f60,1751
-parse_escape \7f384,8980
+parse_escape \7f386,9105
perror_with_name \7f172,4138
-print_spaces \7f327,7398
-print_spaces_filtered \7f716,16465
+print_spaces \7f329,7523
+print_spaces_filtered \7f718,16608
print_sys_errmsg \7f198,4697
-printchar \7f454,10140
-printf_filtered \7f707,16234
-prompt_for_continue \7f540,11786
-query \7f341,7762
+printchar \7f456,10265
+printf_filtered \7f709,16377
+prompt_for_continue \7f542,11911
+query \7f343,7887
quit \7f221,5137
-reinitialize_more_filter \7f551,12021
-remque \7f818,17676
+reinitialize_more_filter \7f553,12146
+remque \7f820,17819
request_quit \7f238,5472
restore_cleanups \7f119,3077
-rindex \7f765,17038
+rindex \7f767,17181
save_cleanups \7f109,2899
-savestring \7f304,6989
-screensize_info \7f558,12108
-set_screensize_command \7f500,11063
+savestring \7f306,7114
+screensize_info \7f560,12233
+set_screensize_command \7f502,11188
xmalloc \7f145,3568
xrealloc \7f157,3788
\f
value_zerop \7f555,14239
\f
valops.c,539
-call_function \7f511,14326
-check_field \7f991,27349
-destructor_name_p \7f964,26652
-push_bytes \7f433,12639
-push_word \7f413,12273
-typecmp \7f1186,32205
+call_function \7f514,14497
+check_field \7f994,27520
+destructor_name_p \7f967,26823
+push_bytes \7f436,12810
+push_word \7f416,12444
+typecmp \7f1189,32376
value_addr \7f354,10374
-value_arg_coerce \7f473,13432
-value_arg_push \7f496,13879
+value_arg_coerce \7f476,13603
+value_arg_push \7f499,14050
value_assign \7f113,3260
value_at \7f87,2594
value_cast \7f33,1132
value_coerce_array \7f326,9567
value_ind \7f381,11139
-value_of_this \7f1214,32888
+value_of_this \7f1217,33059
value_of_variable \7f316,9365
-value_push \7f452,12980
+value_push \7f455,13151
value_repeat \7f293,8780
-value_string \7f701,19888
-value_struct_elt \7f780,22216
-value_struct_elt_for_address \7f1072,29190
+value_string \7f704,20059
+value_struct_elt \7f783,22387
+value_struct_elt_for_address \7f1075,29361
value_zero \7f72,2297
\f
valprint.c,462
store_inferior_registers \7f120,2930
write_inferior_memory \7f204,5370
\f
-default-dep.c,331
-#define N_DATADDR(\7f279,7305
+default-dep.c,363
+#define N_DATADDR(\7f279,7329
#define N_SET_MAGIC(\7f42,1176
-#define N_TXTADDR(\7f275,7235
+#define N_TXTADDR(\7f275,7259
call_ptrace \7f55,1511
-core_file_command \7f370,9358
-exec_file_command \7f475,12049
+core_file_command \7f370,9382
+exec_file_command \7f480,12313
fetch_inferior_registers \7f105,2409
kill_inferior \7f61,1634
kill_inferior_fast \7f74,1867
read_inferior_memory \7f172,4208
resume \7f89,2153
store_inferior_registers \7f132,3168
+write_inferior_memory \7f218,5717
\f
sun3-dep.c,402
#define IS_OBJECT_FILE(\7f313,8593
store_inferior_registers \7f211,5018
write_inferior_memory \7f294,7396
\f
-hp300bsd-dep.c,200
-#define N_DATADDR(\7f273,6789
-#define N_TXTADDR(\7f269,6719
-core_file_command \7f362,8819
-exec_file_command \7f455,11105
- On failure \7f165,3796
-read_inferior_memory \7f169,3919
-write_inferior_memory \7f207,5039
+hp300bsd-dep.c,363
+#define N_DATADDR(\7f288,7455
+#define N_SET_MAGIC(\7f43,1174
+#define N_TXTADDR(\7f284,7385
+call_ptrace \7f55,1488
+core_file_command \7f377,9485
+exec_file_command \7f470,11771
+fetch_inferior_registers \7f105,2414
+kill_inferior \7f61,1611
+kill_inferior_fast \7f74,1850
+read_inferior_memory \7f184,4585
+resume \7f89,2142
+store_inferior_registers \7f132,3189
+write_inferior_memory \7f222,5705
\f
news-dep.c,352
#define N_DATADDR(\7f310,8075
store_inferior_registers \7f126,3079
write_inferior_memory \7f249,6463
\f
-i386-dep.c,1058
+i386-dep.c,1091
#define N_DATADDR(\7f278,6990
#define N_SET_MAGIC(\7f45,1190
#define N_SET_MAGIC(\7f47,1250
#define N_TXTADDR(\7f274,6920
-#define U_FPSTATE(\7f1141,28570
+#define U_FPSTATE(\7f1200,29992
call_ptrace \7f62,1570
codestream_fill \7f578,14567
#define codestream_get(\7f574,14433
codestream_seek \7f595,14935
#define codestream_tell(\7f571,14263
core_file_command \7f365,8994
-double_to_i387 \7f980,24581
+double_to_i387 \7f1039,26003
exec_file_command \7f459,11340
fetch_inferior_registers \7f112,2468
-i386_float_info \7f1144,28611
+i386_float_info \7f1203,30033
i386_follow_jump \7f617,15344
-i386_frame_find_saved_regs \7f799,20070
+i386_frame_find_saved_regs \7f858,21492
+i386_frame_num_args \7f780,19198
i386_get_frame_setup \7f666,16376
-i386_pop_frame \7f890,22067
-i386_push_dummy_frame \7f877,21711
-i386_register_u_addr \7f929,23064
-i386_skip_prologue \7f850,21208
-i387_to_double \7f950,23630
+i386_pop_frame \7f949,23489
+i386_push_dummy_frame \7f936,23133
+i386_register_u_addr \7f988,24486
+i386_skip_prologue \7f909,22630
+i387_to_double \7f1009,25052
kill_inferior \7f68,1693
kill_inferior_fast \7f81,1926
-print_387_control_word \7f1014,25288
-print_387_status \7f1077,27021
-print_387_status_word \7f1051,26316
+print_387_control_word \7f1073,26710
+print_387_status \7f1136,28443
+print_387_status_word \7f1110,27738
read_inferior_memory \7f179,4266
resume \7f96,2212
static unsigned char codestream_buf[sizeof \7f567,14157
store_inferior_registers \7f140,3304
write_inferior_memory \7f218,5458
\f
+isi-dep.c,399
+#define N_DATADDR(\7f341,8528
+#define N_SET_MAGIC(\7f44,1358
+#define N_TXTADDR(\7f337,8458
+attach \7f78,2162
+call_ptrace \7f69,1961
+core_file_command \7f430,10558
+detach \7f94,2475
+exec_file_command \7f523,12844
+fetch_inferior_registers \7f170,3893
+kill_inferior \7f106,2674
+kill_inferior_fast \7f131,3166
+read_inferior_memory \7f237,5691
+resume \7f154,3621
+store_inferior_registers \7f197,4652
+write_inferior_memory \7f275,6803
+\f
gld-pinsn.c,79
findarg(\7f193,4447
findframe(\7f223,5160
#define NEXTPACKED(\7f63,1837
#define NEXTSINGLE(\7f53,1604
#define NEXTWORD(\7f47,1444
-_initialize_pinsn(\7f860,19535
-convert_from_68881 \7f785,18049
-convert_to_68881 \7f821,18826
+_initialize_pinsn(\7f864,19795
+convert_from_68881 \7f789,18309
+convert_to_68881 \7f825,19086
fetch_arg \7f574,13657
print_base \7f763,17494
print_indexed \7f673,15446
print_insn \7f73,2231
print_insn_arg \7f167,4704
-sigemt(\7f853,19470
+sigemt(\7f857,19730
\f
ns32k-pinsn.c,300
#define Adrmod_is_index(\7f132,2910
#define STORE_STRUCT_RETURN(\7f212,6752
#define vprintf(\7f236,7634
\f
-m-i386.h,1026
+m-i386.h,1025
#define ABOUT_TO_RETURN(\7f119,3253
#define EXTRACT_RETURN_VALUE(\7f234,6801
#define EXTRACT_STRUCT_VALUE_ADDRESS(\7f247,7308
-#define FIX_CALL_DUMMY(\7f357,10929
+#define FIX_CALL_DUMMY(\7f330,10061
#define FRAMELESS_FUNCTION_INVOCATION(\7f278,8412
#define FRAME_ARGS_ADDRESS(\7f283,8590
#define FRAME_CHAIN(\7f263,7867
#define FRAME_CHAIN_COMBINE(\7f271,8120
#define FRAME_CHAIN_VALID(\7f268,8003
-#define FRAME_FIND_SAVED_REGS(\7f329,10148
+#define FRAME_FIND_SAVED_REGS(\7f302,9280
#define FRAME_LOCALS_ADDRESS(\7f285,8636
-#define FRAME_NUM_ARGS(\7f295,8965
+#define FRAME_NUM_ARGS(\7f290,8775
#define FRAME_SAVED_PC(\7f281,8513
-#define INIT_STACK(\7f388,11817
+#define INIT_STACK(\7f361,10949
#define INVALID_FLOAT(\7f124,3443
#define REGISTER_BYTE(\7f183,5301
#define REGISTER_CONVERTIBLE(\7f206,5845
\f
m-i386gas.h,0
\f
-m-i386-sysv3.2.h,26
+m-i386-sv32.h,26
#define U_FPSTATE(\7f24,901
\f
-m-i386gas-sysv3.2.h,26
+m-i386g-sv32.h,26
#define U_FPSTATE(\7f24,904
\f
m-isi.h,1086
#define STORE_STRUCT_RETURN(\7f306,10794
\f
m-sparc.h,1162
-#define ABOUT_TO_RETURN(\7f106,3444
-#define EXTRACT_RETURN_VALUE(\7f241,8115
-#define EXTRACT_STRUCT_VALUE_ADDRESS(\7f254,8706
-#define FIX_CALL_DUMMY(\7f666,25193
-#define FRAMELESS_FUNCTION_INVOCATION(\7f328,11300
-#define FRAME_ARGS_ADDRESS(\7f336,11556
-#define FRAME_CHAIN(\7f315,10807
-#define FRAME_CHAIN_COMBINE(\7f321,11008
-#define FRAME_CHAIN_VALID(\7f318,10891
-#define FRAME_FIND_SAVED_REGS(\7f370,12938
-#define FRAME_LOCALS_ADDRESS(\7f340,11655
-#define FRAME_NUM_ARGS(\7f347,11913
-#define FRAME_SAVED_PC(\7f333,11445
-#define FRAME_STRUCT_ARGS_ADDRESS(\7f338,11602
-#define GET_RWINDOW_REG(\7f274,9201
-#define INIT_EXTRA_FRAME_INFO(\7f308,10593
-#define INVALID_FLOAT(\7f111,3599
-#define PC_ADJUST(\7f76,2571
-#define REGISTER_BYTE(\7f170,5982
-#define REGISTER_CONVERTIBLE(\7f210,7117
-#define REGISTER_CONVERT_TO_RAW(\7f221,7436
-#define REGISTER_CONVERT_TO_VIRTUAL(\7f215,7253
-#define REGISTER_IN_WINDOW_P(\7f182,6443
-#define REGISTER_RAW_SIZE(\7f190,6653
-#define REGISTER_VIRTUAL_SIZE(\7f197,6817
-#define REGISTER_VIRTUAL_TYPE(\7f227,7606
-#define SAVED_PC_AFTER_CALL(\7f79,2674
-#define SKIP_PROLOGUE(\7f64,2127
-#define STACK_ALIGN(\7f90,2929
-#define STORE_RETURN_VALUE(\7f247,8387
-#define STORE_STRUCT_RETURN(\7f234,7864
+#define ABOUT_TO_RETURN(\7f108,3543
+#define EXTRACT_RETURN_VALUE(\7f243,8214
+#define EXTRACT_STRUCT_VALUE_ADDRESS(\7f256,8805
+#define FIX_CALL_DUMMY(\7f668,25292
+#define FRAMELESS_FUNCTION_INVOCATION(\7f330,11399
+#define FRAME_ARGS_ADDRESS(\7f338,11655
+#define FRAME_CHAIN(\7f317,10906
+#define FRAME_CHAIN_COMBINE(\7f323,11107
+#define FRAME_CHAIN_VALID(\7f320,10990
+#define FRAME_FIND_SAVED_REGS(\7f372,13037
+#define FRAME_LOCALS_ADDRESS(\7f342,11754
+#define FRAME_NUM_ARGS(\7f349,12012
+#define FRAME_SAVED_PC(\7f335,11544
+#define FRAME_STRUCT_ARGS_ADDRESS(\7f340,11701
+#define GET_RWINDOW_REG(\7f276,9300
+#define INIT_EXTRA_FRAME_INFO(\7f310,10692
+#define INVALID_FLOAT(\7f113,3698
+#define PC_ADJUST(\7f78,2670
+#define REGISTER_BYTE(\7f172,6081
+#define REGISTER_CONVERTIBLE(\7f212,7216
+#define REGISTER_CONVERT_TO_RAW(\7f223,7535
+#define REGISTER_CONVERT_TO_VIRTUAL(\7f217,7352
+#define REGISTER_IN_WINDOW_P(\7f184,6542
+#define REGISTER_RAW_SIZE(\7f192,6752
+#define REGISTER_VIRTUAL_SIZE(\7f199,6916
+#define REGISTER_VIRTUAL_TYPE(\7f229,7705
+#define SAVED_PC_AFTER_CALL(\7f81,2773
+#define SKIP_PROLOGUE(\7f66,2226
+#define STACK_ALIGN(\7f92,3028
+#define STORE_RETURN_VALUE(\7f249,8486
+#define STORE_STRUCT_RETURN(\7f236,7963
\f
m-sun2.h,1033
#define ABOUT_TO_RETURN(\7f87,2526
#define STORE_STRUCT_RETURN(\7f250,7722
#define vprintf(\7f401,13167
\f
-m-vax.h,1031
-#define ABOUT_TO_RETURN(\7f124,4067
-#define EXTRACT_RETURN_VALUE(\7f230,7586
-#define EXTRACT_STRUCT_VALUE_ADDRESS(\7f243,8093
-#define FIX_CALL_DUMMY(\7f390,14084
-#define FRAMELESS_FUNCTION_INVOCATION(\7f282,9558
-#define FRAME_ARGS_ADDRESS(\7f291,9902
-#define FRAME_CHAIN(\7f266,8961
-#define FRAME_CHAIN_COMBINE(\7f274,9220
-#define FRAME_CHAIN_VALID(\7f271,9103
-#define FRAME_FIND_SAVED_REGS(\7f314,10763
-#define FRAME_LOCALS_ADDRESS(\7f296,10079
-#define FRAME_NUM_ARGS(\7f301,10218
-#define FRAME_SAVED_PC(\7f286,9650
-#define INIT_STACK(\7f413,14868
-#define INVALID_FLOAT(\7f129,4255
-#define REGISTER_BYTE(\7f178,6064
-#define REGISTER_CONVERTIBLE(\7f201,6677
-#define REGISTER_CONVERT_TO_RAW(\7f212,6992
-#define REGISTER_CONVERT_TO_VIRTUAL(\7f206,6811
-#define REGISTER_RAW_SIZE(\7f183,6226
-#define REGISTER_U_ADDR(\7f163,5488
-#define REGISTER_VIRTUAL_SIZE(\7f188,6379
-#define REGISTER_VIRTUAL_TYPE(\7f218,7160
+m-vax.h,1140
+#define ABOUT_TO_RETURN(\7f136,4647
+#define EXTRACT_RETURN_VALUE(\7f242,8166
+#define EXTRACT_STRUCT_VALUE_ADDRESS(\7f255,8673
+#define FIX_CALL_DUMMY(\7f416,15467
+#define FRAMELESS_FUNCTION_INVOCATION(\7f294,10138
+#define FRAME_ARGS_ADDRESS(\7f317,11265
+#define FRAME_ARGS_ADDRESS_CORRECT(\7f309,10917
+#define FRAME_CHAIN(\7f278,9541
+#define FRAME_CHAIN_COMBINE(\7f286,9800
+#define FRAME_CHAIN_VALID(\7f283,9683
+#define FRAME_FIND_SAVED_REGS(\7f340,12146
+#define FRAME_LOCALS_ADDRESS(\7f322,11462
+#define FRAME_NUM_ARGS(\7f327,11601
+#define FRAME_SAVED_PC(\7f298,10230
+#define INIT_STACK(\7f439,16251
+#define INVALID_FLOAT(\7f141,4835
+#define IN_SIGTRAMP(\7f111,4009
+#define REGISTER_BYTE(\7f190,6644
+#define REGISTER_CONVERTIBLE(\7f213,7257
+#define REGISTER_CONVERT_TO_RAW(\7f224,7572
+#define REGISTER_CONVERT_TO_VIRTUAL(\7f218,7391
+#define REGISTER_RAW_SIZE(\7f195,6806
+#define REGISTER_U_ADDR(\7f175,6068
+#define REGISTER_VIRTUAL_SIZE(\7f200,6959
+#define REGISTER_VIRTUAL_TYPE(\7f230,7740
#define SAVED_PC_AFTER_CALL(\7f97,3393
#define SKIP_PROLOGUE(\7f71,2233
-#define STORE_RETURN_VALUE(\7f236,7790
-#define STORE_STRUCT_RETURN(\7f223,7347
-#define vprintf(\7f247,8229
+#define STORE_RETURN_VALUE(\7f248,8370
+#define STORE_STRUCT_RETURN(\7f235,7927
+#define my_offsetof(\7f105,3692
+#define vprintf(\7f259,8809
\f
m-symmetry.h,1043
#define ABOUT_TO_RETURN(\7f100,3009
#define STORE_STRUCT_RETURN(\7f340,10541
#define vprintf(\7f366,11512
\f
-m-convex.h,1213
-#define ABOUT_TO_RETURN(\7f161,5350
-#define EXTRACT_RETURN_VALUE(\7f289,9422
-#define EXTRACT_STRUCT_VALUE_ADDRESS(\7f304,10016
-#define FIX_CALL_DUMMY(\7f558,20262
-#define FRAMELESS_FUNCTION_INVOCATION(\7f377,12561
-#define FRAME_ARGS_ADDRESS(\7f387,12923
-#define FRAME_CHAIN(\7f362,11985
-#define FRAME_CHAIN_COMBINE(\7f367,12172
-#define FRAME_CHAIN_VALID(\7f364,12055
-#define FRAME_FIND_SAVED_REGS(\7f416,14210
-#define FRAME_LOCALS_ADDRESS(\7f389,12999
-#define FRAME_NUM_ARGS(\7f394,13136
-#define FRAME_SAVED_PC(\7f385,12856
-#define IGNORE_SYMBOL(\7f60,1833
-#define INVALID_FLOAT(\7f166,5500
-#define READ_FILE_HEADERS(\7f579,20967
-#define READ_STRING_TABLE_SIZE(\7f571,20792
-#define REGISTER_BYTE(\7f234,7698
-#define REGISTER_CONVERTIBLE(\7f259,8404
-#define REGISTER_CONVERT_TO_RAW(\7f270,8745
-#define REGISTER_CONVERT_TO_VIRTUAL(\7f264,8538
-#define REGISTER_RAW_SIZE(\7f241,7944
-#define REGISTER_VIRTUAL_SIZE(\7f246,8087
-#define REGISTER_VIRTUAL_TYPE(\7f276,8938
-#define SAVED_PC_AFTER_CALL(\7f119,3872
-#define SKIP_PROLOGUE(\7f95,2894
-#define STAB_REG_TO_REGNUM(\7f213,7014
-#define STORE_RETURN_VALUE(\7f297,9704
-#define STORE_STRUCT_RETURN(\7f282,9175
-#define is_arith_pc(\7f134,4501
-#define is_break_pc(\7f135,4575
-#define is_trace_pc(\7f133,4427
-#define vprintf(\7f309,10198
+m-convex.h,1245
+#define ABOUT_TO_RETURN(\7f169,5578
+#define EXTRACT_RETURN_VALUE(\7f297,9649
+#define EXTRACT_STRUCT_VALUE_ADDRESS(\7f312,10243
+#define FIX_CALL_DUMMY(\7f566,20487
+#define FRAMELESS_FUNCTION_INVOCATION(\7f385,12786
+#define FRAME_ARGS_ADDRESS(\7f395,13148
+#define FRAME_CHAIN(\7f370,12212
+#define FRAME_CHAIN_COMBINE(\7f375,12399
+#define FRAME_CHAIN_VALID(\7f372,12282
+#define FRAME_FIND_SAVED_REGS(\7f424,14435
+#define FRAME_LOCALS_ADDRESS(\7f397,13224
+#define FRAME_NUM_ARGS(\7f402,13361
+#define FRAME_SAVED_PC(\7f393,13081
+#define IGNORE_SYMBOL(\7f61,1855
+#define IGNORE_SYMBOL(\7f66,2028
+#define INVALID_FLOAT(\7f174,5728
+#define READ_FILE_HEADERS(\7f587,21192
+#define READ_STRING_TABLE_SIZE(\7f579,21017
+#define REGISTER_BYTE(\7f242,7925
+#define REGISTER_CONVERTIBLE(\7f267,8631
+#define REGISTER_CONVERT_TO_RAW(\7f278,8972
+#define REGISTER_CONVERT_TO_VIRTUAL(\7f272,8765
+#define REGISTER_RAW_SIZE(\7f249,8171
+#define REGISTER_VIRTUAL_SIZE(\7f254,8314
+#define REGISTER_VIRTUAL_TYPE(\7f284,9165
+#define SAVED_PC_AFTER_CALL(\7f127,4104
+#define SKIP_PROLOGUE(\7f103,3126
+#define STAB_REG_TO_REGNUM(\7f221,7242
+#define STORE_RETURN_VALUE(\7f305,9931
+#define STORE_STRUCT_RETURN(\7f290,9402
+#define is_arith_pc(\7f142,4731
+#define is_break_pc(\7f143,4805
+#define is_trace_pc(\7f141,4657
+#define vprintf(\7f317,10425
\f
obstack.h,1102
#define __INT_TO_PTR(\7f121,5178
/* Finds the "function" (text symbol) that is smaller than PC
but greatest of all of the potential text symbols. Sets
*NAME and/or *ADDRESS conditionally if that pointer is non-zero.
- Returns 0 if it couldn't find anything, 1 if it did. */
+ Returns 0 if it couldn't find anything, 1 if it did.
+
+ Note that there are several possible responses:
+ * Set *NAME and *ADDRESS to nonzero values and return 0
+ * Set *NAME and *ADDRESS to zero and return 0
+ * Don't set *NAME and *ADDRESS and return 1
+ (I don't know whether it *should* work this way, but I'd rather
+ document it than risk breaking code
+ which depends on this behavior). */
int
find_pc_partial_function (pc, name, address)
The \"display\" subcommand applies to auto-displays instead of breakpoints.",
&disablelist, "disable ", 1, &cmdlist);
add_com_alias ("dis", "disable", class_breakpoint, 1);
+ add_com_alias ("disa", "disable", class_breakpoint, 1);
add_abbrev_cmd ("breakpoints", class_breakpoint, disable_command,
"Disable some breakpoints or auto-display expressions.\n\
if (num_symbols == 0)
{
free_all_symtabs ();
- printf ("%s does not have a symbol-table.\n", name);
- fflush (stdout);
- return;
+ error ("%s does not have a symbol-table.\n", name);
}
printf ("Reading symbol data from %s...", name);
/* Make a default for file to list. */
- select_source_symtab (symtab_list);
+ select_source_symtab (0);
symfile = savestring (name, strlen (name));
sun2)
case $os in
os4|sunos4)
- $machine=sun2os4
- $os=""
+ machine=sun2os4
+ os=""
;;
os2|sunos2)
- $machine=sun2os2
- $os=""
+ machine=sun2os2
+ os=""
;;
esac
;;
sun3)
case $os in
os4|sunos4)
- $machine=sun3os4
- $os=""
+ machine=sun3os4
+ os=""
;;
os3|sunos3)
- $machine=sun3os3
- $os=""
+ machine=sun3os3
+ os=""
;;
esac
;;
sparc|sun4)
case $os in
os4|sunos4)
- $machine=sun4os4
- $os=""
+ machine=sun4os4
+ os=""
;;
esac
;;
+# GCC accepts sequent-i386 or symmetry, so be consistent.
+sequent-i386)
+ machine=symmetry
+ os=""
+ ;;
esac
paramfile=m-${machine}${os}.h
;;
vax)
echo
- echo "/bin/cc has been known to fail on readline.c on VAXen running BSD4.3"
+# The following types of /bin/cc failures have been observed:
+# 1. Something in readline.c which I have never seen
+# 2. ``"values.c", line 816: compiler error: schain botch''
+ echo "/bin/cc has been known to fail on VAXen running BSD4.3"
echo "If this occurs, use gcc "
echo " (but see comments in Makefile.dist about compiling with gcc)."
echo
# of this file about unneeded files.
opcodefile=m-i386.h
;;
-i386-sysv3.2)
+# These names are short and cryptic due to the @#$#!@#$@! System V
+# 14 character file name limit.
+i386-sv32)
makedefine="-DM_CLIBS=-lPW -DM_SYSV -DM_REGEX=regex.o"
pinsnfile=i386-pinsn.c
depfile=i386-dep.c
- opcodefile=/dev/null
+# The following is a lie, but a necessary one. See comment at beginning
+# of this file about unneeded files.
+ opcodefile=m-i386.h
;;
-i386gas-sysv3.2)
+i386g-sv32)
makedefine="-DM_CLIBS=-lPW -DM_SYSV -DM_REGEX=regex.o"
echo
echo "Use of the coff encapsulation features requires the GNU binary utilities"
echo
pinsnfile=i386-pinsn.c
depfile=i386-dep.c
- opcodefile=/dev/null
+# The following is a lie, but a necessary one. See comment at beginning
+# of this file about unneeded files.
+ opcodefile=m-i386.h
;;
merlin)
pinsnfile=ns32k-pinsn.c
depfile=sparc-dep.c
;;
symmetry)
+ paramfile=m-symmetry.h
+ depfile=symmetry-dep.c
pinsnfile=i386-pinsn.c
-# Need *some* opcode file to keep make from trying to make opcode.h
- opcodefile=/dev/null
+# The following is a lie, but a necessary one. See comment at beginning
+# of this file about unneeded files.
+ opcodefile=m-i386.h
;;
umax)
pinsnfile=ns32k-pinsn.c
CORE_ADDR exec_data_start;
CORE_ADDR exec_data_end;
-/* Address in executable file of start of text area data. */
+/* Offset within executable file of start of text area data. */
int text_offset;
-/* Address in executable file of start of data area data. */
+/* Offset within executable file of start of data area data. */
int exec_data_offset;
-/* Address in core file of start of data area data. */
+/* Offset within core file of start of data area data. */
int data_offset;
-/* Address in core file of start of stack area data. */
+/* Offset within core file of start of stack area data. */
int stack_offset;
profile_types[i] = 0;
#endif
+ stringtab_global = stringtab;
+
pst = (struct partial_symtab *) 0;
includes_allocated = 30;
p = (char *) index (namestring, ':');
- /* Skip if there is no : or if the thing following the : is
- not a letter (which indicates declaration of a local
- variable, which we aren't interested in). */
+ /* Skip if there is no :. */
if (!p) continue;
switch (p[1])
ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
STRUCT_NAMESPACE, LOC_TYPEDEF,
static_psymbols, bufp->n_value);
- continue;
+ goto check_enum;
case 't':
ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
VAR_NAMESPACE, LOC_TYPEDEF,
static_psymbols, bufp->n_value);
+ check_enum:
+ /* If this is an enumerated type, we need to
+ add all the enum constants to the partial symbol
+ table. This does not cover enums without names, e.g.
+ "enum {a, b} c;" in C, but fortunately those are
+ rare. There is no way for GDB to find those from the
+ enum type without spending too much time on it. Thus
+ to solve this problem, the compiler needs to put out separate
+ constant symbols ('c' N_LSYMS) for enum constants in
+ enums without names. */
+
+ /* We are looking for something of the form
+ <name> ":" ("t" | "T") [<number> "="] "e"
+ {<constant> ":" <value> ","} ";". */
+
+ /* Skip over the colon and the 't' or 'T'. */
+ p += 2;
+ /* This type may be given a number. Skip over it. */
+ while ((*p >= '0' && *p <= '9')
+ || *p == '=')
+ p++;
+
+ if (*p++ == 'e')
+ {
+ /* We have found an enumerated type. */
+ /* According to comments in read_enum_type
+ a comma could end it instead of a semicolon.
+ I don't know where that happens.
+ Accept either. */
+ while (*p && *p != ';' && *p != ',')
+ {
+ char *q;
+
+ /* Check for and handle cretinous dbx symbol name
+ continuation! */
+ if (*p == '\\')
+ p = next_symbol_text ();
+
+ /* Point to the character after the name
+ of the enum constant. */
+ for (q = p; *q && *q != ':'; q++)
+ ;
+ /* Note that the value doesn't matter for
+ enum constants in psymtabs, just in symtabs. */
+ ADD_PSYMBOL_TO_LIST (p, q - p,
+ VAR_NAMESPACE, LOC_CONST,
+ static_psymbols, 0);
+ /* Point past the name. */
+ p = q;
+ /* Skip over the value. */
+ while (*p && *p != ',')
+ p++;
+ /* Advance past the comma. */
+ if (*p)
+ p++;
+ }
+ }
+
+ continue;
+ case 'c':
+ /* Constant, e.g. from "const" in Pascal. */
+ ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+ VAR_NAMESPACE, LOC_CONST,
+ static_psymbols, bufp->n_value);
continue;
default:
#ifdef PROFILE_TYPES
printf ("Funny...LSYM with a letter that isn't a type\n");
autovars++;
#endif
+ /* Skip if the thing following the : is
+ not a letter (which indicates declaration of a local
+ variable, which we aren't interested in). */
continue;
}
case N_FUN:
+#if 0
+ /* This special-casing of N_FUN is just wrong; N_FUN
+ does not mean "function"; it means "text segment".
+ So N_FUN can go with 'V', etc. as well as 'f' or 'F'. */
+
SET_NAMESTRING();
p = (char *) index (namestring, ':');
static_psymbols, bufp->n_value);
continue;
-
+#endif /* 0 */
case N_GSYM: /* Global (extern) variable; can be
data or bss (sigh). */
case N_STSYM: /* Data seg var -- static */
global_psymbols, bufp->n_value);
continue;
- /* I don't think the default case should happen. A breakpoint
- here to check would probably be good. */
- default:
+ case 'f':
+ ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+ VAR_NAMESPACE, LOC_BLOCK,
+ static_psymbols, bufp->n_value);
+ continue;
+
/* Two things show up here (hopefully); static symbols of
local scope (static used inside braces) or extensions
of structure symbols. We can ignore both. */
- if (p[1] != 'V' && p[1] != '('
- && (p[1] < '0' || p[1] > '9'))
- fatal ("Internal error: Unexpected debugging symbol type '%c' at symnum %d.\n",
- p[1], symnum);
+ case 'V':
+ case '(':
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ /* Global functions are ignored here. I'm not
+ sure what psymtab they go into (or just the misc
+ function vector). */
+ case 'F':
continue;
+
+ default:
+ fatal ("Internal error: Unexpected debugging symbol type '%c' at symnum %d.\n",
+ p[1], symnum);
}
#ifdef N_BINCL
printf ("done.\n");
fflush (stdout);
}
+\f
+/* Read a number by which a type is referred to in dbx data,
+ or perhaps read a pair (FILENUM, TYPENUM) in parentheses.
+ Just a single number N is equivalent to (0,N).
+ Return the two numbers by storing them in the vector TYPENUMS.
+ TYPENUMS will then be used as an argument to dbx_lookup_type. */
+
+static void
+read_type_number (pp, typenums)
+ register char **pp;
+ register int *typenums;
+{
+ if (**pp == '(')
+ {
+ (*pp)++;
+ typenums[0] = read_number (pp, ',');
+ typenums[1] = read_number (pp, ')');
+ }
+ else
+ {
+ typenums[0] = 0;
+ typenums[1] = read_number (pp, 0);
+ }
+}
+
+
\f
static struct symbol *
define_symbol (value, string, desc)
/* c is a special case, not followed by a type-number.
SYMBOL:c=iVALUE for an integer constant symbol.
- SYMBOL:c=rVALUE for a floating constant symbol. */
+ SYMBOL:c=rVALUE for a floating constant symbol.
+ SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
+ e.g. "b:c=e6,0" for "const b = blob1"
+ (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */
if (deftype == 'c')
{
if (*p++ != '=')
SYMBOL_CLASS (sym) = LOC_CONST;
}
break;
+ case 'e':
+ /* SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
+ e.g. "b:c=e6,0" for "const b = blob1"
+ (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */
+ {
+ int typenums[2];
+
+ read_type_number (&p, typenums);
+ if (*p++ != ',')
+ error ("Invalid symbol data: no comma in enum const symbol");
+
+ SYMBOL_TYPE (sym) = *dbx_lookup_type (typenums);
+ SYMBOL_VALUE (sym) = atoi (p);
+ SYMBOL_CLASS (sym) = LOC_CONST;
+ }
+ break;
default:
error ("Invalid symbol data at symtab pos %d.", symnum);
}
SYMBOL_VALUE (sym) = value;
SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
add_symbol_to_list (sym, &local_symbols);
+
/* If it's compiled, if it says `short', believe it. */
if (processing_gcc_compilation || BELIEVE_PCC_PROMOTION)
break;
+
+#if defined(BELIEVE_PCC_PROMOTION_TYPE)
+ /* This macro is defined on machines (e.g. sparc) where
+ we should believe the type of a PCC 'short' argument,
+ but shouldn't believe the address (the address is
+ the address of the corresponding int). Note that
+ this is only different from the BELIEVE_PCC_PROMOTION
+ case on big-endian machines.
+
+ My guess is that this correction, as opposed to changing
+ the parameter to an 'int' (as done below, for PCC
+ on most machines), is the right thing to do
+ on all machines, but I don't want to risk breaking
+ something that already works. On most PCC machines,
+ the sparc problem doesn't come up because the calling
+ function has to zero the top bytes (not knowing whether
+ the called function wants an int or a short), so there
+ is no practical difference between an int and a short
+ (except perhaps what happens when the GDB user types
+ "print short_arg = 0x10000;"). */
+ if (SYMBOL_TYPE (sym) == builtin_type_char
+ || SYMBOL_TYPE (sym) == builtin_type_unsigned_char)
+ SYMBOL_VALUE (sym) += 3;
+ if (SYMBOL_TYPE (sym) == builtin_type_short
+ || SYMBOL_TYPE (sym) == builtin_type_unsigned_short)
+ SYMBOL_VALUE (sym) += 2;
+ break;
+
+#else /* no BELIEVE_PCC_PROMOTION_TYPE. */
+
/* If PCC says a parameter is a short or a char,
it is really an int. */
if (SYMBOL_TYPE (sym) == builtin_type_char
SYMBOL_TYPE (sym) = builtin_type_unsigned_int;
break;
+#endif /* no BELIEVE_PCC_PROMOTION_TYPE. */
+
case 'P':
SYMBOL_CLASS (sym) = LOC_REGPARM;
SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (value);
\f
-/* Read a number by which a type is referred to in dbx data,
- or perhaps read a pair (FILENUM, TYPENUM) in parentheses.
- Just a single number N is equivalent to (0,N).
- Return the two numbers by storing them in the vector TYPENUMS.
- TYPENUMS will then be used as an argument to dbx_lookup_type. */
-
-static void
-read_type_number (pp, typenums)
- register char **pp;
- register int *typenums;
-{
- if (**pp == '(')
- {
- (*pp)++;
- typenums[0] = read_number (pp, ',');
- typenums[1] = read_number (pp, ')');
- }
- else
- {
- typenums[0] = 0;
- typenums[1] = read_number (pp, 0);
- }
-}
-
/* Read a dbx type reference or definition;
return the type that is meant.
This can be just a number, in which case it references
list->field.bitpos = read_number (pp, ',');
list->field.bitsize = read_number (pp, ';');
+#if 0
+ /* This is wrong because this is identical to the symbols
+ produced for GCC 0-size arrays. For example:
+ typedef union {
+ int num;
+ char str[0];
+ } foo;
+ The code which dumped core in such circumstances should be
+ fixed not to dump core. */
+
/* g++ -g0 can put out bitpos & bitsize zero for a static
field. This does not give us any way of getting its
class, so we can't know its name. But we can just
list = list->next;
}
else
+#endif /* 0 */
{
/* Detect an unpacked field and mark it as such.
dbx gives a bit size for all fields.
{
errno = 0;
#if 0
-This is now done by read_memory, because when this function did it,
- reading a byte or short int hardware port read whole longs, causing
- serious side effects
- such as bus errors and unexpected hardware operation. This would
- also be a problem with ptrace if the inferior process could read
- or write hardware registers, but that's not usually the case.
+ /* This is now done by read_memory, because when this function did it,
+ reading a byte or short int hardware port read whole longs, causing
+ serious side effects
+ such as bus errors and unexpected hardware operation. This would
+ also be a problem with ptrace if the inferior process could read
+ or write hardware registers, but that's not usually the case. */
if (remote_debugging)
buffer[i] = remote_fetch_word (addr);
-#endif
else
+#endif
buffer[i] = ptrace (1, inferior_pid, addr, 0);
if (errno)
return errno;
perror_with_name ("Not a core file: reading upage");
if (val != sizeof u)
error ("Not a core file: could only read %d bytes", val);
+
+ /* We are depending on exec_file_command having been called
+ previously to set exec_data_start. Since the executable
+ and the core file share the same text segment, the address
+ of the data segment will be the same in both. */
data_start = exec_data_start;
data_end = data_start + NBPG * u.u_dsize;
lval_memory);
else if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_INT)
/* GDB allows dereferencing an int. */
- return value_zero (BUILTIN_TYPE_LONGEST, lval_memory);
+ return value_zero (builtin_type_int, lval_memory);
else
error ("Attempt to take contents of a non-pointer value.");
}
/* In stack.c */
extern FRAME find_relative_frame ();
+/* Generic pointer value indicating "I don't know." */
+#define Frame_unknown (CORE_ADDR)-1
@sp 1
@center The GNU Source-Level Debugger
@sp 4
-@center Third Edition, GDB version 3.2
+@center Third Edition, GDB version 3.4
@sp 1
-@center April 1989
+@center October 1989
@sp 5
@center Richard M. Stallman
@page
GDB no longer supports the debugging information produced by giving the
GNU C compiler the @samp{-gg} option, so do not use this option.
+@ignore
+@comment As far as I know, there are no cases in which GDB will
+@comment produce strange output in this case. (but no promises).
If your program includes archives made with the @code{ar} program, and
if the object files used as input to @code{ar} were compiled without the
@samp{-g} option and have names longer than 15 characters, GDB will get
To avoid this problem, compile the archive members with the @samp{-g}
option or use shorter file names. Alternatively, use a version of GNU
@code{ar} dated more recently than August 1989.
+@end ignore
@node Running, Stopping, Compilation, Top
@chapter Running Your Program Under GDB
@node Remote, Commands, Emacs, Top
@chapter Remote Kernel Debugging
-GDB has a special facility for debugging a remote machine via a serial
-connection. This can be used for kernel debugging.
+If you are trying to debug a program running on a machine that can't run
+GDB in the usual way, it is often useful to use remote debugging. For
+example, you might be debugging an operating system kernel, or debugging
+a small system which does not have a general purpose operating system
+powerful enough to run a full-featured debugger. Currently GDB supports
+remote debugging over a serial connection.
The program to be debugged on the remote machine needs to contain a
debugging device driver which talks to GDB over the serial line using the
protocol described below. The same version of GDB that is used ordinarily
-can be used for this.
+can be used for this. Several sample remote debugging drivers are
+distributed with GDB; see the @file{README} file in the GDB distribution for
+more information.
@menu
* Remote Commands:: Commands used to start and finish remote debugging.
-In other words, go ahead and share GDB, but don't try to stop
-anyone else from sharing it farther. Help stamp out software hoarding!
-*/
+/* Machine-dependent code for a Hewlett-Packard 9000/300, running bsd.
+ Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+GDB is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GDB is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GDB; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "defs.h"
#include "param.h"
return (-1);
}
+/* Return number of args passed to a frame.
+ Can return -1, meaning no way to tell. */
+
+/* on the 386, the instruction following the call could be:
+ * popl %ecx - one arg
+ * addl $imm, %esp - imm/4 args; imm may be 8 or 32 bits
+ * anything else - zero args
+ */
+
+int
+i386_frame_num_args (fi)
+ struct frame_info fi;
+{
+ int retpc;
+ unsigned char op;
+ struct frame_info *pfi;
+
+ pfi = get_prev_frame_info ((fi));
+ if (pfi == 0)
+ {
+ /* Note: this can happen if we are looking at the frame for
+ main, because FRAME_CHAIN_VALID won't let us go into
+ start. If we have debugging symbols, that's not really
+ a big deal; it just means it will only show as many arguments
+ to main as are declared. */
+ return -1;
+ }
+ else
+ {
+ retpc = pfi->pc;
+ op = read_memory_integer (retpc, 1);
+ if (op == 0x59)
+ /* pop %ecx */
+ return 1;
+ else if (op == 0x83)
+ {
+ op = read_memory_integer (retpc+1, 1);
+ if (op == 0xc4)
+ /* addl $<signed imm 8 bits>, %esp */
+ return (read_memory_integer (retpc+2,1)&0xff)/4;
+ else
+ return 0;
+ }
+ else if (op == 0x81)
+ { /* add with 32 bit immediate */
+ op = read_memory_integer (retpc+1, 1);
+ if (op == 0xc4)
+ /* addl $<imm 32>, %esp */
+ return read_memory_integer (retpc+2, 4) / 4;
+ else
+ return 0;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+}
+
/*
* parse the first few instructions of the function to see
* what registers were stored.
set_current_frame (0);
}
\f
+#if 0
+/* This function is just for testing, and on some systems (Sony NewsOS
+ 3.2) <sys/user.h> also includes <sys/time.h> which leads to errors
+ (since on this system at least sys/time.h is not protected against
+ multiple inclusion). */
static void
try_writing_regs_command ()
{
if (inferior_pid == 0)
error ("There is no inferior process now.");
- for (i = 0; ; i += 2)
+ /* A Sun 3/50 or 3/60 (at least) running SunOS 4.0.3 will have a
+ kernel panic if we try to write past the end of the user area.
+ Presumably Sun will fix this bug (it has been reported), but it
+ is tacky to crash the system, so at least on SunOS4 we need to
+ stop writing when we hit the end of the user area. */
+ for (i = 0; i < sizeof (struct user); i += 2)
{
QUIT;
errno = 0;
printf (" Failed at 0x%x.\n", i);
}
}
+#endif
\f
void
_initialize_inflow ()
add_com ("term-status", class_obscure, term_status_command,
"Print info on inferior's saved terminal status.");
+#if 0
add_com ("try-writing-regs", class_obscure, try_writing_regs_command,
"Try writing all locations in inferior's system block.\n\
Report which ones can be written.");
+#endif
add_com ("kill", class_run, kill_command,
"Kill execution of program being debugged.");
#include <sys/ptrace.h>
#endif /* UMAX_PTRACE */
+/* Required by <sys/user.h>. */
+#include <sys/types.h>
+/* Required by <sys/user.h>, at least on system V. */
+#include <sys/dir.h>
+/* Needed by IN_SIGTRAMP on some machines (e.g. vax). */
+#include <sys/param.h>
+/* Needed by IN_SIGTRAMP on some machines (e.g. vax). */
+#include <sys/user.h>
+
extern char *sys_siglist[];
extern int errno;
+/* Sigtramp is a routine that the kernel calls (which then calls the
+ signal handler). On most machines it is a library routine that
+ is linked into the executable.
+
+ This macro, given a program counter value and the name of the
+ function in which that PC resides (which can be null if the
+ name is not known), returns nonzero if the PC and name show
+ that we are in sigtramp.
+
+ On most machines just see if the name is sigtramp (and if we have
+ no name, assume we are not in sigtramp). */
+#if !defined (IN_SIGTRAMP)
+#define IN_SIGTRAMP(pc, name) \
+ name && !strcmp ("_sigtramp", name)
+#endif
+
/* Tables of how to react to signals; the user sets them. */
static char signal_stop[NSIG];
stop_frame_address = FRAME_FP (get_current_frame ());
stop_sp = read_register (SP_REGNUM);
stop_func_start = 0;
- /* Don't care about return value; stop_func_start will be 0
- if it doesn't work. */
+ stop_func_name = 0;
+ /* Don't care about return value; stop_func_start and stop_func_name
+ will both be 0 if it doesn't work. */
(void) find_pc_partial_function (stop_pc, &stop_func_name,
&stop_func_start);
stop_func_start += FUNCTION_START_OFFSET;
}
/* Did we just take a signal? */
- if (stop_func_name && !strcmp ("_sigtramp", stop_func_name)
- && (!prev_func_name || strcmp ("_sigtramp", prev_func_name)))
+ if (IN_SIGTRAMP (stop_pc, stop_func_name)
+ && !IN_SIGTRAMP (prev_pc, prev_func_name))
{
/* We've just taken a signal; go until we are back to
the point where we took it and one more. */
--- /dev/null
+/* Low level interface to ptrace, for GDB when running under Unix.
+ Copyright (C) 1988 Free Software Foundation, Inc.
+
+GDB is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY. No author or distributor accepts responsibility to anyone
+for the consequences of using it or for whether it serves any
+particular purpose or works at all, unless he says so in writing.
+Refer to the GDB General Public License for full details.
+
+Everyone is granted permission to copy, modify and redistribute GDB,
+but only under the conditions described in the GDB General Public
+License. A copy of this license is supposed to have been given to you
+along with GDB so you can know your rights and responsibilities. It
+should be in a file named COPYING. Among other things, the copyright
+notice and this notice must be preserved on all copies.
+
+In other words, go ahead and share GDB, but don't try to stop
+anyone else from sharing it farther. Help stamp out software hoarding!
+*/
+
+#include "defs.h"
+#include "param.h"
+#include "frame.h"
+#include "inferior.h"
+
+#ifdef USG
+#include <sys/types.h>
+#endif
+
+#include <stdio.h>
+#include <sys/param.h>
+#include <sys/dir.h>
+#include <signal.h>
+#include <sys/user.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+
+#ifdef COFF_ENCAPSULATE
+#include "a.out.encap.h"
+#else
+#include <a.out.h>
+#endif
+#ifndef N_SET_MAGIC
+#define N_SET_MAGIC(exec, val) ((exec).a_magic = (val))
+#endif
+#include <sys/file.h>
+#include <sys/stat.h>
+
+#include <sys/ptrace.h>
+#ifdef ATTACH_DETACH
+static int oldParent;
+extern int attach_flag;
+#endif /* ATTACH_DETACH */
+
+/*
+ * Mapping of register numbers to their position in the stack
+ */
+#include <machine/reg.h>
+int rloc[] = {
+ R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, FP, SP, PS, PC
+};
+
+extern int errno;
+\f
+/* This function simply calls ptrace with the given arguments.
+ It exists so that all calls to ptrace are isolated in this
+ machine-dependent file. */
+int
+call_ptrace (request, pid, arg3, arg4)
+ int request, pid, arg3, arg4;
+{
+ return ptrace (request, pid, arg3, arg4);
+}
+
+#ifdef ATTACH_DETACH
+/* Start debugging the process whose number is PID. */
+
+attach (pid)
+ int pid;
+{
+ errno = 0;
+ oldParent = ptrace (PT_ATTACH, pid, 0, 0);
+ if (errno)
+ perror_with_name ("ptrace");
+ attach_flag = 1;
+ return pid;
+}
+
+/* Stop debugging the process whose number is PID
+ and continue it with signal number SIGNAL.
+ SIGNAL = 0 means just continue it. */
+
+void
+detach (signal)
+ int signal;
+{
+ errno = 0;
+ ptrace (PT_DETACH, inferior_pid, signal, oldParent);
+ if (errno)
+ perror_with_name ("ptrace");
+ attach_flag = 0;
+}
+
+#endif /* ATTACH_DETACH */
+
+kill_inferior ()
+{
+ if (remote_debugging)
+ return;
+ if (inferior_pid == 0)
+ return;
+
+#ifdef ATTACH_DETACH
+ if (attach_flag) {
+ /*
+ * Need to detach so the old parent gets notified of the death.
+ */
+ detach(SIGKILL);
+ } else {
+#endif /* ATTACH_DETACH */
+ ptrace (PT_KILL, inferior_pid, 0, 0);
+ wait (0);
+#ifdef ATTACH_DETACH
+ }
+#endif /* ATTACH_DETACH */
+ inferior_died ();
+}
+
+/* This is used when GDB is exiting. It gives less chance of error.*/
+
+kill_inferior_fast ()
+{
+ if (remote_debugging)
+ return;
+ if (inferior_pid == 0)
+ return;
+#ifdef ATTACH_DETACH
+ if (attach_flag) {
+ detach(SIGKILL);
+ } else {
+#endif /* ATTACH_DETACH */
+ ptrace (PT_KILL, inferior_pid, 0, 0);
+ wait (0);
+#ifdef ATTACH_DETACH
+ }
+#endif /* ATTACH_DETACH */
+}
+
+/* Resume execution of the inferior process.
+ If STEP is nonzero, single-step it.
+ If SIGNAL is nonzero, give it that signal. */
+
+void
+resume (step, signal)
+ int step;
+ int signal;
+{
+ errno = 0;
+ if (remote_debugging)
+ remote_resume (step, signal);
+ else
+ {
+ ptrace (step ? PT_STEP : PT_CONTINUE, inferior_pid, 1, signal);
+ if (errno)
+ perror_with_name ("ptrace");
+ }
+}
+\f
+void
+fetch_inferior_registers ()
+{
+ register int regno;
+ register unsigned int regaddr;
+ char buf[MAX_REGISTER_RAW_SIZE];
+ register int i;
+
+ struct user u;
+ unsigned int offset = (char *) &u.u_ar0 - (char *) &u;
+ offset = ptrace (3, inferior_pid, offset, 0) - KERNEL_U_ADDR;
+
+ for (regno = 0; regno < NUM_REGS; regno++)
+ {
+ regaddr = register_addr (regno, offset);
+ for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int))
+ {
+ *(int *) &buf[i] = ptrace (3, inferior_pid, regaddr, 0);
+ regaddr += sizeof (int);
+ }
+ supply_register (regno, buf);
+ }
+}
+
+/* Store our register values back into the inferior.
+ If REGNO is -1, do this for all registers.
+ Otherwise, REGNO specifies which register (so we can save time). */
+
+store_inferior_registers (regno)
+ int regno;
+{
+ register unsigned int regaddr;
+ char buf[80];
+
+ struct user u;
+ unsigned int offset = (char *) &u.u_ar0 - (char *) &u;
+ offset = ptrace (3, inferior_pid, offset, 0) - KERNEL_U_ADDR;
+
+ if (regno >= 0)
+ {
+ regaddr = register_addr (regno, offset);
+ errno = 0;
+ ptrace (6, inferior_pid, regaddr, read_register (regno));
+ if (errno != 0)
+ {
+ sprintf (buf, "writing register number %d", regno);
+ perror_with_name (buf);
+ }
+ }
+ else for (regno = 0; regno < NUM_REGS; regno++)
+ {
+ regaddr = register_addr (regno, offset);
+ errno = 0;
+ ptrace (6, inferior_pid, regaddr, read_register (regno));
+ if (errno != 0)
+ {
+ sprintf (buf, "writing register number %d", regno);
+ perror_with_name (buf);
+ }
+ }
+}
+\f
+/* Copy LEN bytes from inferior's memory starting at MEMADDR
+ to debugger memory starting at MYADDR.
+ On failure (cannot read from inferior, usually because address is out
+ of bounds) returns the value of errno. */
+
+int
+read_inferior_memory (memaddr, myaddr, len)
+ CORE_ADDR memaddr;
+ char *myaddr;
+ int len;
+{
+ register int i;
+ /* Round starting address down to longword boundary. */
+ register CORE_ADDR addr = memaddr & - sizeof (int);
+ /* Round ending address up; get number of longwords that makes. */
+ register int count
+ = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
+ /* Allocate buffer of that many longwords. */
+ register int *buffer = (int *) alloca (count * sizeof (int));
+ extern int errno;
+
+ /* Read all the longwords */
+ for (i = 0; i < count; i++, addr += sizeof (int))
+ {
+ errno = 0;
+ if (remote_debugging)
+ buffer[i] = remote_fetch_word (addr);
+ else
+ buffer[i] = ptrace (1, inferior_pid, addr, 0);
+ if (errno)
+ return errno;
+ }
+
+ /* Copy appropriate bytes out of the buffer. */
+ bcopy ((char *) buffer + (memaddr & (sizeof (int) - 1)), myaddr, len);
+ return 0;
+}
+
+/* Copy LEN bytes of data from debugger memory at MYADDR
+ to inferior's memory at MEMADDR.
+ On failure (cannot write the inferior)
+ returns the value of errno. */
+
+int
+write_inferior_memory (memaddr, myaddr, len)
+ CORE_ADDR memaddr;
+ char *myaddr;
+ int len;
+{
+ register int i;
+ /* Round starting address down to longword boundary. */
+ register CORE_ADDR addr = memaddr & - sizeof (int);
+ /* Round ending address up; get number of longwords that makes. */
+ register int count
+ = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
+ /* Allocate buffer of that many longwords. */
+ register int *buffer = (int *) alloca (count * sizeof (int));
+ extern int errno;
+
+ /* Fill start and end extra bytes of buffer with existing memory data. */
+
+ if (remote_debugging)
+ buffer[0] = remote_fetch_word (addr);
+ else
+ buffer[0] = ptrace (1, inferior_pid, addr, 0);
+
+ if (count > 1)
+ {
+ if (remote_debugging)
+ buffer[count - 1]
+ = remote_fetch_word (addr + (count - 1) * sizeof (int));
+ else
+ buffer[count - 1]
+ = ptrace (1, inferior_pid,
+ addr + (count - 1) * sizeof (int), 0);
+ }
+
+ /* Copy data to be written over corresponding part of buffer */
+
+ bcopy (myaddr, (char *) buffer + (memaddr & (sizeof (int) - 1)), len);
+
+ /* Write the entire buffer. */
+
+ for (i = 0; i < count; i++, addr += sizeof (int))
+ {
+ errno = 0;
+ if (remote_debugging)
+ remote_store_word (addr, buffer[i]);
+ else
+ ptrace (4, inferior_pid, addr, buffer[i]);
+ if (errno)
+ return errno;
+ }
+
+ return 0;
+}
+\f
+/* Work with core dump and executable files, for GDB.
+ This code would be in core.c if it weren't machine-dependent. */
+
+/* Recognize COFF format systems because a.out.h defines AOUTHDR. */
+#ifdef AOUTHDR
+#define COFF_FORMAT
+#endif
+
+#ifndef N_TXTADDR
+#define N_TXTADDR(hdr) 0
+#endif /* no N_TXTADDR */
+
+#ifndef N_DATADDR
+#define N_DATADDR(hdr) hdr.a_text
+#endif /* no N_DATADDR */
+
+/* Make COFF and non-COFF names for things a little more compatible
+ to reduce conditionals later. */
+
+#ifdef COFF_FORMAT
+#define a_magic magic
+#endif
+
+#ifndef COFF_FORMAT
+#define AOUTHDR struct exec
+#endif
+
+extern char *sys_siglist[];
+
+
+/* Hook for `exec_file_command' command to call. */
+
+extern void (*exec_file_display_hook) ();
+
+/* File names of core file and executable file. */
+
+extern char *corefile;
+extern char *execfile;
+
+/* Descriptors on which core file and executable file are open.
+ Note that the execchan is closed when an inferior is created
+ and reopened if the inferior dies or is killed. */
+
+extern int corechan;
+extern int execchan;
+
+/* Last modification time of executable file.
+ Also used in source.c to compare against mtime of a source file. */
+
+extern int exec_mtime;
+
+/* Virtual addresses of bounds of the two areas of memory in the core file. */
+
+extern CORE_ADDR data_start;
+extern CORE_ADDR data_end;
+extern CORE_ADDR stack_start;
+extern CORE_ADDR stack_end;
+
+/* Virtual addresses of bounds of two areas of memory in the exec file.
+ Note that the data area in the exec file is used only when there is no core file. */
+
+extern CORE_ADDR text_start;
+extern CORE_ADDR text_end;
+
+extern CORE_ADDR exec_data_start;
+extern CORE_ADDR exec_data_end;
+
+/* Address in executable file of start of text area data. */
+
+extern int text_offset;
+
+/* Address in executable file of start of data area data. */
+
+extern int exec_data_offset;
+
+/* Address in core file of start of data area data. */
+
+extern int data_offset;
+
+/* Address in core file of start of stack area data. */
+
+extern int stack_offset;
+
+#ifdef COFF_FORMAT
+/* various coff data structures */
+
+extern FILHDR file_hdr;
+extern SCNHDR text_hdr;
+extern SCNHDR data_hdr;
+
+#endif /* not COFF_FORMAT */
+
+/* a.out header saved in core file. */
+
+extern AOUTHDR core_aouthdr;
+
+/* a.out header of exec file. */
+
+extern AOUTHDR exec_aouthdr;
+
+extern void validate_files ();
+\f
+core_file_command (filename, from_tty)
+ char *filename;
+ int from_tty;
+{
+ int val;
+ extern char registers[];
+
+ /* Discard all vestiges of any previous core file
+ and mark data and stack spaces as empty. */
+
+ if (corefile)
+ free (corefile);
+ corefile = 0;
+
+ if (corechan >= 0)
+ close (corechan);
+ corechan = -1;
+
+ data_start = 0;
+ data_end = 0;
+ stack_start = STACK_END_ADDR;
+ stack_end = STACK_END_ADDR;
+
+ /* Now, if a new core file was specified, open it and digest it. */
+
+ if (filename)
+ {
+ filename = tilde_expand (filename);
+ make_cleanup (free, filename);
+
+ if (have_inferior_p ())
+ error ("To look at a core file, you must kill the inferior with \"kill\".");
+ corechan = open (filename, O_RDONLY, 0);
+ if (corechan < 0)
+ perror_with_name (filename);
+ /* 4.2-style (and perhaps also sysV-style) core dump file. */
+ {
+ struct user u;
+
+ int reg_offset;
+
+ val = myread (corechan, &u, sizeof u);
+ if (val < 0)
+ perror_with_name (filename);
+ data_start = exec_data_start;
+
+ data_end = data_start + NBPG * u.u_dsize;
+ stack_start = stack_end - NBPG * u.u_ssize;
+ data_offset = NBPG * UPAGES;
+ stack_offset = NBPG * (UPAGES + u.u_dsize);
+ reg_offset = (int) u.u_ar0 - KERNEL_U_ADDR;
+
+ /* I don't know where to find this info.
+ So, for now, mark it as not available. */
+ N_SET_MAGIC (core_aouthdr, 0);
+
+ /* Read the register values out of the core file and store
+ them where `read_register' will find them. */
+
+ {
+ register int regno;
+
+ for (regno = 0; regno < NUM_REGS; regno++)
+ {
+ char buf[MAX_REGISTER_RAW_SIZE];
+
+ val = lseek (corechan, register_addr (regno, reg_offset), 0);
+ if (val < 0)
+ perror_with_name (filename);
+
+ val = myread (corechan, buf, sizeof buf);
+ if (val < 0)
+ perror_with_name (filename);
+ supply_register (regno, buf);
+ }
+ }
+ }
+ if (filename[0] == '/')
+ corefile = savestring (filename, strlen (filename));
+ else
+ {
+ corefile = concat (current_directory, "/", filename);
+ }
+
+ set_current_frame ( create_new_frame (read_register (FP_REGNUM),
+ read_pc ()));
+ select_frame (get_current_frame (), 0);
+ validate_files ();
+ }
+ else if (from_tty)
+ printf ("No core file now.\n");
+}
+\f
+exec_file_command (filename, from_tty)
+ char *filename;
+ int from_tty;
+{
+ int val;
+
+ /* Eliminate all traces of old exec file.
+ Mark text segment as empty. */
+
+ if (execfile)
+ free (execfile);
+ execfile = 0;
+ data_start = 0;
+ data_end -= exec_data_start;
+ text_start = 0;
+ text_end = 0;
+ exec_data_start = 0;
+ exec_data_end = 0;
+ if (execchan >= 0)
+ close (execchan);
+ execchan = -1;
+
+ /* Now open and digest the file the user requested, if any. */
+
+ if (filename)
+ {
+ filename = tilde_expand (filename);
+ make_cleanup (free, filename);
+
+ execchan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0,
+ &execfile);
+ if (execchan < 0)
+ perror_with_name (filename);
+
+#ifdef COFF_FORMAT
+ {
+ int aout_hdrsize;
+ int num_sections;
+
+ if (read_file_hdr (execchan, &file_hdr) < 0)
+ error ("\"%s\": not in executable format.", execfile);
+
+ aout_hdrsize = file_hdr.f_opthdr;
+ num_sections = file_hdr.f_nscns;
+
+ if (read_aout_hdr (execchan, &exec_aouthdr, aout_hdrsize) < 0)
+ error ("\"%s\": can't read optional aouthdr", execfile);
+
+ if (read_section_hdr (execchan, _TEXT, &text_hdr, num_sections) < 0)
+ error ("\"%s\": can't read text section header", execfile);
+
+ if (read_section_hdr (execchan, _DATA, &data_hdr, num_sections) < 0)
+ error ("\"%s\": can't read data section header", execfile);
+
+ text_start = exec_aouthdr.text_start;
+ text_end = text_start + exec_aouthdr.tsize;
+ text_offset = text_hdr.s_scnptr;
+ exec_data_start = exec_aouthdr.data_start;
+ exec_data_end = exec_data_start + exec_aouthdr.dsize;
+ exec_data_offset = data_hdr.s_scnptr;
+ data_start = exec_data_start;
+ data_end += exec_data_start;
+ exec_mtime = file_hdr.f_timdat;
+ }
+#else /* not COFF_FORMAT */
+ {
+ struct stat st_exec;
+
+#ifdef HEADER_SEEK_FD
+ HEADER_SEEK_FD (execchan);
+#endif
+
+ val = myread (execchan, &exec_aouthdr, sizeof (AOUTHDR));
+
+ if (val < 0)
+ perror_with_name (filename);
+
+ text_start = N_TXTADDR (exec_aouthdr);
+ exec_data_start = N_DATADDR (exec_aouthdr);
+
+ text_offset = N_TXTOFF (exec_aouthdr);
+ exec_data_offset = N_TXTOFF (exec_aouthdr) + exec_aouthdr.a_text;
+
+ text_end = text_start + exec_aouthdr.a_text;
+ exec_data_end = exec_data_start + exec_aouthdr.a_data;
+ data_start = exec_data_start;
+ data_end += exec_data_start;
+
+ fstat (execchan, &st_exec);
+ exec_mtime = st_exec.st_mtime;
+ }
+#endif /* not COFF_FORMAT */
+
+ validate_files ();
+ }
+ else if (from_tty)
+ printf ("No exec file now.\n");
+
+ /* Tell display code (if any) about the changed file name. */
+ if (exec_file_display_hook)
+ (*exec_file_display_hook) (filename);
+}
/* Symbol types to ignore. */
+#if defined (N_MONPT)
#define IGNORE_SYMBOL(TYPE) \
- (((TYPE) & ~N_EXT) == N_TBSS || ((TYPE) & ~N_EXT) == N_TDATA)
+ (((TYPE) & ~N_EXT) == N_TBSS \
+ || ((TYPE) & ~N_EXT) == N_TDATA \
+ || ((TYPE) & ~N_EXT) == N_MONPT)
+#else /* no N_MONPT */
+#define IGNORE_SYMBOL(TYPE) \
+ (((TYPE) & ~N_EXT) == N_TBSS \
+ || ((TYPE) & ~N_EXT) == N_TDATA)
+#endif /* no N_MONPT */
/* Use SIGCONT rather than SIGTSTP because convex Unix occasionally
turkeys SIGTSTP. I think. */
#define SAVED_PC_AFTER_CALL(frame) \
read_memory_integer (read_register (SP_REGNUM), 4)
-/* Address of end of stack space.
+/* Address of end of stack space.
This is ((USRSTACK + 0xfff) & -0x1000)) from <convex/vmparam.h> but
that expression depends on the kernel version; instead, fetch a
page-zero pointer and get it from that. This will be invalid if
#define BREAKPOINT {0x7d,0x50}
/* Amount PC must be decremented by after a breakpoint.
- This is often the number of bytes in BREAKPOINT but not always.
+ This is often the number of bytes in BREAKPOINT but not always.
(The break PC needs to be decremented by 2, but we do it when the
break frame is recognized and popped. That way gdb can tell breaks
from trace traps with certainty.) */
#define REGISTER_BYTES (4*10 + 8*8)
/* Index within `registers' of the first byte of the space for
- register N.
+ register N.
NB: must match structure of struct syscall_context for correct operation */
#define REGISTER_BYTE(N) ((N) < s7_REGNUM ? 4*(N) : \
/* A macro that tells us whether the function invocation represented
by FI does not have a frame on the stack associated with it. If it
- does not, FRAMELESS is set to 1, else 0.
+ does not, FRAMELESS is set to 1, else 0.
On convex, check at the return address for `callq' -- if so, frameless,
otherwise, not. */
--- /dev/null
+/* Macro defintions for i386, running System V 3.2.
+ Copyright (C) 1989 Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+GDB is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GDB is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GDB; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include "m-i386.h"
+
+/* Apparently there is inconsistency among various System V's about what
+ the name of this field is. */
+#define U_FPSTATE(u) u.u_fps.u_fpstate
+
+/* TIOCGETC is defined in System V 3.2 termio.h, but struct tchars
+ is not. This makes problems for inflow.c. */
+#define TIOCGETC_BROKEN
+++ /dev/null
-/* Macro defintions for i386, running System V 3.2.
- Copyright (C) 1989 Free Software Foundation, Inc.
-
-This file is part of GDB.
-
-GDB is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 1, or (at your option)
-any later version.
-
-GDB is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GDB; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include "m-i386.h"
-
-/* Apparently there is inconsistency among various System V's about what
- the name of this field is. */
-#define U_FPSTATE(u) u.u_fps.u_fpstate
-
-/* TIOCGETC is defined in System V 3.2 termio.h, but struct tchars
- is not. This makes problems for inflow.c. */
-#define TIOCGETC_BROKEN
/* Return number of args passed to a frame.
Can return -1, meaning no way to tell. */
-/* on the 386, the instruction following the call could be:
- * popl %ecx - one arg
- * addl $imm, %esp - imm/4 args; imm may be 8 or 32 bits
- * anything else - zero args
- */
-#define FRAME_NUM_ARGS(numargs, fi) { \
- int retpc; \
- unsigned char op; \
- struct frame_info *pfi; \
- pfi = get_prev_frame_info ((fi)); \
- retpc = pfi->pc; \
- numargs = 0; \
- op = read_memory_integer (retpc, 1); \
- if (op == 0x59) \
- /* pop %ecx */ \
- (numargs) = 1; \
- else if (op == 0x83) { \
- op = read_memory_integer (retpc+1, 1); \
- if (op == 0xc4) \
- /* addl $<signed imm 8 bits>, %esp */ \
- (numargs) = (read_memory_integer (retpc+2,1)&0xff)/4;\
- } else if (op == 0x81) { /* add with 32 bit immediate */\
- op = read_memory_integer (retpc+1, 1); \
- if (op == 0xc4) \
- /* addl $<imm 32>, %esp */ \
- (numargs) = read_memory_integer (retpc+2, 4) / 4;\
- } \
-}
+#define FRAME_NUM_ARGS(numargs, fi) (numargs) = i386_frame_num_args(fi)
/* Return number of bytes at start of arglist that are not really args. */
--- /dev/null
+/* Macro defintions for i386, running System V 3.2.
+ Copyright (C) 1989 Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+GDB is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GDB is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GDB; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include "m-i386gas.h"
+
+/* Apparently there is inconsistency among various System V's about what
+ the name of this field is. */
+#define U_FPSTATE(u) u.u_fps.u_fpstate
+
+/* TIOCGETC is defined in System V 3.2 termio.h, but struct tchars
+ is not. This makes problems for inflow.c. */
+#define TIOCGETC_BROKEN
+++ /dev/null
-/* Macro defintions for i386, running System V 3.2.
- Copyright (C) 1989 Free Software Foundation, Inc.
-
-This file is part of GDB.
-
-GDB is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 1, or (at your option)
-any later version.
-
-GDB is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GDB; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include "m-i386gas.h"
-
-/* Apparently there is inconsistency among various System V's about what
- the name of this field is. */
-#define U_FPSTATE(u) u.u_fps.u_fpstate
-
-/* TIOCGETC is defined in System V 3.2 termio.h, but struct tchars
- is not. This makes problems for inflow.c. */
-#define TIOCGETC_BROKEN
argument is in the upper half of the word reserved on the stack,
but puts it in the lower half. */
/* #define BELIEVE_PCC_PROMOTION 1 */
+/* OK, I've added code to dbxread.c to deal with this case. */
+#define BELIEVE_PCC_PROMOTION_TYPE
/* Offset from address of function to start of its code.
Zero on most machines. */
#define KERNEL_U_ADDR (0x80000000 - (UPAGES * NBPG))
+/* Same as offsetof macro from stddef.h (which 4.3BSD doesn't have). */
+#define my_offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
+
+/* On the VAX, sigtramp is in the u area. Note that this definition
+ includes both the subroutine at u_pcb.pcb_sigc[3], and the
+ routine at u_pcb.pcb_sigc[0] (which does a calls to u_pcb.pcb_sigc[3]).
+ I think this is what we want. */
+#define IN_SIGTRAMP(pc, name) \
+ ((pc) >= KERNEL_U_ADDR + my_offsetof (struct user, u_pcb.pcb_sigc[0]) \
+ && (pc) < KERNEL_U_ADDR + my_offsetof (struct user, u_pcb.pcb_sigc[5]) \
+ )
+
/* Address of end of stack space. */
#define STACK_END_ADDR (0x80000000 - (UPAGES * NBPG))
#define FRAME_SAVED_PC(FRAME) (read_memory_integer ((FRAME)->frame + 16, 4))
-/* Cannot find the AP register value directly from the FP value.
- Must find it saved in the frame called by this one, or in the AP register
- for the innermost frame. */
+/* Cannot find the AP register value directly from the FP value. Must
+ find it saved in the frame called by this one, or in the AP
+ register for the innermost frame. However, there is no way to tell
+ the difference between the innermost frame and a frame for which we
+ just don't know the frame that it called (e.g. "info frame
+ 0x7ffec789"). For the sake of argument suppose that the stack is
+ somewhat trashed (which is one reason that "info frame" exists).
+ So return Frame_unknown (indicating we don't know the address of
+ the arglist) if we don't know what frame this frame calls. */
+#define FRAME_ARGS_ADDRESS_CORRECT(fi) \
+ (((fi)->next_frame \
+ ? read_memory_integer ((fi)->next_frame + 8, 4) \
+ : /* read_register (AP_REGNUM) */ Frame_unknown))
+
+/* In most of GDB, getting the args address is too important to
+ just say "I don't know". This is sometimes wrong, but c'est
+ la vie. */
#define FRAME_ARGS_ADDRESS(fi) \
(((fi)->next_frame \
? read_memory_integer ((fi)->next_frame + 8, 4) \
- : read_register (AP_REGNUM)))
+ : read_register (AP_REGNUM) /* Frame_unknown */))
#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
fprintf_filtered (stream, "%d(%s)", disp, reg_names[regno]);
}
\f
+/* Nonzero if the host system has a 68881 (or compatible)
+ floating-point unit. This does *not* indicate whether the target
+ system has a co-processor, just whether the host system does.
+ There might be a difference in the case of remote debugging. */
static int have_fpu = 1;
/* This is not part of insn printing, but it is machine-specific,
/* -t /def/ttyp1: use /dev/ttyp1 for inferior I/O. */
else if (!strcmp (arg, "-t") || !strcmp (arg, "-tty"))
tty_command (argv[i], 0);
+
+ /* -help: print a summary of command line switches. */
+ else if (!strcmp (arg, "-help"))
+ {
+ fputs ("\
+This is GDB, the GNU debugger. Use the command\n\
+ gdb [options] [executable [core-file]]\n\
+to enter the debugger.\n\
+\n\
+Options available are:\n\
+ -help Print this message.\n\
+ -quiet Do not print version number on startup.\n\
+ -fullname Output information used by emacs-GDB interface.\n\
+ -batch Exit after processing options.\n\
+ -nx Do not read .gdbinit file.\n\
+ -tty TTY Use TTY for input/output by the program being debugged.\n\
+ -cd DIR Change current directory to DIR.\n\
+ -directory DIR Search for source files in DIR.\n\
+ -command FILE Execute GDB commands from FILE.\n\
+ -symbols SYMFILE Read symbols from SYMFILE.\n\
+ -exec EXECFILE Use EXECFILE as the executable.\n\
+ -se FILE Use FILE as symbol file and executable file.\n\
+ -core COREFILE Analyze the core dump COREFILE.\n\
+\n\
+For more information, type \"help\" from within GDB, or consult the\n\
+GDB manual (available as on-line info or a printed manual).\n", stderr);
+ /* Exiting after printing this message seems like
+ the most useful thing to do. */
+ exit (0);
+ }
else
error ("Unknown command-line switch: \"%s\"\n", arg);
}
*exp = 0;
old_chain = make_cleanup (free_current_contents, &expr);
val = evaluate_expression (expr);
- if (last_format == 'i'
- && TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_PTR
+ /* In rvalue contexts, such as this, functions are coerced into
+ pointers to functions. This makes "x/i main" work. */
+ if (/* last_format == 'i'
+ && */ TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_FUNC
&& VALUE_LVAL (val) == lval_memory)
next_address = VALUE_ADDRESS (val);
else
+Thu Oct 19 17:18:40 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * Move vi_doing_insert from vi_mode.c to readline.c
+
+ * readline.c: Move compare_strings before its use.
+ Remove definitions.
+
+ * readline.c: Move defining_kbd_macro above rl_dispatch.
+ (rl_dispatch): Remove "extern int defining_kbd_macro".
+
+Mon Oct 16 11:56:03 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
+
+ * readline.c (rl_set_signals): Remove unnecessary "static int
+ rl_signal_handler()".
+
Sat Sep 30 14:51:56 1989 Jim Kingdon (kingdon at hobbes.ai.mit.edu)
* readline.c (rl_initialize): Change parsing_conditionalized_out
libreadline.a: readline.o history.o funmap.o keymaps.o
$(RM) -f libreadline.a
$(AR) clq libreadline.a readline.o history.o funmap.o keymaps.o
- if [ -f $(RANLIB) ]; then $(RANLIB) libreadline.a; fi
+# if [ -f $(RANLIB) ]; then $(RANLIB) libreadline.a; fi
readline.o: readline.h chardefs.h keymaps.h history.h readline.c vi_mode.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $(READLINE_DEFINES) \
$(DESTDIR)/libreadline.a: libreadline.a
-mv $(DESTDIR)/libreadline.a $(DESTDIR)/libreadline.old
cp libreadline.a $(DESTDIR)/libreadline.a
- $(RANLIB) -t $(DESTDIR)/libreadline.a
+# $(RANLIB) -t $(DESTDIR)/libreadline.a
FUNMAP **funmap = (FUNMAP **)NULL;
static int funmap_size = 0;
+
+static int just_testing_ar_tmp = 0;
+static int just_testing_ar_tmp_2 = 5;
+int foo_testing_ar;
+
static int funmap_entry = 0;
static FUNMAP default_funmap[] = {
#endif
#endif
+/* Stupid comparison routine for qsort () ing strings. */
+static int
+compare_strings (s1, s2)
+ char **s1, **s2;
+{
+ return (strcmp (*s1, *s2));
+}
+
\f
/* **************************************************************** */
/* */
return (savestring (the_line));
}
+\f
+/* Variables for keyboard macros. */
+
+/* The currently executing macro string. If this is non-zero,
+ then it is a malloc ()'ed string where input is coming from. */
+static char *executing_macro = (char *)NULL;
+
+/* The offset in the above string to the next character to be read. */
+static int executing_macro_index = 0;
+
+/* Non-zero means to save keys that we dispatch on in a kbd macro. */
+static int defining_kbd_macro = 0;
+
+/* The current macro string being built. Characters get stuffed
+ in here by add_macro_char (). */
+static char *current_macro = (char *)NULL;
+
+/* The size of the buffer allocated to current_macro. */
+static int current_macro_size = 0;
+
+/* The index at which characters are being added to current_macro. */
+static int current_macro_index = 0;
+
+/* A structure used to save nested macro strings.
+ It is a linked list of string/index for each saved macro. */
+struct saved_macro {
+ struct saved_macro *next;
+ char *string;
+ int index;
+};
+
+/* The list of saved macros. */
+struct saved_macro *macro_list = (struct saved_macro *)NULL;
+
\f
/* **************************************************************** */
/* */
rl_set_signals ()
{
- static int rl_signal_handler ();
-
old_int = (SigHandler *)signal (SIGINT, rl_signal_handler);
+
if (old_int == (SigHandler *)SIG_IGN)
signal (SIGINT, SIG_IGN);
register int key;
Keymap map;
{
- static int defining_kbd_macro;
-
if (defining_kbd_macro)
- add_macro_char (key);
+ {
+ static add_macro_char ();
+
+ add_macro_char (key);
+ }
if (key > 127 && key < 256)
{
/* */
/* **************************************************************** */
-/* The currently executing macro string. If this is non-zero,
- then it is a malloc ()'ed string where input is coming from. */
-static char *executing_macro = (char *)NULL;
-
-/* The offset in the above string to the next character to be read. */
-static int executing_macro_index = 0;
-
-/* Non-zero means to save keys that we dispatch on in a kbd macro. */
-static int defining_kbd_macro = 0;
-
-/* The current macro string being built. Characters get stuffed
- in here by add_macro_char (). */
-static char *current_macro = (char *)NULL;
-
-/* The size of the buffer allocated to current_macro. */
-static int current_macro_size = 0;
-
-/* The index at which characters are being added to current_macro. */
-static int current_macro_index = 0;
-
-/* A structure used to save nested macro strings.
- It is a linked list of string/index for each saved macro. */
-struct saved_macro {
- struct saved_macro *next;
- char *string;
- int index;
-};
-
-/* The list of saved macros. */
-struct saved_macro *macro_list = (struct saved_macro *)NULL;
-
/* Set up to read subsequent input from STRING.
STRING is free ()'ed when we are done with it. */
static
with_macro_input (string)
char *string;
{
+ static push_executing_macro ();
+
push_executing_macro ();
executing_macro = string;
executing_macro_index = 0;
if (!executing_macro[executing_macro_index])
{
+ static pop_executing_macro ();
+
pop_executing_macro ();
return (next_macro_key ());
}
with_macro_input (savestring (current_macro));
}
+\f
+/* Non-zero means do not parse any lines other than comments and
+ parser directives. */
+static unsigned char parsing_conditionalized_out = 0;
\f
/* **************************************************************** */
/* */
/* Parsing of key-bindings begins in an enabled state. */
{
- static unsigned char parsing_conditionalized_out;
parsing_conditionalized_out = 0;
}
}
rl_insert (count, '\t');
}
+#ifdef VI_MODE
+/* Non-zero means enter insertion mode. */
+static vi_doing_insert = 0;
+#endif
+
/* What to do when a NEWLINE is pressed. We accept the whole line.
KEY is the key that invoked this command. I guess it could have
meaning in the future. */
#ifdef VI_MODE
{
- static int vi_doing_insert;
if (vi_doing_insert)
{
rl_end_undo_group ();
if (rl_ignore_completion_duplicates)
{
char *lowest_common;
- int compare_strings (), j, newlen = 0;
+ int j, newlen = 0;
/* Sort the items. */
/* It is safe to sort this array, because the lowest common
/* Sort the items if they are not already sorted. */
if (!rl_ignore_completion_duplicates)
{
- int compare_strings ();
qsort (matches, len, sizeof (char *), compare_strings);
}
}
}
-/* Stupid comparison routine for qsort () ing strings. */
-static int
-compare_strings (s1, s2)
- char **s1, **s2;
-{
- return (strcmp (*s1, *s2));
-}
-
/* A completion function for usernames.
TEXT contains a partial username preceded by a random
character (usually `~'). */
char *string;
{
register int i;
+ static int stricmp ();
for (i = 0; funmap[i]; i++)
if (stricmp (funmap[i]->name, string) == 0)
/* Calling programs set this to have their argv[0]. */
char *rl_readline_name = "other";
-/* Non-zero means do not parse any lines other than comments and
- parser directives. */
-static unsigned char parsing_conditionalized_out = 0;
-
/* Stack of previous values of parsing_conditionalized_out. */
static unsigned char *if_stack = (unsigned char *)NULL;
static int if_stack_depth = 0;
char *args;
{
register int i;
+ static int stricmp ();
/* Push parser state. */
if (if_stack_depth + 1 >= if_stack_size)
{
register int i;
char *directive, *args;
+ static int stricmp ();
/* Isolate the actual directive. */
{
extern char *possible_control_prefixes[], *possible_meta_prefixes[];
char *rindex (), *funname, *kname;
- static int substring_member_of_array ();
+ static int substring_member_of_array (), stricmp ();
register int c;
int key, i;
rl_variable_bind (name, value)
char *name, *value;
{
- static int strnicmp ();
+ static int strnicmp (), stricmp ();
if (stricmp (name, "editing-mode") == 0)
{
char *name;
{
register int i;
+ static int stricmp ();
for (i = 0; name_key_alist[i].name; i++)
if (stricmp (name, name_key_alist[i].name) == 0)
static char *vi_last_search = (char *)NULL;
static int vi_histpos;
-/* Non-zero means enter insertion mode. */
-static vi_doing_insert = 0;
-
/* *** UNCLEAN *** */
/* Command keys which do movement for xxx_to commands. */
static char *vi_motion = " hl^$0ftFt;,%wbeWBE|";
/* NOTREACHED */
}
+/* FRAME_ARGS_ADDRESS_CORRECT is just like FRAME_ARGS_ADDRESS except
+ that if it is unsure about the answer, it returns Frame_unknown
+ instead of guessing (this happens on the VAX, for example).
+
+ On most machines, we never have to guess about the args address,
+ so FRAME_ARGS_ADDRESS{,_CORRECT} are the same. */
+#if !defined (FRAME_ARGS_ADDRESS_CORRECT)
+#define FRAME_ARGS_ADDRESS_CORRECT FRAME_ARGS_ADDRESS
+#endif
+
/* Print verbosely the selected frame or the frame at address ADDR.
This means absolutely all information in the frame is printed. */
FRAME calling_frame;
int i, count;
char *funname = 0;
- int numargs;
if (!(have_inferior_p () || have_core_file_p ()))
error ("No inferior or core file.");
printf (" caller of frame at 0x%x", fi->next_frame);
if (fi->next_frame || calling_frame)
printf ("\n");
- printf (" Arglist at 0x%x,", FRAME_ARGS_ADDRESS (fi));
- FRAME_NUM_ARGS (i, fi);
- if (i < 0)
- printf (" args: ");
- else if (i == 0)
- printf (" no args.");
- else if (i == 1)
- printf (" 1 arg: ");
- else
- printf (" %d args: ", i);
- FRAME_NUM_ARGS (numargs, fi);
- print_frame_args (func, fi, numargs, stdout);
- printf ("\n");
+ {
+ /* Address of the argument list for this frame, or Frame_unknown. */
+ CORE_ADDR arg_list = FRAME_ARGS_ADDRESS_CORRECT (fi);
+ /* Number of args for this frame, or -1 if unknown. */
+ int numargs;
+
+ if (arg_list != Frame_unknown)
+ {
+ printf (" Arglist at 0x%x,", arg_list);
+
+ FRAME_NUM_ARGS (numargs, fi);
+ if (numargs < 0)
+ printf (" args: ");
+ else if (numargs == 0)
+ printf (" no args.");
+ else if (numargs == 1)
+ printf (" 1 arg: ");
+ else
+ printf (" %d args: ", numargs);
+ print_frame_args (func, fi, numargs, stdout);
+ printf ("\n");
+ }
+ }
+
/* The sp is special; what's returned isn't the save address, but
actually the value of the previous frame's sp. */
printf (" Previous frame's sp is 0x%x\n", fsr.regs[SP_REGNUM]);
that depends on knowing the name of D. */
if (class_name)
{
- while (*class_name++ != ' ');
+ /* We just want the class name. In the context
+ of C++, stripping off "struct " is always
+ sensible. */
+ if (strncmp("struct ", class_name, 7) == 0)
+ class_name += 7;
+ if (strncmp("union ", class_name, 6) == 0)
+ class_name += 6;
sym_class = lookup_symbol (class_name, 0, STRUCT_NAMESPACE, 0);
for (method_counter = TYPE_NFN_FIELDS (SYMBOL_TYPE (sym_class)) - 1;
char *string;
int arg;
{
- fprintf (stderr, "gdb: ");
+ /* "internal error" is always correct, since GDB should never dump
+ core, no matter what the input. */
+ fprintf (stderr, "gdb internal error: ");
fprintf (stderr, string, arg);
fprintf (stderr, "\n");
signal (SIGQUIT, SIG_DFL);
/* This won't blow up if the restrictions described above are
followed. */
- (void) sprintf (linebuffer, format, arg1, arg2, arg3);
+ (void) sprintf (linebuffer, format, arg1, arg2, arg3, arg4, arg5, arg6);
fputs_filtered (linebuffer, stream);
}
if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_MEMBER)
error ("not implemented: member types in value_ind");
- /* Allow * on an integer so we can cast it to whatever we want. */
+ /* Allow * on an integer so we can cast it to whatever we want.
+ This returns an int, which seems like the most C-like thing
+ to do. "long long" variables are rare enough that
+ BUILTIN_TYPE_LONGEST would seem to be a mistake. */
if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_INT)
- return value_at (BUILTIN_TYPE_LONGEST,
+ return value_at (builtin_type_int,
(CORE_ADDR) value_as_long (arg1));
else if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_PTR)
return value_at (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)),
along with GDB; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-char *version = "3.3";
+char *version = "3.4";