mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-18 22:13:40 +08:00
2003-02-19 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add block.c. (block_h): New. (COMMON_OBS): Add block.o. (block.o): New. (x86-64-tdep.o): Add $(block_h). (values.o, valops.o, tracepoint.o, symtab.o, symmisc.o, symfile.o) (stack.o, printcmd.o, p-exp.tab.o, parse.o, objfiles.o) (objc-exp.tab.o, objc-lang.o, nlmread.o, mips-tdep.o, mdebugread.o) (m2-exp.tab.o, linespec.o, jv-lang.o, jv-exp.tab.o, infcmd.o) (f-valprint.o, findvar.o, f-exp.tab.o, expprint.o, coffread.o) (c-exp.tab.o, buildsym.o, breakpoint.o, blockframe.o, ax-gdb.o) (alpha-tdep.o, ada-lang.o, ada-exp.tab.o, mi-cmd-stack.o): Ditto. * value.h: Add opaque declaration for struct block. * parser-defs.h, objc-lang.h, buildsym.h, breakpoint.h: Ditto. * ada-lang.h: Ditto. * x86-64-tdep.c: #include "block.h" * values.c, valops.c, tracepoint.c, symtab.c, symmisc.c: Ditto. * symfile.c, stack.c, printcmd.c, p-exp.y, parse.c: Ditto. * objfiles.c, objc-exp.y, objc-lang.c, nlmread.c: Ditto. * mips-tdep.c, mdebugread.c, m2-exp.y, linespec.c: Ditto. * jv-lang.c, jv-exp.y, infcmd.c, f-valprint.c: Ditto. * findvar.c, f-exp.y, expprint.c, coffread.c, c-exp.y: Ditto. * buildsym.c, breakpoint.c, blockframe.c, ax-gdb.c: Ditto. * alpha-tdep.c, ada-lang.c, ada-exp.y: Ditto. * blockframe.c (blockvector_for_pc_sect): Move to "block.c". (blockvector_for_pc, block_for_pc_sect, block_for_pc): Ditto. * symtab.c (block_function): Ditto. (contained_in): Ditto. * frame.h: Move block_for_pc and block_for_pc_sect declarations to block.h. Add opaque declaration for struct block. * symtab.h: Move block_function and contained_in declarations to block.h. Add opaque declarations for struct block, struct blockvector. (struct block): Move to block.h. (struct blockvector): Ditto. (BLOCK_START, BLOCK_END, BLOCK_FUNCTION, BLOCK_SUPERBLOCK) (BLOCK_GCC_COMPILED, BLOCK_HASHTABLE, BLOCK_NSYMS, BLOCK_SYM) (BLOCK_BUCKETS, BLOCK_BUCKET, BLOCK_HASHTABLE_SIZE) (ALL_BLOCK_SYMBOLS, BLOCK_SHOULD_SORT, BLOCKVECTOR_NBLOCKS) (BLOCKVECTOR_BLOCK, GLOBAL_BLOCK, STATIC_BLOCK, FIRST_LOCAL_BLOCK): Ditto. * block.c: New file. * block.h: New file. 2003-02-19 David Carlton <carlton@math.stanford.edu> * mi-cmd-stack.c: #include "block.h"
This commit is contained in:
parent
b3f71a301e
commit
fe898f56a1
@ -1,3 +1,49 @@
|
||||
2003-02-19 David Carlton <carlton@math.stanford.edu>
|
||||
|
||||
* Makefile.in (SFILES): Add block.c.
|
||||
(block_h): New.
|
||||
(COMMON_OBS): Add block.o.
|
||||
(block.o): New.
|
||||
(x86-64-tdep.o): Add $(block_h).
|
||||
(values.o, valops.o, tracepoint.o, symtab.o, symmisc.o, symfile.o)
|
||||
(stack.o, printcmd.o, p-exp.tab.o, parse.o, objfiles.o)
|
||||
(objc-exp.tab.o, objc-lang.o, nlmread.o, mips-tdep.o, mdebugread.o)
|
||||
(m2-exp.tab.o, linespec.o, jv-lang.o, jv-exp.tab.o, infcmd.o)
|
||||
(f-valprint.o, findvar.o, f-exp.tab.o, expprint.o, coffread.o)
|
||||
(c-exp.tab.o, buildsym.o, breakpoint.o, blockframe.o, ax-gdb.o)
|
||||
(alpha-tdep.o, ada-lang.o, ada-exp.tab.o, mi-cmd-stack.o): Ditto.
|
||||
* value.h: Add opaque declaration for struct block.
|
||||
* parser-defs.h, objc-lang.h, buildsym.h, breakpoint.h: Ditto.
|
||||
* ada-lang.h: Ditto.
|
||||
* x86-64-tdep.c: #include "block.h"
|
||||
* values.c, valops.c, tracepoint.c, symtab.c, symmisc.c: Ditto.
|
||||
* symfile.c, stack.c, printcmd.c, p-exp.y, parse.c: Ditto.
|
||||
* objfiles.c, objc-exp.y, objc-lang.c, nlmread.c: Ditto.
|
||||
* mips-tdep.c, mdebugread.c, m2-exp.y, linespec.c: Ditto.
|
||||
* jv-lang.c, jv-exp.y, infcmd.c, f-valprint.c: Ditto.
|
||||
* findvar.c, f-exp.y, expprint.c, coffread.c, c-exp.y: Ditto.
|
||||
* buildsym.c, breakpoint.c, blockframe.c, ax-gdb.c: Ditto.
|
||||
* alpha-tdep.c, ada-lang.c, ada-exp.y: Ditto.
|
||||
* blockframe.c (blockvector_for_pc_sect): Move to "block.c".
|
||||
(blockvector_for_pc, block_for_pc_sect, block_for_pc): Ditto.
|
||||
* symtab.c (block_function): Ditto.
|
||||
(contained_in): Ditto.
|
||||
* frame.h: Move block_for_pc and block_for_pc_sect declarations to
|
||||
block.h. Add opaque declaration for struct block.
|
||||
* symtab.h: Move block_function and contained_in declarations to
|
||||
block.h. Add opaque declarations for struct block, struct
|
||||
blockvector.
|
||||
(struct block): Move to block.h.
|
||||
(struct blockvector): Ditto.
|
||||
(BLOCK_START, BLOCK_END, BLOCK_FUNCTION, BLOCK_SUPERBLOCK)
|
||||
(BLOCK_GCC_COMPILED, BLOCK_HASHTABLE, BLOCK_NSYMS, BLOCK_SYM)
|
||||
(BLOCK_BUCKETS, BLOCK_BUCKET, BLOCK_HASHTABLE_SIZE)
|
||||
(ALL_BLOCK_SYMBOLS, BLOCK_SHOULD_SORT, BLOCKVECTOR_NBLOCKS)
|
||||
(BLOCKVECTOR_BLOCK, GLOBAL_BLOCK, STATIC_BLOCK, FIRST_LOCAL_BLOCK):
|
||||
Ditto.
|
||||
* block.c: New file.
|
||||
* block.h: New file.
|
||||
|
||||
2003-02-19 Theodore A. Roth <troth@openavr.org>
|
||||
|
||||
* avr-tdep.c (avr_extract_return_value): Remove function.
|
||||
|
@ -511,7 +511,7 @@ TARGET_FLAGS_TO_PASS = \
|
||||
|
||||
SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
|
||||
ax-general.c ax-gdb.c \
|
||||
bcache.c blockframe.c breakpoint.c buildsym.c builtin-regs.c \
|
||||
bcache.c block.c blockframe.c breakpoint.c buildsym.c builtin-regs.c \
|
||||
c-exp.y c-lang.c c-typeprint.c c-valprint.c \
|
||||
charset.c cli-out.c coffread.c complaints.c completer.c corefile.c \
|
||||
cp-abi.c cp-support.c cp-valprint.c \
|
||||
@ -606,6 +606,7 @@ arm_tdep_h = arm-tdep.h
|
||||
ax_gdb_h = ax-gdb.h
|
||||
ax_h = ax.h $(doublest_h)
|
||||
bcache_h = bcache.h
|
||||
block_h = block.h
|
||||
breakpoint_h = breakpoint.h $(frame_h) $(value_h) $(gdb_events_h)
|
||||
buildsym_h = buildsym.h
|
||||
builtin_regs_h = builtin-regs.h
|
||||
@ -824,7 +825,7 @@ TAGFILES_WITH_SRCDIR = $(HFILES_WITH_SRCDIR)
|
||||
COMMON_OBS = version.o blockframe.o breakpoint.o findvar.o regcache.o \
|
||||
charset.o disasm.o dummy-frame.o \
|
||||
source.o values.o eval.o valops.o valarith.o valprint.o printcmd.o \
|
||||
symtab.o symfile.o symmisc.o linespec.o infcmd.o infrun.o \
|
||||
block.o symtab.o symfile.o symmisc.o linespec.o infcmd.o infrun.o \
|
||||
expprint.o environ.o stack.o thread.o \
|
||||
interps.o \
|
||||
macrotab.o macrocmd.o macroexp.o macroscope.o \
|
||||
@ -1431,32 +1432,32 @@ z8k-tdep.o: $(srcdir)/z8k-tdep.c
|
||||
c-exp.tab.o: c-exp.tab.c $(defs_h) $(gdb_string_h) $(expression_h) \
|
||||
$(value_h) $(parser_defs_h) $(language_h) $(c_lang_h) $(bfd_h) \
|
||||
$(charset_h) \
|
||||
$(symfile_h) $(objfiles_h)
|
||||
$(symfile_h) $(objfiles_h) $(block_h)
|
||||
|
||||
objc-exp.tab.o: objc-exp.tab.c $(objc_lang_h) $(defs_h) $(expression_h) \
|
||||
$(gdbtypes_h) $(language_h) $(parser_defs_h) $(symtab_h) $(value_h) \
|
||||
$(bfd_h) $(objfiles_h) $(symfile_h)
|
||||
$(bfd_h) $(objfiles_h) $(symfile_h) $(block_h)
|
||||
|
||||
jv-exp.tab.o: jv-exp.tab.c jv-lang.h $(defs_h) $(expression_h) \
|
||||
$(gdbtypes_h) $(language_h) $(parser_defs_h) $(symtab_h) $(value_h) \
|
||||
$(bfd_h) $(objfiles_h) $(symfile_h)
|
||||
$(bfd_h) $(objfiles_h) $(symfile_h) $(block_h)
|
||||
|
||||
f-exp.tab.o: f-exp.tab.c f-lang.h $(defs_h) $(expression_h) \
|
||||
$(language_h) $(parser_defs_h) $(value_h) $(bfd_h) $(objfiles_h) \
|
||||
$(symfile_h)
|
||||
$(symfile_h) $(block_h)
|
||||
|
||||
m2-exp.tab.o: m2-exp.tab.c $(defs_h) $(expression_h) $(gdbtypes_h) \
|
||||
$(language_h) m2-lang.h $(parser_defs_h) $(symtab_h) $(value_h) \
|
||||
$(bfd_h) $(objfiles_h) $(symfile_h)
|
||||
$(bfd_h) $(objfiles_h) $(symfile_h) $(block_h)
|
||||
|
||||
p-exp.tab.o: p-exp.tab.c $(defs_h) $(expression_h) $(gdbtypes_h) \
|
||||
$(language_h) p-lang.h $(parser_defs_h) $(symtab_h) $(value_h) \
|
||||
$(bfd_h) $(objfiles_h) $(symfile_h)
|
||||
$(bfd_h) $(objfiles_h) $(symfile_h) $(block_h)
|
||||
|
||||
ada-exp.tab.o: ada-exp.tab.c ada-lex.c ada-lang.h \
|
||||
$(defs_h) $(expression_h) \
|
||||
$(gdbtypes_h) language.h parser-defs.h $(symtab_h) $(value_h) \
|
||||
$(bfd_h) objfiles.h symfile.h
|
||||
$(bfd_h) objfiles.h symfile.h $(block_h)
|
||||
|
||||
#
|
||||
# The dependencies. In aphabetic order.
|
||||
@ -1467,7 +1468,7 @@ abug-rom.o: abug-rom.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \
|
||||
ada-lang.o: ada-lang.c $(gdb_string_h) $(demangle_h) $(defs_h) $(symtab_h) \
|
||||
$(gdbtypes_h) $(gdbcmd_h) $(expression_h) $(parser_defs_h) \
|
||||
$(language_h) $(c_lang_h) $(inferior_h) $(symfile_h) $(objfiles_h) \
|
||||
$(breakpoint_h) $(gdbcore_h) $(ada_lang_h) $(ui_out_h)
|
||||
$(breakpoint_h) $(gdbcore_h) $(ada_lang_h) $(ui_out_h) $(block_h)
|
||||
ada-tasks.o: ada-tasks.c $(defs_h) $(command_h) $(value_h) $(language_h) \
|
||||
$(inferior_h) $(symtab_h) $(target_h) $(gdbcore_h) $(gregset_h) \
|
||||
$(ada_lang_h)
|
||||
@ -1491,7 +1492,7 @@ alpha-tdep.o: alpha-tdep.c $(defs_h) $(frame_h) $(inferior_h) $(symtab_h) \
|
||||
$(value_h) $(gdbcmd_h) $(gdbcore_h) $(dis_asm_h) $(symfile_h) \
|
||||
$(objfiles_h) $(gdb_string_h) $(linespec_h) $(regcache_h) \
|
||||
$(doublest_h) $(arch_utils_h) $(elf_bfd_h) $(alpha_tdep_h) \
|
||||
$(osabi_h)
|
||||
$(osabi_h) $(block_h)
|
||||
alphabsd-nat.o: alphabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \
|
||||
$(alpha_tdep_h) $(alphabsd_tdep_h) $(gregset_h)
|
||||
alphabsd-tdep.o: alphabsd-tdep.c $(defs_h) $(regcache_h) $(alpha_tdep_h) \
|
||||
@ -1527,24 +1528,26 @@ avr-tdep.o: avr-tdep.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) $(inferior_h) \
|
||||
$(symfile_h) $(arch_utils_h) $(regcache_h) $(gdb_string_h)
|
||||
ax-gdb.o: ax-gdb.c $(defs_h) $(symtab_h) $(symfile_h) $(gdbtypes_h) \
|
||||
$(value_h) $(expression_h) $(command_h) $(gdbcmd_h) $(frame_h) \
|
||||
$(target_h) $(ax_h) $(ax_gdb_h) $(gdb_string_h)
|
||||
$(target_h) $(ax_h) $(ax_gdb_h) $(gdb_string_h) $(block_h)
|
||||
ax-general.o: ax-general.c $(defs_h) $(ax_h) $(value_h) $(gdb_string_h)
|
||||
bcache.o: bcache.c $(defs_h) $(gdb_obstack_h) $(bcache_h) $(gdb_string_h)
|
||||
block.o: block.c $(defs_h) $(block_h) $(symtab_h) $(symfile_h)
|
||||
blockframe.o: blockframe.c $(defs_h) $(symtab_h) $(bfd_h) $(symfile_h) \
|
||||
$(objfiles_h) $(frame_h) $(gdbcore_h) $(value_h) $(target_h) \
|
||||
$(inferior_h) $(annotate_h) $(regcache_h) $(gdb_assert_h) \
|
||||
$(dummy_frame_h) $(command_h) $(gdbcmd_h)
|
||||
$(dummy_frame_h) $(command_h) $(gdbcmd_h) $(block_h)
|
||||
breakpoint.o: breakpoint.c $(defs_h) $(symtab_h) $(frame_h) $(breakpoint_h) \
|
||||
$(gdbtypes_h) $(expression_h) $(gdbcore_h) $(gdbcmd_h) $(value_h) \
|
||||
$(command_h) $(inferior_h) $(gdbthread_h) $(target_h) $(language_h) \
|
||||
$(gdb_string_h) $(demangle_h) $(annotate_h) $(symfile_h) \
|
||||
$(objfiles_h) $(linespec_h) $(completer_h) $(gdb_h) $(ui_out_h) \
|
||||
$(cli_script_h) $(gdb_events_h) $(source_h) $(gdb_assert_h)
|
||||
$(cli_script_h) $(gdb_events_h) $(source_h) $(gdb_assert_h) \
|
||||
$(block_h)
|
||||
buildsym.o: buildsym.c $(defs_h) $(bfd_h) $(gdb_obstack_h) $(symtab_h) \
|
||||
$(symfile_h) $(objfiles_h) $(gdbtypes_h) $(gdb_assert_h) \
|
||||
$(complaints_h) $(gdb_string_h) $(expression_h) $(language_h) \
|
||||
$(bcache_h) $(filenames_h) $(macrotab_h) $(demangle_h) $(buildsym_h) \
|
||||
$(stabsread_h)
|
||||
$(stabsread_h) $(block_h)
|
||||
builtin-regs.o: builtin-regs.c $(defs_h) $(builtin_regs_h) $(gdbtypes_h) \
|
||||
$(gdb_string_h) $(gdb_assert_h)
|
||||
c-lang.o: c-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
|
||||
@ -1567,7 +1570,7 @@ coffread.o: coffread.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(demangle_h) \
|
||||
$(breakpoint_h) $(bfd_h) $(gdb_obstack_h) $(gdb_string_h) \
|
||||
$(coff_internal_h) $(libcoff_h) $(symfile_h) $(objfiles_h) \
|
||||
$(buildsym_h) $(gdb_stabs_h) $(stabsread_h) $(complaints_h) \
|
||||
$(target_h) $(gdb_assert_h)
|
||||
$(target_h) $(gdb_assert_h) $(block_h)
|
||||
complaints.o: complaints.c $(defs_h) $(complaints_h) $(gdb_assert_h) \
|
||||
$(command_h) $(gdbcmd_h)
|
||||
completer.o: completer.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
|
||||
@ -1654,7 +1657,8 @@ exec.o: exec.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) $(gdbcmd_h) \
|
||||
$(gdb_string_h) $(gdbcore_h) $(gdb_stat_h) $(xcoffsolib_h) \
|
||||
$(readline_h)
|
||||
expprint.o: expprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
|
||||
$(value_h) $(language_h) $(parser_defs_h) $(target_h) $(gdb_string_h)
|
||||
$(value_h) $(language_h) $(parser_defs_h) $(target_h) $(gdb_string_h) \
|
||||
$(block_h)
|
||||
f-lang.o: f-lang.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
|
||||
$(expression_h) $(parser_defs_h) $(language_h) $(f_lang_h) \
|
||||
$(valprint_h)
|
||||
@ -1663,13 +1667,13 @@ f-typeprint.o: f-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) $(symtab_h) \
|
||||
$(f_lang_h) $(gdb_string_h)
|
||||
f-valprint.o: f-valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) \
|
||||
$(gdbtypes_h) $(expression_h) $(value_h) $(valprint_h) $(language_h) \
|
||||
$(f_lang_h) $(frame_h) $(gdbcore_h) $(command_h)
|
||||
$(f_lang_h) $(frame_h) $(gdbcore_h) $(command_h) $(block_h)
|
||||
fbsd-proc.o: fbsd-proc.c $(defs_h) $(gdbcore_h) $(inferior_h) \
|
||||
$(gdb_string_h) $(elf_bfd_h) $(gregset_h)
|
||||
findvar.o: findvar.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(frame_h) \
|
||||
$(value_h) $(gdbcore_h) $(inferior_h) $(target_h) $(gdb_string_h) \
|
||||
$(gdb_assert_h) $(floatformat_h) $(symfile_h) $(regcache_h) \
|
||||
$(builtin_regs_h)
|
||||
$(builtin_regs_h) $(block_h)
|
||||
fork-child.o: fork-child.c $(defs_h) $(gdb_string_h) $(frame_h) \
|
||||
$(inferior_h) $(target_h) $(gdb_wait_h) $(gdb_vfork_h) $(gdbcore_h) \
|
||||
$(terminal_h) $(gdbthread_h) $(command_h)
|
||||
@ -1791,7 +1795,7 @@ infcmd.o: infcmd.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
|
||||
$(frame_h) $(inferior_h) $(environ_h) $(value_h) $(gdbcmd_h) \
|
||||
$(symfile_h) $(gdbcore_h) $(target_h) $(language_h) $(symfile_h) \
|
||||
$(objfiles_h) $(completer_h) $(ui_out_h) $(event_top_h) \
|
||||
$(parser_defs_h) $(regcache_h)
|
||||
$(parser_defs_h) $(regcache_h) $(block_h)
|
||||
inflow.o: inflow.c $(defs_h) $(frame_h) $(inferior_h) $(command_h) \
|
||||
$(serial_h) $(terminal_h) $(target_h) $(gdbthread_h) $(gdb_string_h) \
|
||||
$(inflow_h)
|
||||
@ -1816,7 +1820,7 @@ irix5-nat.o: irix5-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) $(target_h) \
|
||||
jv-lang.o: jv-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
|
||||
$(parser_defs_h) $(language_h) $(gdbtypes_h) $(symtab_h) \
|
||||
$(symfile_h) $(objfiles_h) $(gdb_string_h) $(value_h) $(c_lang_h) \
|
||||
$(jv_lang_h) $(gdbcore_h)
|
||||
$(jv_lang_h) $(gdbcore_h) $(block_h)
|
||||
jv-typeprint.o: jv-typeprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) \
|
||||
$(value_h) $(demangle_h) $(jv_lang_h) $(gdb_string_h) $(typeprint_h) \
|
||||
$(c_lang_h) $(cp_abi_h)
|
||||
@ -1833,7 +1837,7 @@ lin-lwp.o: lin-lwp.c $(defs_h) $(gdb_assert_h) $(gdb_string_h) $(gdb_wait_h) \
|
||||
$(gdbthread_h) $(inferior_h) $(target_h) $(regcache_h) $(gdbcmd_h)
|
||||
linespec.o: linespec.c $(defs_h) $(symtab_h) $(frame_h) $(command_h) \
|
||||
$(symfile_h) $(objfiles_h) $(demangle_h) $(value_h) $(completer_h) \
|
||||
$(cp_abi_h) $(source_h) $(parser_defs_h)
|
||||
$(cp_abi_h) $(source_h) $(parser_defs_h) $(block_h)
|
||||
linux-proc.o: linux-proc.c $(defs_h) $(inferior_h) $(regcache_h) \
|
||||
$(gregset_h) $(gdbcore_h) $(gdbthread_h) $(elf_bfd_h) \
|
||||
$(cli_decode_h) $(gdb_string_h)
|
||||
@ -1896,6 +1900,7 @@ mcore-tdep.o: mcore-tdep.c $(defs_h) $(frame_h) $(symtab_h) $(value_h) \
|
||||
mdebugread.o: mdebugread.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(gdbcore_h) \
|
||||
$(symfile_h) $(objfiles_h) $(gdb_obstack_h) $(buildsym_h) \
|
||||
$(stabsread_h) $(complaints_h) $(demangle_h) $(gdb_assert_h) \
|
||||
$(block_h) \
|
||||
$(coff_sym_h) $(coff_symconst_h) $(gdb_stat_h) $(gdb_string_h) \
|
||||
$(bfd_h) $(coff_ecoff_h) $(libaout_h) $(aout_aout64_h) \
|
||||
$(aout_stab_gnu_h) $(expression_h) $(language_h)
|
||||
@ -1914,7 +1919,7 @@ mips-nat.o: mips-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) $(regcache_h)
|
||||
mips-tdep.o: mips-tdep.c $(defs_h) $(gdb_string_h) $(frame_h) $(inferior_h) \
|
||||
$(symtab_h) $(value_h) $(gdbcmd_h) $(language_h) $(gdbcore_h) \
|
||||
$(symfile_h) $(objfiles_h) $(gdbtypes_h) $(target_h) $(arch_utils_h) \
|
||||
$(regcache_h) $(osabi_h) $(mips_tdep_h) $(opcode_mips_h) \
|
||||
$(regcache_h) $(osabi_h) $(mips_tdep_h) $(block_h) $(opcode_mips_h) \
|
||||
$(elf_mips_h) $(elf_bfd_h) $(symcat_h)
|
||||
mipsm3-nat.o: mipsm3-nat.c $(defs_h) $(inferior_h) $(regcache_h)
|
||||
mipsnbsd-nat.o: mipsnbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \
|
||||
@ -1939,7 +1944,7 @@ monitor.o: monitor.c $(defs_h) $(gdbcore_h) $(target_h) $(gdb_string_h) \
|
||||
$(gdb_regex_h) $(srec_h) $(regcache_h)
|
||||
nbsd-tdep.o: nbsd-tdep.c $(defs_h) $(gdb_string_h) $(solib_svr4_h)
|
||||
nlmread.o: nlmread.c $(defs_h) $(bfd_h) $(symtab_h) $(symfile_h) \
|
||||
$(objfiles_h) $(buildsym_h) $(stabsread_h)
|
||||
$(objfiles_h) $(buildsym_h) $(stabsread_h) $(block_h)
|
||||
ns32k-tdep.o: ns32k-tdep.c $(defs_h) $(frame_h) $(gdbtypes_h) $(gdbcore_h) \
|
||||
$(inferior_h) $(regcache_h) $(target_h) $(arch_utils_h) \
|
||||
$(ns32k_tdep_h) $(gdb_string_h) $(osabi_h)
|
||||
@ -1951,10 +1956,11 @@ objc-lang.o: objc-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
|
||||
$(parser_defs_h) $(language_h) $(c_lang_h) $(objc_lang_h) \
|
||||
$(complaints_h) $(value_h) $(symfile_h) $(objfiles_h) \
|
||||
$(gdb_string_h) $(target_h) $(gdbcore_h) $(gdbcmd_h) $(frame_h) \
|
||||
$(gdb_regex_h) $(regcache_h)
|
||||
$(gdb_regex_h) $(regcache_h) $(block_h)
|
||||
objfiles.o: objfiles.c $(defs_h) $(bfd_h) $(symtab_h) $(symfile_h) \
|
||||
$(objfiles_h) $(gdb_stabs_h) $(target_h) $(bcache_h) $(gdb_stat_h) \
|
||||
$(gdb_obstack_h) $(gdb_string_h) $(breakpoint_h) $(mmalloc_h)
|
||||
$(gdb_obstack_h) $(gdb_string_h) $(breakpoint_h) $(mmalloc_h) \
|
||||
$(block_h)
|
||||
ocd.o: ocd.c $(defs_h) $(gdbcore_h) $(gdb_string_h) $(frame_h) $(inferior_h) \
|
||||
$(bfd_h) $(symfile_h) $(target_h) $(gdbcmd_h) $(objfiles_h) \
|
||||
$(gdb_stabs_h) $(serial_h) $(ocd_h) $(regcache_h)
|
||||
@ -1979,7 +1985,7 @@ pa64solib.o: pa64solib.c $(defs_h) $(frame_h) $(bfd_h) $(libhppa_h) \
|
||||
parse.o: parse.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
|
||||
$(frame_h) $(expression_h) $(value_h) $(command_h) $(language_h) \
|
||||
$(parser_defs_h) $(gdbcmd_h) $(symfile_h) $(inferior_h) \
|
||||
$(doublest_h) $(builtin_regs_h) $(gdb_assert_h)
|
||||
$(doublest_h) $(builtin_regs_h) $(gdb_assert_h) $(block_h)
|
||||
ppc-bdm.o: ppc-bdm.c $(defs_h) $(gdbcore_h) $(gdb_string_h) $(frame_h) \
|
||||
$(inferior_h) $(bfd_h) $(symfile_h) $(target_h) $(gdbcmd_h) \
|
||||
$(objfiles_h) $(gdb_stabs_h) $(serial_h) $(ocd_h) $(ppc_tdep_h) \
|
||||
@ -2004,7 +2010,7 @@ printcmd.o: printcmd.c $(defs_h) $(gdb_string_h) $(frame_h) $(symtab_h) \
|
||||
$(gdbtypes_h) $(value_h) $(language_h) $(expression_h) $(gdbcore_h) \
|
||||
$(gdbcmd_h) $(target_h) $(breakpoint_h) $(demangle_h) $(valprint_h) \
|
||||
$(annotate_h) $(symfile_h) $(objfiles_h) $(completer_h) $(ui_out_h) \
|
||||
$(gdb_assert_h)
|
||||
$(gdb_assert_h) $(block_h)
|
||||
proc-api.o: proc-api.c $(defs_h) $(gdbcmd_h) $(completer_h) $(gdb_wait_h) \
|
||||
$(proc_utils_h)
|
||||
proc-events.o: proc-events.c $(defs_h)
|
||||
@ -2191,7 +2197,7 @@ stabsread.o: stabsread.c $(defs_h) $(gdb_string_h) $(bfd_h) $(gdb_obstack_h) \
|
||||
stack.o: stack.c $(defs_h) $(gdb_string_h) $(value_h) $(symtab_h) \
|
||||
$(gdbtypes_h) $(expression_h) $(language_h) $(frame_h) $(gdbcmd_h) \
|
||||
$(gdbcore_h) $(target_h) $(breakpoint_h) $(demangle_h) $(inferior_h) \
|
||||
$(annotate_h) $(ui_out_h) $(source_h)
|
||||
$(annotate_h) $(ui_out_h) $(source_h) $(block_h)
|
||||
standalone.o: standalone.c $(gdb_stat_h) $(defs_h) $(symtab_h) $(frame_h) \
|
||||
$(inferior_h) $(gdb_wait_h)
|
||||
std-regs.o: std-regs.c $(defs_h) $(builtin_regs_h) $(frame_h) $(gdbtypes_h) \
|
||||
@ -2203,7 +2209,7 @@ symfile.o: symfile.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(gdbcore_h) \
|
||||
$(gdbcmd_h) $(breakpoint_h) $(language_h) $(complaints_h) \
|
||||
$(demangle_h) $(inferior_h) $(gdb_stabs_h) $(gdb_obstack_h) \
|
||||
$(completer_h) $(bcache_h) $(gdb_string_h) $(gdb_stat_h) $(source_h) \
|
||||
$(gdb_assert_h) $(readline_h) $(filenames_h)
|
||||
$(gdb_assert_h) $(readline_h) $(filenames_h) $(block_h)
|
||||
symm-nat.o: symm-nat.c $(defs_h) $(frame_h) $(inferior_h) $(symtab_h) \
|
||||
$(target_h) $(regcache_h) $(gdb_wait_h) $(gdb_stat_h) $(gdbcore_h) \
|
||||
$(gdbcore_h)
|
||||
@ -2212,13 +2218,13 @@ symm-tdep.o: symm-tdep.c $(defs_h) $(frame_h) $(inferior_h) $(symtab_h) \
|
||||
symmisc.o: symmisc.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(bfd_h) \
|
||||
$(symfile_h) $(objfiles_h) $(breakpoint_h) $(command_h) \
|
||||
$(gdb_obstack_h) $(language_h) $(bcache_h) $(gdb_string_h) \
|
||||
$(readline_h)
|
||||
$(readline_h) $(block_h)
|
||||
symtab.o: symtab.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(gdbcore_h) \
|
||||
$(frame_h) $(target_h) $(value_h) $(symfile_h) $(objfiles_h) \
|
||||
$(gdbcmd_h) $(call_cmds_h) $(gdb_regex_h) $(expression_h) \
|
||||
$(language_h) $(demangle_h) $(inferior_h) $(linespec_h) \
|
||||
$(filenames_h) $(gdb_obstack_h) $(gdb_string_h) $(gdb_stat_h) \
|
||||
$(cp_abi_h) $(source_h)
|
||||
$(cp_abi_h) $(source_h) $(block_h)
|
||||
target.o: target.c $(defs_h) $(gdb_string_h) $(target_h) $(gdbcmd_h) \
|
||||
$(symtab_h) $(inferior_h) $(bfd_h) $(symfile_h) $(objfiles_h) \
|
||||
$(gdb_wait_h) $(dcache_h) $(regcache_h)
|
||||
@ -2238,8 +2244,8 @@ top.o: top.c $(defs_h) $(gdbcmd_h) $(call_cmds_h) $(cli_cmds_h) \
|
||||
tracepoint.o: tracepoint.c $(defs_h) $(symtab_h) $(frame_h) $(gdbtypes_h) \
|
||||
$(expression_h) $(gdbcmd_h) $(value_h) $(target_h) $(language_h) \
|
||||
$(gdb_string_h) $(inferior_h) $(tracepoint_h) $(remote_h) \
|
||||
$(linespec_h) $(regcache_h) $(completer_h) $(gdb_events_h) $(ax_h) \
|
||||
$(ax_gdb_h) $(readline_h)
|
||||
$(linespec_h) $(regcache_h) $(completer_h) $(gdb_events_h) \
|
||||
$(block_h) $(ax_h) $(ax_gdb_h) $(readline_h)
|
||||
typeprint.o: typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) $(symtab_h) \
|
||||
$(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) $(command_h) \
|
||||
$(gdbcmd_h) $(target_h) $(language_h) $(cp_abi_h) $(gdb_string_h)
|
||||
@ -2264,14 +2270,14 @@ valarith.o: valarith.c $(defs_h) $(value_h) $(symtab_h) $(gdbtypes_h) \
|
||||
valops.o: valops.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(value_h) $(frame_h) \
|
||||
$(inferior_h) $(gdbcore_h) $(target_h) $(demangle_h) $(language_h) \
|
||||
$(gdbcmd_h) $(regcache_h) $(cp_abi_h) $(gdb_string_h) \
|
||||
$(gdb_assert_h)
|
||||
$(gdb_assert_h) $(block_h)
|
||||
valprint.o: valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
|
||||
$(value_h) $(gdbcore_h) $(gdbcmd_h) $(target_h) $(language_h) \
|
||||
$(annotate_h) $(valprint_h) $(floatformat_h) $(doublest_h)
|
||||
values.o: values.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
|
||||
$(value_h) $(gdbcore_h) $(command_h) $(gdbcmd_h) $(target_h) \
|
||||
$(language_h) $(scm_lang_h) $(demangle_h) $(doublest_h) \
|
||||
$(gdb_assert_h) $(regcache_h)
|
||||
$(gdb_assert_h) $(regcache_h) $(block_h)
|
||||
varobj.o: varobj.c $(defs_h) $(value_h) $(expression_h) $(frame_h) \
|
||||
$(language_h) $(wrapper_h) $(gdbcmd_h) $(gdb_string_h) $(varobj_h)
|
||||
vax-tdep.o: vax-tdep.c $(defs_h) $(symtab_h) $(opcode_vax_h) $(gdbcore_h) \
|
||||
@ -2296,7 +2302,7 @@ x86-64-linux-tdep.o: x86-64-linux-tdep.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
||||
$(osabi_h)
|
||||
x86-64-tdep.o: x86-64-tdep.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
||||
$(gdbcmd_h) $(arch_utils_h) $(regcache_h) $(symfile_h) $(objfiles_h) \
|
||||
$(x86_64_tdep_h) $(dwarf2cfi_h) $(gdb_assert_h)
|
||||
$(x86_64_tdep_h) $(dwarf2cfi_h) $(gdb_assert_h) $(block_h)
|
||||
xcoffread.o: xcoffread.c $(defs_h) $(bfd_h) $(gdb_string_h) $(gdb_stat_h) \
|
||||
$(coff_internal_h) $(libcoff_h) $(coff_xcoff_h) $(libxcoff_h) \
|
||||
$(coff_rs6000_h) $(symtab_h) $(gdbtypes_h) $(symfile_h) \
|
||||
@ -2512,7 +2518,7 @@ mi-cmd-env.o: $(srcdir)/mi/mi-cmd-env.c $(defs_h) $(inferior_h) $(value_h) \
|
||||
$(environ_h) $(command_h) $(ui_out_h) $(top_h) $(gdb_string_h)
|
||||
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-env.c
|
||||
mi-cmd-stack.o: $(srcdir)/mi/mi-cmd-stack.c $(defs_h) $(target_h) $(frame_h) \
|
||||
$(value_h) $(mi_cmds_h) $(ui_out_h) $(symtab_h)
|
||||
$(value_h) $(mi_cmds_h) $(ui_out_h) $(symtab_h) $(block_h)
|
||||
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-stack.c
|
||||
mi-cmd-var.o: $(srcdir)/mi/mi-cmd-var.c $(defs_h) $(mi_cmds_h) $(ui_out_h) \
|
||||
$(mi_out_h) $(varobj_h) $(value_h) $(gdb_string_h)
|
||||
|
@ -49,6 +49,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#include "symfile.h" /* Required by objfiles.h. */
|
||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||
#include "frame.h"
|
||||
#include "block.h"
|
||||
|
||||
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
||||
as well as gratuitiously global symbol names, so we can have multiple
|
||||
|
@ -37,6 +37,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#include "gdbcore.h"
|
||||
#include "ada-lang.h"
|
||||
#include "ui-out.h"
|
||||
#include "block.h"
|
||||
|
||||
struct cleanup *unresolved_names;
|
||||
|
||||
|
@ -23,6 +23,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#include "value.h"
|
||||
#include "gdbtypes.h"
|
||||
|
||||
struct block;
|
||||
|
||||
/* A macro to reorder the bytes of an address depending on the endiannes
|
||||
of the target */
|
||||
#define EXTRACT_ADDRESS(x) ((void *) extract_address (&(x), sizeof (x)))
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "doublest.h"
|
||||
#include "arch-utils.h"
|
||||
#include "osabi.h"
|
||||
#include "block.h"
|
||||
|
||||
#include "elf-bfd.h"
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "ax.h"
|
||||
#include "ax-gdb.h"
|
||||
#include "gdb_string.h"
|
||||
#include "block.h"
|
||||
|
||||
/* To make sense of this file, you should read doc/agentexpr.texi.
|
||||
Then look at the types and enums in ax-gdb.h. For the code itself,
|
||||
|
141
gdb/block.c
Normal file
141
gdb/block.c
Normal file
@ -0,0 +1,141 @@
|
||||
/* Block-related functions for the GNU debugger, GDB.
|
||||
|
||||
Copyright 2003 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
This program 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 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "defs.h"
|
||||
#include "block.h"
|
||||
#include "symtab.h"
|
||||
#include "symfile.h"
|
||||
|
||||
/* Return Nonzero if block a is lexically nested within block b,
|
||||
or if a and b have the same pc range.
|
||||
Return zero otherwise. */
|
||||
|
||||
int
|
||||
contained_in (struct block *a, struct block *b)
|
||||
{
|
||||
if (!a || !b)
|
||||
return 0;
|
||||
return BLOCK_START (a) >= BLOCK_START (b)
|
||||
&& BLOCK_END (a) <= BLOCK_END (b);
|
||||
}
|
||||
|
||||
|
||||
/* Return the symbol for the function which contains a specified
|
||||
lexical block, described by a struct block BL. */
|
||||
|
||||
struct symbol *
|
||||
block_function (struct block *bl)
|
||||
{
|
||||
while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
|
||||
bl = BLOCK_SUPERBLOCK (bl);
|
||||
|
||||
return BLOCK_FUNCTION (bl);
|
||||
}
|
||||
|
||||
/* Return the blockvector immediately containing the innermost lexical block
|
||||
containing the specified pc value and section, or 0 if there is none.
|
||||
PINDEX is a pointer to the index value of the block. If PINDEX
|
||||
is NULL, we don't pass this information back to the caller. */
|
||||
|
||||
struct blockvector *
|
||||
blockvector_for_pc_sect (register CORE_ADDR pc, struct sec *section,
|
||||
int *pindex, struct symtab *symtab)
|
||||
{
|
||||
register struct block *b;
|
||||
register int bot, top, half;
|
||||
struct blockvector *bl;
|
||||
|
||||
if (symtab == 0) /* if no symtab specified by caller */
|
||||
{
|
||||
/* First search all symtabs for one whose file contains our pc */
|
||||
if ((symtab = find_pc_sect_symtab (pc, section)) == 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bl = BLOCKVECTOR (symtab);
|
||||
b = BLOCKVECTOR_BLOCK (bl, 0);
|
||||
|
||||
/* Then search that symtab for the smallest block that wins. */
|
||||
/* Use binary search to find the last block that starts before PC. */
|
||||
|
||||
bot = 0;
|
||||
top = BLOCKVECTOR_NBLOCKS (bl);
|
||||
|
||||
while (top - bot > 1)
|
||||
{
|
||||
half = (top - bot + 1) >> 1;
|
||||
b = BLOCKVECTOR_BLOCK (bl, bot + half);
|
||||
if (BLOCK_START (b) <= pc)
|
||||
bot += half;
|
||||
else
|
||||
top = bot + half;
|
||||
}
|
||||
|
||||
/* Now search backward for a block that ends after PC. */
|
||||
|
||||
while (bot >= 0)
|
||||
{
|
||||
b = BLOCKVECTOR_BLOCK (bl, bot);
|
||||
if (BLOCK_END (b) > pc)
|
||||
{
|
||||
if (pindex)
|
||||
*pindex = bot;
|
||||
return bl;
|
||||
}
|
||||
bot--;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Return the blockvector immediately containing the innermost lexical block
|
||||
containing the specified pc value, or 0 if there is none.
|
||||
Backward compatibility, no section. */
|
||||
|
||||
struct blockvector *
|
||||
blockvector_for_pc (register CORE_ADDR pc, int *pindex)
|
||||
{
|
||||
return blockvector_for_pc_sect (pc, find_pc_mapped_section (pc),
|
||||
pindex, NULL);
|
||||
}
|
||||
|
||||
/* Return the innermost lexical block containing the specified pc value
|
||||
in the specified section, or 0 if there is none. */
|
||||
|
||||
struct block *
|
||||
block_for_pc_sect (register CORE_ADDR pc, struct sec *section)
|
||||
{
|
||||
register struct blockvector *bl;
|
||||
int index;
|
||||
|
||||
bl = blockvector_for_pc_sect (pc, section, &index, NULL);
|
||||
if (bl)
|
||||
return BLOCKVECTOR_BLOCK (bl, index);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Return the innermost lexical block containing the specified pc value,
|
||||
or 0 if there is none. Backward compatibility, no section. */
|
||||
|
||||
struct block *
|
||||
block_for_pc (register CORE_ADDR pc)
|
||||
{
|
||||
return block_for_pc_sect (pc, find_pc_mapped_section (pc));
|
||||
}
|
183
gdb/block.h
Normal file
183
gdb/block.h
Normal file
@ -0,0 +1,183 @@
|
||||
/* Code dealing with blocks for GDB.
|
||||
|
||||
Copyright 2003 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
This program 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 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef BLOCK_H
|
||||
#define BLOCK_H
|
||||
|
||||
/* Opaque declarations. */
|
||||
|
||||
struct symbol;
|
||||
struct symtab;
|
||||
|
||||
/* All of the name-scope contours of the program
|
||||
are represented by `struct block' objects.
|
||||
All of these objects are pointed to by the blockvector.
|
||||
|
||||
Each block represents one name scope.
|
||||
Each lexical context has its own block.
|
||||
|
||||
The blockvector begins with some special blocks.
|
||||
The GLOBAL_BLOCK contains all the symbols defined in this compilation
|
||||
whose scope is the entire program linked together.
|
||||
The STATIC_BLOCK contains all the symbols whose scope is the
|
||||
entire compilation excluding other separate compilations.
|
||||
Blocks starting with the FIRST_LOCAL_BLOCK are not special.
|
||||
|
||||
Each block records a range of core addresses for the code that
|
||||
is in the scope of the block. The STATIC_BLOCK and GLOBAL_BLOCK
|
||||
give, for the range of code, the entire range of code produced
|
||||
by the compilation that the symbol segment belongs to.
|
||||
|
||||
The blocks appear in the blockvector
|
||||
in order of increasing starting-address,
|
||||
and, within that, in order of decreasing ending-address.
|
||||
|
||||
This implies that within the body of one function
|
||||
the blocks appear in the order of a depth-first tree walk. */
|
||||
|
||||
struct block
|
||||
{
|
||||
|
||||
/* Addresses in the executable code that are in this block. */
|
||||
|
||||
CORE_ADDR startaddr;
|
||||
CORE_ADDR endaddr;
|
||||
|
||||
/* The symbol that names this block, if the block is the body of a
|
||||
function; otherwise, zero. */
|
||||
|
||||
struct symbol *function;
|
||||
|
||||
/* The `struct block' for the containing block, or 0 if none.
|
||||
|
||||
The superblock of a top-level local block (i.e. a function in the
|
||||
case of C) is the STATIC_BLOCK. The superblock of the
|
||||
STATIC_BLOCK is the GLOBAL_BLOCK. */
|
||||
|
||||
struct block *superblock;
|
||||
|
||||
/* Version of GCC used to compile the function corresponding
|
||||
to this block, or 0 if not compiled with GCC. When possible,
|
||||
GCC should be compatible with the native compiler, or if that
|
||||
is not feasible, the differences should be fixed during symbol
|
||||
reading. As of 16 Apr 93, this flag is never used to distinguish
|
||||
between gcc2 and the native compiler.
|
||||
|
||||
If there is no function corresponding to this block, this meaning
|
||||
of this flag is undefined. */
|
||||
|
||||
unsigned char gcc_compile_flag;
|
||||
|
||||
/* The symbols for this block are either in a simple linear list or
|
||||
in a simple hashtable. Blocks which correspond to a function
|
||||
(which have a list of symbols corresponding to arguments) use
|
||||
a linear list, as do some older symbol readers (currently only
|
||||
mdebugread and dstread). Other blocks are hashed.
|
||||
|
||||
The hashtable uses the same hash function as the minsym hashtables,
|
||||
found in minsyms.c:minsym_hash_iw. Symbols are hashed based on
|
||||
their demangled name if appropriate, and on their name otherwise.
|
||||
The hash function ignores space, and stops at the beginning of the
|
||||
argument list if any.
|
||||
|
||||
The table is laid out in NSYMS/5 buckets and symbols are chained via
|
||||
their hash_next field. */
|
||||
|
||||
/* If this is really a hashtable of the symbols, this flag is 1. */
|
||||
|
||||
unsigned char hashtable;
|
||||
|
||||
/* Number of local symbols. */
|
||||
|
||||
int nsyms;
|
||||
|
||||
/* The symbols. If some of them are arguments, then they must be
|
||||
in the order in which we would like to print them. */
|
||||
|
||||
struct symbol *sym[1];
|
||||
};
|
||||
|
||||
#define BLOCK_START(bl) (bl)->startaddr
|
||||
#define BLOCK_END(bl) (bl)->endaddr
|
||||
#define BLOCK_FUNCTION(bl) (bl)->function
|
||||
#define BLOCK_SUPERBLOCK(bl) (bl)->superblock
|
||||
#define BLOCK_GCC_COMPILED(bl) (bl)->gcc_compile_flag
|
||||
#define BLOCK_HASHTABLE(bl) (bl)->hashtable
|
||||
|
||||
/* For blocks without a hashtable (BLOCK_HASHTABLE (bl) == 0) only. */
|
||||
#define BLOCK_NSYMS(bl) (bl)->nsyms
|
||||
#define BLOCK_SYM(bl, n) (bl)->sym[n]
|
||||
|
||||
/* For blocks with a hashtable, but these are valid for non-hashed blocks as
|
||||
well - each symbol will appear to be one bucket by itself. */
|
||||
#define BLOCK_BUCKETS(bl) (bl)->nsyms
|
||||
#define BLOCK_BUCKET(bl, n) (bl)->sym[n]
|
||||
|
||||
/* Macro used to set the size of a hashtable for N symbols. */
|
||||
#define BLOCK_HASHTABLE_SIZE(n) ((n)/5 + 1)
|
||||
|
||||
/* Macro to loop through all symbols in a block BL, in no particular order.
|
||||
i counts which bucket we are in, and sym points to the current symbol. */
|
||||
|
||||
#define ALL_BLOCK_SYMBOLS(bl, i, sym) \
|
||||
for ((i) = 0; (i) < BLOCK_BUCKETS ((bl)); (i)++) \
|
||||
for ((sym) = BLOCK_BUCKET ((bl), (i)); (sym); \
|
||||
(sym) = (sym)->hash_next)
|
||||
|
||||
/* Nonzero if symbols of block BL should be sorted alphabetically.
|
||||
Don't sort a block which corresponds to a function. If we did the
|
||||
sorting would have to preserve the order of the symbols for the
|
||||
arguments. Also don't sort any block that we chose to hash. */
|
||||
|
||||
#define BLOCK_SHOULD_SORT(bl) (! BLOCK_HASHTABLE (bl) \
|
||||
&& BLOCK_FUNCTION (bl) == NULL)
|
||||
|
||||
struct blockvector
|
||||
{
|
||||
/* Number of blocks in the list. */
|
||||
int nblocks;
|
||||
/* The blocks themselves. */
|
||||
struct block *block[1];
|
||||
};
|
||||
|
||||
#define BLOCKVECTOR_NBLOCKS(blocklist) (blocklist)->nblocks
|
||||
#define BLOCKVECTOR_BLOCK(blocklist,n) (blocklist)->block[n]
|
||||
|
||||
/* Special block numbers */
|
||||
|
||||
#define GLOBAL_BLOCK 0
|
||||
#define STATIC_BLOCK 1
|
||||
#define FIRST_LOCAL_BLOCK 2
|
||||
|
||||
extern struct symbol *block_function (struct block *);
|
||||
|
||||
extern int contained_in (struct block *, struct block *);
|
||||
|
||||
extern struct blockvector *blockvector_for_pc (CORE_ADDR, int *);
|
||||
|
||||
extern struct blockvector *blockvector_for_pc_sect (CORE_ADDR, asection *,
|
||||
int *, struct symtab *);
|
||||
|
||||
extern struct block *block_for_pc (CORE_ADDR);
|
||||
|
||||
extern struct block *block_for_pc_sect (CORE_ADDR, asection *);
|
||||
|
||||
#endif /* BLOCK_H */
|
@ -38,6 +38,7 @@
|
||||
#include "dummy-frame.h"
|
||||
#include "command.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "block.h"
|
||||
|
||||
/* Prototypes for exported functions. */
|
||||
|
||||
@ -257,96 +258,6 @@ get_frame_function (struct frame_info *frame)
|
||||
}
|
||||
|
||||
|
||||
/* Return the blockvector immediately containing the innermost lexical block
|
||||
containing the specified pc value and section, or 0 if there is none.
|
||||
PINDEX is a pointer to the index value of the block. If PINDEX
|
||||
is NULL, we don't pass this information back to the caller. */
|
||||
|
||||
struct blockvector *
|
||||
blockvector_for_pc_sect (register CORE_ADDR pc, struct sec *section,
|
||||
int *pindex, struct symtab *symtab)
|
||||
{
|
||||
register struct block *b;
|
||||
register int bot, top, half;
|
||||
struct blockvector *bl;
|
||||
|
||||
if (symtab == 0) /* if no symtab specified by caller */
|
||||
{
|
||||
/* First search all symtabs for one whose file contains our pc */
|
||||
if ((symtab = find_pc_sect_symtab (pc, section)) == 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bl = BLOCKVECTOR (symtab);
|
||||
b = BLOCKVECTOR_BLOCK (bl, 0);
|
||||
|
||||
/* Then search that symtab for the smallest block that wins. */
|
||||
/* Use binary search to find the last block that starts before PC. */
|
||||
|
||||
bot = 0;
|
||||
top = BLOCKVECTOR_NBLOCKS (bl);
|
||||
|
||||
while (top - bot > 1)
|
||||
{
|
||||
half = (top - bot + 1) >> 1;
|
||||
b = BLOCKVECTOR_BLOCK (bl, bot + half);
|
||||
if (BLOCK_START (b) <= pc)
|
||||
bot += half;
|
||||
else
|
||||
top = bot + half;
|
||||
}
|
||||
|
||||
/* Now search backward for a block that ends after PC. */
|
||||
|
||||
while (bot >= 0)
|
||||
{
|
||||
b = BLOCKVECTOR_BLOCK (bl, bot);
|
||||
if (BLOCK_END (b) > pc)
|
||||
{
|
||||
if (pindex)
|
||||
*pindex = bot;
|
||||
return bl;
|
||||
}
|
||||
bot--;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Return the blockvector immediately containing the innermost lexical block
|
||||
containing the specified pc value, or 0 if there is none.
|
||||
Backward compatibility, no section. */
|
||||
|
||||
struct blockvector *
|
||||
blockvector_for_pc (register CORE_ADDR pc, int *pindex)
|
||||
{
|
||||
return blockvector_for_pc_sect (pc, find_pc_mapped_section (pc),
|
||||
pindex, NULL);
|
||||
}
|
||||
|
||||
/* Return the innermost lexical block containing the specified pc value
|
||||
in the specified section, or 0 if there is none. */
|
||||
|
||||
struct block *
|
||||
block_for_pc_sect (register CORE_ADDR pc, struct sec *section)
|
||||
{
|
||||
register struct blockvector *bl;
|
||||
int index;
|
||||
|
||||
bl = blockvector_for_pc_sect (pc, section, &index, NULL);
|
||||
if (bl)
|
||||
return BLOCKVECTOR_BLOCK (bl, index);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Return the innermost lexical block containing the specified pc value,
|
||||
or 0 if there is none. Backward compatibility, no section. */
|
||||
|
||||
struct block *
|
||||
block_for_pc (register CORE_ADDR pc)
|
||||
{
|
||||
return block_for_pc_sect (pc, find_pc_mapped_section (pc));
|
||||
}
|
||||
|
||||
/* Return the function containing pc value PC in section SECTION.
|
||||
Returns 0 if function is not known. */
|
||||
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "ui-out.h"
|
||||
#include "cli/cli-script.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
|
||||
#include "gdb-events.h"
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "gdb-events.h"
|
||||
|
||||
struct value;
|
||||
struct block;
|
||||
|
||||
/* This is the maximum number of bytes a breakpoint instruction can take.
|
||||
Feel free to increase it. It's just used in a few places to size
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "filenames.h" /* For DOSish file names */
|
||||
#include "macrotab.h"
|
||||
#include "demangle.h" /* Needed by SYMBOL_INIT_DEMANGLED_NAME. */
|
||||
#include "block.h"
|
||||
/* Ask buildsym.h to define the vars it normally declares `extern'. */
|
||||
#define EXTERN
|
||||
/**/
|
||||
|
@ -34,6 +34,8 @@
|
||||
normally extern, but which get defined in a single module using
|
||||
this technique. */
|
||||
|
||||
struct block;
|
||||
|
||||
#ifndef EXTERN
|
||||
#define EXTERN extern
|
||||
#endif
|
||||
|
@ -50,6 +50,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "symfile.h" /* Required by objfiles.h. */
|
||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||
#include "charset.h"
|
||||
#include "block.h"
|
||||
|
||||
/* Flag indicating we're dealing with HP-compiled objects */
|
||||
extern int hp_som_som_object_present;
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include "complaints.h"
|
||||
#include "target.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
|
||||
extern void _initialize_coffread (void);
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "frame.h" /* For frame_map_regnum_to_name. */
|
||||
#include "target.h"
|
||||
#include "gdb_string.h"
|
||||
#include "block.h"
|
||||
|
||||
#ifdef HAVE_CTYPE_H
|
||||
#include <ctype.h>
|
||||
|
@ -53,6 +53,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "bfd.h" /* Required by objfiles.h. */
|
||||
#include "symfile.h" /* Required by objfiles.h. */
|
||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||
#include "block.h"
|
||||
#include <ctype.h>
|
||||
|
||||
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "frame.h"
|
||||
#include "gdbcore.h"
|
||||
#include "command.h"
|
||||
#include "block.h"
|
||||
|
||||
#if 0
|
||||
static int there_is_a_visible_common_named (char *);
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "symfile.h" /* for overlay functions */
|
||||
#include "regcache.h"
|
||||
#include "builtin-regs.h"
|
||||
#include "block.h"
|
||||
|
||||
/* Basic byte-swapping routines. GDB has needed these for a long time...
|
||||
All extract a target-format integer at ADDR which is LEN bytes long. */
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
struct symtab_and_line;
|
||||
struct frame_unwind;
|
||||
struct block;
|
||||
|
||||
/* The traditional frame unwinder. */
|
||||
extern const struct frame_unwind *trad_frame_unwind;
|
||||
@ -506,10 +507,6 @@ extern CORE_ADDR frame_address_in_block (struct frame_info *);
|
||||
|
||||
extern CORE_ADDR get_pc_function_start (CORE_ADDR);
|
||||
|
||||
extern struct block *block_for_pc (CORE_ADDR);
|
||||
|
||||
extern struct block *block_for_pc_sect (CORE_ADDR, asection *);
|
||||
|
||||
extern int frameless_look_for_prologue (struct frame_info *);
|
||||
|
||||
extern void print_frame_args (struct symbol *, struct frame_info *,
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "parser-defs.h"
|
||||
#include "regcache.h"
|
||||
#include "reggroups.h"
|
||||
#include "block.h"
|
||||
#include <ctype.h>
|
||||
|
||||
/* Functions exported for general use, in inferior.h: */
|
||||
|
@ -48,6 +48,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "bfd.h" /* Required by objfiles.h. */
|
||||
#include "symfile.h" /* Required by objfiles.h. */
|
||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||
#include "block.h"
|
||||
|
||||
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
||||
as well as gratuitiously global symbol names, so we can have multiple
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "c-lang.h"
|
||||
#include "jv-lang.h"
|
||||
#include "gdbcore.h"
|
||||
#include "block.h"
|
||||
#include <ctype.h>
|
||||
|
||||
struct type *java_int_type;
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "completer.h"
|
||||
#include "cp-abi.h"
|
||||
#include "parser-defs.h"
|
||||
#include "block.h"
|
||||
|
||||
/* We share this one with symtab.c, but it is not exported widely. */
|
||||
|
||||
|
@ -50,6 +50,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "bfd.h" /* Required by objfiles.h. */
|
||||
#include "symfile.h" /* Required by objfiles.h. */
|
||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||
#include "block.h"
|
||||
|
||||
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
||||
as well as gratuitiously global symbol names, so we can have multiple
|
||||
|
@ -53,6 +53,7 @@
|
||||
#include "complaints.h"
|
||||
#include "demangle.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
|
||||
/* These are needed if the tm.h file does not contain the necessary
|
||||
mips specific definitions. */
|
||||
|
@ -1,3 +1,7 @@
|
||||
2003-02-19 David Carlton <carlton@math.stanford.edu>
|
||||
|
||||
* mi-cmd-stack.c: #include "block.h"
|
||||
|
||||
2003-02-09 Andrew Cagney <ac131313@redhat.com>
|
||||
|
||||
* mi-interp.c (mi_remove_notify_hooks): Convert function
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "mi-cmds.h"
|
||||
#include "ui-out.h"
|
||||
#include "symtab.h"
|
||||
#include "block.h"
|
||||
|
||||
/* FIXME: these should go in some .h file but stack.c doesn't have a
|
||||
corresponding .h file. These wrappers will be obsolete anyway, once
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "regcache.h"
|
||||
#include "osabi.h"
|
||||
#include "mips-tdep.h"
|
||||
#include "block.h"
|
||||
|
||||
#include "opcode/mips.h"
|
||||
#include "elf/mips.h"
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "objfiles.h"
|
||||
#include "buildsym.h"
|
||||
#include "stabsread.h"
|
||||
#include "block.h"
|
||||
|
||||
extern void _initialize_nlmread (void);
|
||||
|
||||
|
@ -52,6 +52,7 @@
|
||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols. */
|
||||
#include "top.h"
|
||||
#include "completer.h" /* For skip_quoted(). */
|
||||
#include "block.h"
|
||||
|
||||
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
|
||||
etc), as well as gratuitiously global symbol names, so we can have
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "frame.h"
|
||||
#include "gdb_regex.h"
|
||||
#include "regcache.h"
|
||||
#include "block.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
struct value;
|
||||
struct block;
|
||||
|
||||
extern int objc_parse (void); /* Defined in c-exp.y */
|
||||
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "hashtab.h"
|
||||
|
||||
#include "breakpoint.h"
|
||||
#include "block.h"
|
||||
|
||||
/* Prototypes for local functions */
|
||||
|
||||
|
@ -56,6 +56,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "bfd.h" /* Required by objfiles.h. */
|
||||
#include "symfile.h" /* Required by objfiles.h. */
|
||||
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
|
||||
#include "block.h"
|
||||
|
||||
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
|
||||
as well as gratuitiously global symbol names, so we can have multiple
|
||||
|
@ -48,6 +48,7 @@
|
||||
with "gdbarch.h" when appropriate. */
|
||||
#include "doublest.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
|
||||
|
||||
/* Symbols which architectures can redefine. */
|
||||
|
@ -28,6 +28,8 @@
|
||||
|
||||
#include "doublest.h"
|
||||
|
||||
struct block;
|
||||
|
||||
extern struct expression *expout;
|
||||
extern int expout_size;
|
||||
extern int expout_ptr;
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "completer.h" /* for completion functions */
|
||||
#include "ui-out.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
|
||||
extern int asm_demangle; /* Whether to demangle syms in asm printouts */
|
||||
extern int addressprint; /* Whether to print hex addresses in HLL " */
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "inferior.h"
|
||||
#include "annotate.h"
|
||||
#include "ui-out.h"
|
||||
#include "block.h"
|
||||
|
||||
/* Prototypes for exported functions. */
|
||||
|
||||
|
@ -47,6 +47,7 @@
|
||||
#include "hashtab.h"
|
||||
#include <readline/readline.h>
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -28,6 +28,7 @@
|
||||
/* Opaque declarations. */
|
||||
|
||||
struct obstack;
|
||||
struct block;
|
||||
|
||||
/* Partial symbols are stored in the psymbol_cache and pointers to them
|
||||
are kept in a dynamically grown array that is obtained from malloc and
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "gdb_obstack.h"
|
||||
#include "language.h"
|
||||
#include "bcache.h"
|
||||
#include "block.h"
|
||||
|
||||
#include "gdb_string.h"
|
||||
#include <readline/readline.h>
|
||||
|
26
gdb/symtab.c
26
gdb/symtab.c
@ -44,6 +44,7 @@
|
||||
#include "hashtab.h"
|
||||
|
||||
#include "gdb_obstack.h"
|
||||
#include "block.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
@ -1786,18 +1787,6 @@ find_active_alias (struct symbol *sym, CORE_ADDR addr)
|
||||
}
|
||||
|
||||
|
||||
/* Return the symbol for the function which contains a specified
|
||||
lexical block, described by a struct block BL. */
|
||||
|
||||
struct symbol *
|
||||
block_function (struct block *bl)
|
||||
{
|
||||
while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
|
||||
bl = BLOCK_SUPERBLOCK (bl);
|
||||
|
||||
return BLOCK_FUNCTION (bl);
|
||||
}
|
||||
|
||||
/* Find the symtab associated with PC and SECTION. Look through the
|
||||
psymtabs and read in another symtab if necessary. */
|
||||
|
||||
@ -3283,19 +3272,6 @@ rbreak_command (char *regexp, int from_tty)
|
||||
}
|
||||
|
||||
|
||||
/* Return Nonzero if block a is lexically nested within block b,
|
||||
or if a and b have the same pc range.
|
||||
Return zero otherwise. */
|
||||
int
|
||||
contained_in (struct block *a, struct block *b)
|
||||
{
|
||||
if (!a || !b)
|
||||
return 0;
|
||||
return BLOCK_START (a) >= BLOCK_START (b)
|
||||
&& BLOCK_END (a) <= BLOCK_END (b);
|
||||
}
|
||||
|
||||
|
||||
/* Helper routine for make_symbol_completion_list. */
|
||||
|
||||
static int return_val_size;
|
||||
|
157
gdb/symtab.h
157
gdb/symtab.h
@ -25,8 +25,11 @@
|
||||
#define SYMTAB_H 1
|
||||
|
||||
/* Opaque declarations. */
|
||||
|
||||
struct obstack;
|
||||
struct objfile;
|
||||
struct block;
|
||||
struct blockvector;
|
||||
|
||||
/* Don't do this; it means that if some .o's are compiled with GNU C
|
||||
and some are not (easy to do accidentally the way we configure
|
||||
@ -287,148 +290,7 @@ struct minimal_symbol
|
||||
|
||||
#define MSYMBOL_INFO(msymbol) (msymbol)->info
|
||||
#define MSYMBOL_TYPE(msymbol) (msymbol)->type
|
||||
|
||||
|
||||
|
||||
/* All of the name-scope contours of the program
|
||||
are represented by `struct block' objects.
|
||||
All of these objects are pointed to by the blockvector.
|
||||
|
||||
Each block represents one name scope.
|
||||
Each lexical context has its own block.
|
||||
|
||||
The blockvector begins with some special blocks.
|
||||
The GLOBAL_BLOCK contains all the symbols defined in this compilation
|
||||
whose scope is the entire program linked together.
|
||||
The STATIC_BLOCK contains all the symbols whose scope is the
|
||||
entire compilation excluding other separate compilations.
|
||||
Blocks starting with the FIRST_LOCAL_BLOCK are not special.
|
||||
|
||||
Each block records a range of core addresses for the code that
|
||||
is in the scope of the block. The STATIC_BLOCK and GLOBAL_BLOCK
|
||||
give, for the range of code, the entire range of code produced
|
||||
by the compilation that the symbol segment belongs to.
|
||||
|
||||
The blocks appear in the blockvector
|
||||
in order of increasing starting-address,
|
||||
and, within that, in order of decreasing ending-address.
|
||||
|
||||
This implies that within the body of one function
|
||||
the blocks appear in the order of a depth-first tree walk. */
|
||||
|
||||
struct blockvector
|
||||
{
|
||||
/* Number of blocks in the list. */
|
||||
int nblocks;
|
||||
/* The blocks themselves. */
|
||||
struct block *block[1];
|
||||
};
|
||||
|
||||
#define BLOCKVECTOR_NBLOCKS(blocklist) (blocklist)->nblocks
|
||||
#define BLOCKVECTOR_BLOCK(blocklist,n) (blocklist)->block[n]
|
||||
|
||||
/* Special block numbers */
|
||||
|
||||
#define GLOBAL_BLOCK 0
|
||||
#define STATIC_BLOCK 1
|
||||
#define FIRST_LOCAL_BLOCK 2
|
||||
|
||||
struct block
|
||||
{
|
||||
|
||||
/* Addresses in the executable code that are in this block. */
|
||||
|
||||
CORE_ADDR startaddr;
|
||||
CORE_ADDR endaddr;
|
||||
|
||||
/* The symbol that names this block, if the block is the body of a
|
||||
function; otherwise, zero. */
|
||||
|
||||
struct symbol *function;
|
||||
|
||||
/* The `struct block' for the containing block, or 0 if none.
|
||||
|
||||
The superblock of a top-level local block (i.e. a function in the
|
||||
case of C) is the STATIC_BLOCK. The superblock of the
|
||||
STATIC_BLOCK is the GLOBAL_BLOCK. */
|
||||
|
||||
struct block *superblock;
|
||||
|
||||
/* Version of GCC used to compile the function corresponding
|
||||
to this block, or 0 if not compiled with GCC. When possible,
|
||||
GCC should be compatible with the native compiler, or if that
|
||||
is not feasible, the differences should be fixed during symbol
|
||||
reading. As of 16 Apr 93, this flag is never used to distinguish
|
||||
between gcc2 and the native compiler.
|
||||
|
||||
If there is no function corresponding to this block, this meaning
|
||||
of this flag is undefined. */
|
||||
|
||||
unsigned char gcc_compile_flag;
|
||||
|
||||
/* The symbols for this block are either in a simple linear list or
|
||||
in a simple hashtable. Blocks which correspond to a function
|
||||
(which have a list of symbols corresponding to arguments) use
|
||||
a linear list, as do some older symbol readers (currently only
|
||||
mdebugread and dstread). Other blocks are hashed.
|
||||
|
||||
The hashtable uses the same hash function as the minsym hashtables,
|
||||
found in minsyms.c:minsym_hash_iw. Symbols are hashed based on
|
||||
their demangled name if appropriate, and on their name otherwise.
|
||||
The hash function ignores space, and stops at the beginning of the
|
||||
argument list if any.
|
||||
|
||||
The table is laid out in NSYMS/5 buckets and symbols are chained via
|
||||
their hash_next field. */
|
||||
|
||||
/* If this is really a hashtable of the symbols, this flag is 1. */
|
||||
|
||||
unsigned char hashtable;
|
||||
|
||||
/* Number of local symbols. */
|
||||
|
||||
int nsyms;
|
||||
|
||||
/* The symbols. If some of them are arguments, then they must be
|
||||
in the order in which we would like to print them. */
|
||||
|
||||
struct symbol *sym[1];
|
||||
};
|
||||
|
||||
#define BLOCK_START(bl) (bl)->startaddr
|
||||
#define BLOCK_END(bl) (bl)->endaddr
|
||||
#define BLOCK_FUNCTION(bl) (bl)->function
|
||||
#define BLOCK_SUPERBLOCK(bl) (bl)->superblock
|
||||
#define BLOCK_GCC_COMPILED(bl) (bl)->gcc_compile_flag
|
||||
#define BLOCK_HASHTABLE(bl) (bl)->hashtable
|
||||
|
||||
/* For blocks without a hashtable (BLOCK_HASHTABLE (bl) == 0) only. */
|
||||
#define BLOCK_NSYMS(bl) (bl)->nsyms
|
||||
#define BLOCK_SYM(bl, n) (bl)->sym[n]
|
||||
|
||||
/* For blocks with a hashtable, but these are valid for non-hashed blocks as
|
||||
well - each symbol will appear to be one bucket by itself. */
|
||||
#define BLOCK_BUCKETS(bl) (bl)->nsyms
|
||||
#define BLOCK_BUCKET(bl, n) (bl)->sym[n]
|
||||
|
||||
/* Macro used to set the size of a hashtable for N symbols. */
|
||||
#define BLOCK_HASHTABLE_SIZE(n) ((n)/5 + 1)
|
||||
|
||||
/* Macro to loop through all symbols in a block BL, in no particular order.
|
||||
i counts which bucket we are in, and sym points to the current symbol. */
|
||||
|
||||
#define ALL_BLOCK_SYMBOLS(bl, i, sym) \
|
||||
for ((i) = 0; (i) < BLOCK_BUCKETS ((bl)); (i)++) \
|
||||
for ((sym) = BLOCK_BUCKET ((bl), (i)); (sym); \
|
||||
(sym) = (sym)->hash_next)
|
||||
|
||||
/* Nonzero if symbols of block BL should be sorted alphabetically.
|
||||
Don't sort a block which corresponds to a function. If we did the
|
||||
sorting would have to preserve the order of the symbols for the
|
||||
arguments. Also don't sort any block that we chose to hash. */
|
||||
|
||||
#define BLOCK_SHOULD_SORT(bl) (! BLOCK_HASHTABLE (bl) \
|
||||
&& BLOCK_FUNCTION (bl) == NULL)
|
||||
|
||||
|
||||
/* Represent one symbol name; a variable, constant, function or typedef. */
|
||||
@ -1054,10 +916,6 @@ extern struct type *lookup_union (char *, struct block *);
|
||||
|
||||
extern struct type *lookup_enum (char *, struct block *);
|
||||
|
||||
/* lookup the function corresponding to the block */
|
||||
|
||||
extern struct symbol *block_function (struct block *);
|
||||
|
||||
/* from blockframe.c: */
|
||||
|
||||
/* lookup the function symbol corresponding to the address */
|
||||
@ -1112,8 +970,6 @@ extern struct partial_symbol *find_pc_sect_psymbol (struct partial_symtab *,
|
||||
|
||||
extern int find_pc_line_pc_range (CORE_ADDR, CORE_ADDR *, CORE_ADDR *);
|
||||
|
||||
extern int contained_in (struct block *, struct block *);
|
||||
|
||||
extern void reread_symbols (void);
|
||||
|
||||
extern struct type *lookup_transparent_type (const char *);
|
||||
@ -1317,13 +1173,6 @@ extern struct symtab *find_line_symtab (struct symtab *, int, int *, int *);
|
||||
extern struct symtab_and_line find_function_start_sal (struct symbol *sym,
|
||||
int);
|
||||
|
||||
/* blockframe.c */
|
||||
|
||||
extern struct blockvector *blockvector_for_pc (CORE_ADDR, int *);
|
||||
|
||||
extern struct blockvector *blockvector_for_pc_sect (CORE_ADDR, asection *,
|
||||
int *, struct symtab *);
|
||||
|
||||
/* symfile.c */
|
||||
|
||||
extern void clear_symtab_users (void);
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "regcache.h"
|
||||
#include "completer.h"
|
||||
#include "gdb-events.h"
|
||||
#include "block.h"
|
||||
|
||||
#include "ax.h"
|
||||
#include "ax-gdb.h"
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "gdbcmd.h"
|
||||
#include "regcache.h"
|
||||
#include "cp-abi.h"
|
||||
#include "block.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include "gdb_string.h"
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define VALUE_H 1
|
||||
|
||||
struct regcache;
|
||||
struct block;
|
||||
|
||||
#include "doublest.h"
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "doublest.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "regcache.h"
|
||||
#include "block.h"
|
||||
|
||||
/* Prototypes for exported functions. */
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "x86-64-tdep.h"
|
||||
#include "dwarf2cfi.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
|
||||
/* Register numbers of various important registers. */
|
||||
#define RAX_REGNUM 0
|
||||
|
Loading…
Reference in New Issue
Block a user