import gdb-1999-09-08 snapshot
This commit is contained in:
parent
325188ecac
commit
d4f3574e77
201 changed files with 8614 additions and 4843 deletions
459
gdb/ChangeLog
459
gdb/ChangeLog
|
@ -1,3 +1,462 @@
|
||||||
|
1999-09-07 J.T. Conklin <jtc@redback.com>
|
||||||
|
|
||||||
|
* i386-stub.c (exceptionHook, oldExceptionHook): Removed.
|
||||||
|
(handle_exception): Removed #if'd out exception hook code.
|
||||||
|
|
||||||
|
* i386-stub.c, m68k-stub.c (error): Removed unused variable.
|
||||||
|
|
||||||
|
* i386-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
|
||||||
|
sparcl-stub.c, sparclet-stub.c (remcomInBuffer, remcomOutBuffer):
|
||||||
|
Make static.
|
||||||
|
|
||||||
|
Tue Sep 7 14:06:22 1999 Kevin Buettner <kevinb@cygnus.com>
|
||||||
|
|
||||||
|
* config/i386/tm-linux.h (SOFUN_ADDRESS_MAYBE_MISSING):
|
||||||
|
Define.
|
||||||
|
|
||||||
|
Tue Sep 7 08:18:01 1999 Kevin Buettner <kevinb@cygnus.com>
|
||||||
|
|
||||||
|
From Jim Blandy <jimb@cygnus.com>:
|
||||||
|
|
||||||
|
Step into calls to functions in shared libraries properly. See
|
||||||
|
the comments for SKIP_SOLIB_RESOLVER atop infrun.c for details.
|
||||||
|
* infrun.c (SKIP_SOLIB_RESOLVER): New macro.
|
||||||
|
|
||||||
|
1999-09-05 Fred Fish <fnf@cygnus.com>
|
||||||
|
|
||||||
|
* elfread.c (elf_symtab_read): Remove separately passed bfd
|
||||||
|
pointer and offset. Pick up bfd pointer from objfile, and
|
||||||
|
get offset from objfile's section_offsets.
|
||||||
|
|
||||||
|
Fri Sep 3 22:29:39 1999 Kevin Buettner <kevinb@cygnus.com>
|
||||||
|
|
||||||
|
* config/i386/tm-linux.h (REGISTER_NAMES): Changed register
|
||||||
|
named "foo" to "fopo" which more accurately describes the FPU
|
||||||
|
Operand Pointer Offset. The real reason for this change, of
|
||||||
|
course, is that many programmers use $foo as a convenience
|
||||||
|
variable and are likely to be unpleasantly surprised to find
|
||||||
|
that they're unwittingly changing the state of their ia32 FPU.
|
||||||
|
|
||||||
|
1999-09-03 Jason Molenda (jsm@bugshack.cygnus.com)
|
||||||
|
|
||||||
|
* monitor.c (monitor_supply_register): Stop scanning val string
|
||||||
|
if a newline is encountered.
|
||||||
|
|
||||||
|
1999-09-03 Jason Molenda (jsm@bugshack.cygnus.com)
|
||||||
|
|
||||||
|
monitor.c (TARGET_BUF_SIZE): New macro, defined to 2048.
|
||||||
|
(monitor_expect_regexp, monitor_wait, monitor_dump_reg_block,
|
||||||
|
monitor_dump_reg_block): Dump hard-coded constants in favor
|
||||||
|
of TARGET_BUF_SIZE.
|
||||||
|
|
||||||
|
(readchar): Re-enable output of characters read from monitor when
|
||||||
|
remotedebug is set.
|
||||||
|
|
||||||
|
(monitor_supply_register): Use ULONGEST to hold value.
|
||||||
|
Replace strtoul() call with hand-coded loop to handle values
|
||||||
|
larger than 'long'.
|
||||||
|
|
||||||
|
(monitor_store_register): Use ULONGEST to hold value.
|
||||||
|
|
||||||
|
Fri Sep 3 00:47:44 1999 Kevin Buettner <kevinb@cygnus.com>
|
||||||
|
|
||||||
|
[Merged linux/x86 floating point code from Bill Metzenthen,
|
||||||
|
Jim Blandy, Anthony Green, H. J. Liu, and possibly others. The
|
||||||
|
following remarks are Jim Blandy's.]
|
||||||
|
|
||||||
|
* findvar.c (extract_floating): Call TARGET_EXTRACT_FLOATING, if
|
||||||
|
#defined.
|
||||||
|
(store_floating): Call TARGET_STORE_FLOATING, if #defined.
|
||||||
|
|
||||||
|
* i386-tdep.c (i386_print_register, i386_do_registers_info): New
|
||||||
|
functions.
|
||||||
|
(i386_extract_return_value): GNU/Linux returns floating point
|
||||||
|
values in a floating point register too.
|
||||||
|
(set_disassembly_flavor): Add prototype.
|
||||||
|
(i386_extract_return_value): Use FPDATA_REGNUM, not FP0_REGNUM (
|
||||||
|
which wasn't the first FP data register).
|
||||||
|
(i386_do_registers_info): Use FPSTART_REGNUM and FPEND_REGNUM as
|
||||||
|
the limits of the FPU-related registers.
|
||||||
|
(i386_extract_return_value): Tell GDB how to find return values
|
||||||
|
larger than four bytes. (Thanks to Paul N. Hilfinger for the bug
|
||||||
|
report.)
|
||||||
|
|
||||||
|
* i387-tdep.c (print_387_control_word): Break out bit-splitting into...
|
||||||
|
(print_387_control_bits): New function.
|
||||||
|
(print_387_status_word): Break out bit-splitting into...
|
||||||
|
(print_387_status_bits): New function.
|
||||||
|
(i387_print_register, i387_float_info, i387_hex_float_input): New
|
||||||
|
functions.
|
||||||
|
(i387_extract_floating, i387_store_floating): New functions.
|
||||||
|
|
||||||
|
* valprint.c (print_floating): Use macro TARGET_ANALYZE_FLOATING,
|
||||||
|
if it's #defined. Tolerate values of `nonnegative' other than
|
||||||
|
zero and one.
|
||||||
|
|
||||||
|
* i386-linux-nat.c: New file.
|
||||||
|
* Makefile.in (ALLDEPFILES): Mention i386-linux-nat.c.
|
||||||
|
(i386-linux-nat.o): New rule, listing dependencies.
|
||||||
|
* config/i386/linux.mh (NATDEPFILES): Use i386-linux-nat.o, not
|
||||||
|
the plain i386v4-nat.o.
|
||||||
|
* config/i386/nm-linux.h (FETCH_INFERIOR_REGISTERS): Define.
|
||||||
|
* config/i386/xm-linux.h: Define HOST_I386.
|
||||||
|
|
||||||
|
* config/i386/tm-linux.h (FP0_REGNUM): Replaced by...
|
||||||
|
(FPSTART_REGNUM, FPCONTROL_REGNUM, FPSTATUS_REGNUM, FPTAG_REGNUM,
|
||||||
|
FPDATA_REGNUM, FPEND_REGNUM): New definitions.
|
||||||
|
(REGISTER_BYTES): Changed accordingly.
|
||||||
|
(SKIP_SOLIB_RESOLVER): #define this.
|
||||||
|
(i386_linux_skip_solib_resolver): New declaration.
|
||||||
|
(i387_float_info): Added extern decl for this function.
|
||||||
|
(TARGET_EXTRACT_FLOATING, TARGET_STORE_FLOATING,
|
||||||
|
TARGET_ANALYZE_FLOATING): Define.
|
||||||
|
(i387_extract_floating, i387_store_floating): New extern decls.
|
||||||
|
(I386_GNULINUX_TARGET): Define.
|
||||||
|
(NUM_REGS, NUM_FREGS, REGISTER_NAMES, FP0_REGNUM, FPDATA_REGNUM,
|
||||||
|
FPENV_BYTES, FPREG_RAW_SIZE, FPREG_BYTES, REGISTER_BYTES,
|
||||||
|
REGISTER_BYTE, REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE,
|
||||||
|
MAX_REGISTER_RAW_SIZE, MAX_REGISTER_VIRTUAL_SIZE,
|
||||||
|
TARGET_LONG_DOUBLE_BIT, FLOAT_INFO, DO_REGISTERS_INFO): New
|
||||||
|
definitions, perhaps overriding those inherited from
|
||||||
|
config/i386/tm-i386.h.
|
||||||
|
(i386_do_registers_info, i387_print_register, double_to_i387,
|
||||||
|
i387_to_double): New declarations.
|
||||||
|
(LD_I387): Define iff both the host and target are using i387
|
||||||
|
FPU's.
|
||||||
|
(HEX_FLOAT_INPUT, REGISTER_CONVERTIBLE,
|
||||||
|
REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW,
|
||||||
|
REGISTER_VIRTUAL_TYPE): Define these if LD_I387 is defined.
|
||||||
|
|
||||||
|
* source.c (list_command): List the right number of source lines,
|
||||||
|
even if we're at the top of the file.
|
||||||
|
|
||||||
|
1999-09-02 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
|
||||||
|
* infrun.c (step_over_function): New function, broken out from the
|
||||||
|
step_over_function label in handle_inferior_event.
|
||||||
|
(handle_inferior_event): Change a goto into a function call.
|
||||||
|
|
||||||
|
Thu Sep 2 18:26:04 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in (GDB_WERROR_CFLAGS, GBB_WARN_CFLAGS): Define.
|
||||||
|
(INTERNAL_CFLAGS): Update
|
||||||
|
* configure.in (WERROR_CFLAGS, WARN_CFLAGS): Sync with
|
||||||
|
../sim/common/aclocal.m4.
|
||||||
|
* configure: Re-generate.
|
||||||
|
|
||||||
|
Thu Sep 2 00:27:36 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in (z8k-tdep.o): For moment, don't try to compile with
|
||||||
|
-Werror. See Makefile.in.
|
||||||
|
* z8k-tdep.c (z8k_set_pointer_size): Document problem.
|
||||||
|
|
||||||
|
* config/z8k/tm-z8k.h (z8k_print_register_hook, z8k_frame_chain,
|
||||||
|
z8k_saved_pc_after_call, z8k_frame_saved_pc,
|
||||||
|
z8k_set_pointer_size): Declare.
|
||||||
|
(z8k_skip_prologue): Fix typo. Was mz8k_skip_prologue.
|
||||||
|
(FRAME_CHAIN, PRINT_REGISTER_HOOK, FRAME_SAVED_PC,
|
||||||
|
SAVED_PC_AFTER_CALL): Update.
|
||||||
|
* z8k-tdep.c (z8k_print_register_hook): Rename
|
||||||
|
z8k_print_register_hook.
|
||||||
|
(z8k_frame_chain): Rename frame_chain.
|
||||||
|
(z8k_saved_pc_after_call): Rename saved_pc_after_call.
|
||||||
|
(z8k_frame_saved_pc): Rename frame_saved_pc.
|
||||||
|
(z8k_print_register_hook): Fix printf.
|
||||||
|
(read_memory_pointer): Add declaration.
|
||||||
|
("value.h"): Include.
|
||||||
|
* Makefile.in (z8k-tdep.o): Add dependency on value.h.
|
||||||
|
|
||||||
|
* config/sparc/tm-sparc.h (PRINT_EXTRA_FRAME_INFO): Fix
|
||||||
|
printf. calls
|
||||||
|
* Makefile.in (remote-e7000.o): For moment, don't try to compile
|
||||||
|
with -Werror. See Makefile.in.
|
||||||
|
* sh-tdep.c (sh_show_regs): Fix printf calls.
|
||||||
|
* xcoffsolib.c (solib_info): Fix Printf calls.
|
||||||
|
* dink32-rom.c: #include "symfile.h" for generic_load and
|
||||||
|
"inferior.h" for write_pc.
|
||||||
|
* Makefile.in (dink32-rom.o): Update.
|
||||||
|
|
||||||
|
* config/mn10300/tm-mn10300.h (mn10300_store_struct_return),
|
||||||
|
config/mn10200/tm-mn10200.h (mn10200_store_struct_return): Add
|
||||||
|
declarations.
|
||||||
|
|
||||||
|
Tue Aug 31 00:48:27 1999 Andrew Cagney <cagney@amy.cygnus.com>
|
||||||
|
|
||||||
|
* config/mips/tm-tx49el.h (REGISTER_SIM_REGNO): Define.
|
||||||
|
|
||||||
|
* remote-sim.c (gdbsim_fetch_register, gdbsim_store_register):
|
||||||
|
Pass REGISTER_SIM_REGNO converted register number to the
|
||||||
|
simulator.
|
||||||
|
|
||||||
|
1999-09-01 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* config/i386/nm-linux.h (PREPARE_TO_PROCEED): Added argument.
|
||||||
|
|
||||||
|
1999-09-01 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
|
||||||
|
|
||||||
|
* values.c (value_virtual_fn_field): Remove unused var(s).
|
||||||
|
* thread.c (prune_threads): Ditto.
|
||||||
|
* symtab.c (lookup_transparent_type): Ditto.
|
||||||
|
(decode_line_1): Ditto.
|
||||||
|
(make_symbol_overload_list): Ditto.
|
||||||
|
* rs6000-tdep.c (frame_get_saved_regs): Ditto.
|
||||||
|
(set_processor): Ditto.
|
||||||
|
* remote.c (remote_remove_breakpoint): Ditto.
|
||||||
|
(remote_query): Ditto.
|
||||||
|
(readtty): Ditto.
|
||||||
|
* remote-sds.c (sds_fetch_registers): Ditto.
|
||||||
|
(putmessage): Ditto.
|
||||||
|
* ppcbug-rom.c (ppcbug_supply_register): Ditto.
|
||||||
|
(ppcbug_open): Remove unused prototype.
|
||||||
|
* parse.c (parse_nested_classes_for_hpacc): Remove unused var(s).
|
||||||
|
* ocd.c (ocd_open): Ditto.
|
||||||
|
(ocd_get_packet): Ditto.
|
||||||
|
* monitor.c (monitor_error): Ditto.
|
||||||
|
(monitor_wait_srec_ack): Ditto.
|
||||||
|
* main.c (main): Ditto.
|
||||||
|
* gdbtypes.c (count_virtual_fns): Ditto.
|
||||||
|
* exec.c (exec_file_command): Ditto.
|
||||||
|
|
||||||
|
* event-top.c: Include handle_sigwinch() function prototype within
|
||||||
|
appropriate #ifdef.
|
||||||
|
|
||||||
|
* eval.c (evaluate_subexp_standard): Remove unused variable.
|
||||||
|
(evaluate_subexp_standard): Remove unused variables.
|
||||||
|
* dink32-rom.c (dink32_supply_register): Remove unused variable.
|
||||||
|
* dbxread.c (elfstab_build_psymtabs): Ditto.
|
||||||
|
* command.c (do_setshow_command): Ditto.
|
||||||
|
* breakpoint.c (solib_load_unload_1): Remove unused variables 'i'
|
||||||
|
and 'sal'.
|
||||||
|
(until_break_command): Remove unused variables 'arg1' and 'arg2'.
|
||||||
|
(create_exception_catchpoint): Remove unused variable 'i'.
|
||||||
|
* ax-gdb.c (gen_sub): Remove unused variable.
|
||||||
|
(_initialize_ax_gdb): Ditto.
|
||||||
|
|
||||||
|
* ser-pipe.c (pipe_readchar): If timeout is expired return
|
||||||
|
SERIAL_TIMEOUT.
|
||||||
|
* ser-tcp.c (tcp_readchar): If timeout is expired return
|
||||||
|
SERIAL_TIMEOUT.
|
||||||
|
|
||||||
|
Wed Sep 1 15:07:25 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* version.h: New file.
|
||||||
|
* Makefile.in (version_h): Define.
|
||||||
|
(version.o): Add target.
|
||||||
|
|
||||||
|
* remote-array.c: #include "version.h".
|
||||||
|
(version): Delete extern declarations.
|
||||||
|
* Makefile.in (remote-array.o): Add dependency on version.h.
|
||||||
|
|
||||||
|
* top.c: #include "version.h".
|
||||||
|
(version, host_name, target_name): Delete extern declarations.
|
||||||
|
* Makefile.in (top.o): Add dependency on version.h.
|
||||||
|
|
||||||
|
* remote.c (remote_remove_watchpoint, remote_insert_watchpoint),
|
||||||
|
remote-array.c (array_open), remote-mips.c (send_srec),
|
||||||
|
dve3900-rom.c (store_bitmapped_register): Fix Printfs.
|
||||||
|
|
||||||
|
* mips-tdep.c (mips_print_extra_frame_info, print_unpack),
|
||||||
|
m32r-rom.c (m32r_load_section), m32r-tdep.c (m32r_frame_chain),
|
||||||
|
dsrec.c (load_srec): Fix printf problems.
|
||||||
|
|
||||||
|
Wed Sep 1 13:16:49 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in (monitor.o): For moment, don't try to compile with
|
||||||
|
-Werror. monitor.c has -Wformat problems. See Makefile.in for
|
||||||
|
more info.
|
||||||
|
|
||||||
|
Tue Aug 31 21:23:38 1999 Jeffrey A Law (law@cygnus.com)
|
||||||
|
|
||||||
|
* hppa-tdep.c (prologue_inst_adjust_sp): Correct offset computation
|
||||||
|
for doubleword store instructions.
|
||||||
|
(hppa_frame_find_saved_regs): Similarly.
|
||||||
|
|
||||||
|
Wed Sep 1 09:22:50 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* d30v-tdep.c (d30v_print_register):
|
||||||
|
(tdisassemble_command):
|
||||||
|
|
||||||
|
* d10v-tdep.c (show_regs, trace_info, tdisassemble_command): Fix
|
||||||
|
printf problems.
|
||||||
|
|
||||||
|
* remote-sim.c (dump_mem), remote-rdi.c (arm_rdi_create_inferior):
|
||||||
|
Fix printf arguments.
|
||||||
|
|
||||||
|
* remote-mips.c, mips-tdep.c: Move declaration of
|
||||||
|
``mips_set_processor_type_command'' from here.
|
||||||
|
* config/mips/tm-mips.h: To here.
|
||||||
|
* remote-array.c: #include "inferior.h".
|
||||||
|
* config/mips/tm-embed.h (remote_mips_stopped_by_watchpoint): Add
|
||||||
|
declaration.
|
||||||
|
* remote-mips.c (remote_mips_stopped_by_watchpoint): Define using
|
||||||
|
ISO-C prototype.
|
||||||
|
(monitor_supports_breakpoints): Integer variable.
|
||||||
|
|
||||||
|
* m32r-rom.c: #include "inferior.h" and <ctype.h>
|
||||||
|
* config/m32r/tm-m32r.h (m32r_write_sp): Add declaration.
|
||||||
|
|
||||||
|
* config/i960/tm-i960.h (leafproc_return, i960_pop_frame): Add
|
||||||
|
declaration.
|
||||||
|
(POP_FRAME): Call i960_pop_frame.
|
||||||
|
* i960-tdep.c (i960_pop_frame): Rename pop_frame.
|
||||||
|
* mon960-rom.c: #include "inferior.h" for declaration of write_pc.
|
||||||
|
|
||||||
|
1999-08-15 Fred Fish <fnf@cygnus.com>
|
||||||
|
|
||||||
|
* objfiles.c (objfile_relocate): Use SIZEOF_SECTION_OFFSETS when
|
||||||
|
allocating section_offsets array.
|
||||||
|
* remote-os9k.c (rombug_wait): Ditto.
|
||||||
|
* remote-vx.c (vx_add_symbols): Ditto.
|
||||||
|
* remote.c (get_offsets): Ditto.
|
||||||
|
(remote_cisco_objfile_relocate): Ditto.
|
||||||
|
* rs6000-nat.c (vmap_symtab): Ditto.
|
||||||
|
|
||||||
|
* dstread.c (dst_symfile_offsets): Set section_offsets directly instead
|
||||||
|
of returning a pointer to section offsets.
|
||||||
|
* somread.c (som_symfile_offsets): Ditto.
|
||||||
|
* xcoffread.c (xcoff_symfile_offsets): Ditto.
|
||||||
|
* symfile.c (default_symfile_offsets): Ditto.
|
||||||
|
(syms_from_objfile): The sym_offsets function has already set section
|
||||||
|
offsets and no longer returns a value.
|
||||||
|
|
||||||
|
* xcoffread.c (scan_xcoff_symtab): Eliminate section_offsets passed
|
||||||
|
separate from objfile.
|
||||||
|
(xcoff_start_psymtab): Ditto.
|
||||||
|
(START_PSYMTAB): Ditto.
|
||||||
|
* os9kread.c (read_minimal_symbols): Ditto.
|
||||||
|
(read_os9k_psymtab): Ditto.
|
||||||
|
(os9k_start_psymtab): Ditto.
|
||||||
|
(record_minimal_symbol): Ditto.
|
||||||
|
* dbxread.c (START_PSYMTAB): Ditto.
|
||||||
|
(start_psymtab): Ditto.
|
||||||
|
* mdebugread.c (START_PSYMTAB): Ditto.
|
||||||
|
(elfmdebug_build_psymtabs): Ditto.
|
||||||
|
(mdebug_build_psymtabs): Ditto.
|
||||||
|
(parse_partial_symbols): Ditto.
|
||||||
|
(new_psymtab): Ditto.
|
||||||
|
* dwarfread.c (dwarf_build_psymtabs): Ditto.
|
||||||
|
* partial-stab.h (START_PSYMTAB): Ditto.
|
||||||
|
* stabsread.h (start_psymtab): Ditto.
|
||||||
|
* dwarf2read.c (dwarf2_build_psymtabs): Ditto.
|
||||||
|
(dwarf2_build_psymtabs_easy): Ditto.
|
||||||
|
(dwarf2_build_psymtabs_hard): Ditto.
|
||||||
|
* hp-psymtab-read.c (hpread_build_psymtabs): Ditto.
|
||||||
|
(hpread_quick_traverse): Ditto.
|
||||||
|
(hpread_start_psymtab): Ditto.
|
||||||
|
(scan_procs): Ditto.
|
||||||
|
* hpread.c (hpread_build_psymtabs): Ditto.
|
||||||
|
* symfile.h (dwarf2_build_psymtabs): Ditto.
|
||||||
|
|
||||||
|
* dbxread.c (read_dbx_symtab): Use ANOFFSET to access section
|
||||||
|
offsets.
|
||||||
|
* core-cisco.c (get_seg_info): Make static.
|
||||||
|
* coffread.c (enter_linenos): Pass objfile instead of section
|
||||||
|
offsets.
|
||||||
|
* jv-vm.c (jv_vm_internal_lookup_symbol): Call allocate_objfile
|
||||||
|
with the right number of arguments.
|
||||||
|
|
||||||
|
* dbxread.c (dbx_symfile_read): No need to explicitly pass
|
||||||
|
text addr and size. Let read_dbx_symtab find them.
|
||||||
|
(read_dbx_symtab): Get text addr and size from objfile.
|
||||||
|
(dbx_symfile_read): Remove dead code (call to strlen);
|
||||||
|
|
||||||
|
1999-08-31 Michael Snyder <msnyder@cleaver.cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in: add rule for sol-thread.o.
|
||||||
|
Add rule for linux-thread.o.
|
||||||
|
|
||||||
|
1999-08-13 Jim Kingdon <kingdon@redhat.com>
|
||||||
|
|
||||||
|
Threads code from gdb 4.18-codefusion-990706
|
||||||
|
[Thanks to Eric Paire, H. J. Liu, Jim Blandy and others]
|
||||||
|
* infrun.c (signal_stop_update, signal_print_update,
|
||||||
|
signal_pass_update): new functions.
|
||||||
|
* inferior.h: new prototypes for above functions.
|
||||||
|
* target.h (enum strata): add thread stratum.
|
||||||
|
* linux-thread.c: new file. Support for debugging linux threads.
|
||||||
|
* config/i386/nm-linux.h: several new prototypes for above.
|
||||||
|
* config/i386/linux.mh: add linux-thread.o to NATDEPFILES.
|
||||||
|
|
||||||
|
More threads code from the same place:
|
||||||
|
* config/i386/tm-linux.h (REALTIME_LO, REALTIME_HI): Add
|
||||||
|
definitions.
|
||||||
|
* target.h (enum target_signal): Add TARGET_SIGNAL_REALTIME_32.
|
||||||
|
* target.c (signals, target_signal_from_host,
|
||||||
|
target_signal_to_host): Add clauses for
|
||||||
|
TARGET_SIGNAL_REALTIME_32.
|
||||||
|
|
||||||
|
1999-08-31 Neil Schellenberger <neil.schellenberger@crosskeys.com>
|
||||||
|
|
||||||
|
* sol-thread.c (sol_thread_detach): strip thread-id out of
|
||||||
|
inferior_pid, so that procfs_detach can't choke on it.
|
||||||
|
|
||||||
|
1999-08-31 J.T. Conklin <jtc@redback.com>
|
||||||
|
|
||||||
|
* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
|
||||||
|
sparcl-stub.c, sparclet-stub.c (getpacket): Remove 'buffer' arg,
|
||||||
|
define it as a pointer to &remcomInBuffer[0].
|
||||||
|
(handle_exception): Update.
|
||||||
|
|
||||||
|
* sparc-stub.c, sparcl-stub.c, sparclet-stub.c (handle_exception):
|
||||||
|
Removed #ifdef'd out code which implements the non-standard 'b'
|
||||||
|
(set baud rate) command.
|
||||||
|
|
||||||
|
1999-08-31 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
|
||||||
|
* infrun.c (keep_going): New function, broken out from the
|
||||||
|
keep_going label in handle_inferior_event.
|
||||||
|
(handle_inferior_event): Change more gotos into function calls.
|
||||||
|
|
||||||
|
Tue Aug 31 02:29:27 1999 Jeffrey A Law (law@cygnus.com)
|
||||||
|
|
||||||
|
* hppa-tdep.c (read_unwind_info): Handle multiple unwind sections.
|
||||||
|
|
||||||
|
Tue Aug 31 15:28:44 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* config/alpha/tm-alpha.h (PRINT_EXTRA_FRAME_INFO): Fix printf
|
||||||
|
format argument.
|
||||||
|
* alpha-tdep.c (heuristic_proc_start): Ditto.
|
||||||
|
|
||||||
|
From Stan Shebs <shebs@andros.cygnus.com>:
|
||||||
|
* defs.h (strlen_paddr): Fix prototype - add void argument list.
|
||||||
|
|
||||||
|
Tue Aug 31 14:02:12 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* defs.h (gdb_print_host_address), utils.c
|
||||||
|
(gdb_print_host_address): Rename gdb_print_address.
|
||||||
|
|
||||||
|
* expprint.c, gdbtypes.c, symmisc.c: Update.
|
||||||
|
|
||||||
|
*expprint.c: Use gdb_print_host_address when displaying native
|
||||||
|
pointers.
|
||||||
|
|
||||||
|
Sat Aug 28 14:23:29 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* scm-valprint.c (scm_ipruk), jv-valprint.c (java_value_print),
|
||||||
|
cp-valprint.c (cp_print_class_member), exec.c (exec_files_info),
|
||||||
|
remote.c (putpkt_binary, compare_sections_command,
|
||||||
|
remote_cisco_section_offsets), dcache.c (dcache_info),
|
||||||
|
breakpoint.c (break_at_finish_at_depth_command_1,
|
||||||
|
break_at_finish_command_1), symfile.c (generic_load),
|
||||||
|
(report_transfer_performance), top.c (get_prompt_1), f-valprint.c
|
||||||
|
(f_val_print), maint.c (maintenance_translate_address): Fix printf
|
||||||
|
-Wformat warnings. Use paddr, paddr_nz, sizeof_paddr, paddr_u and
|
||||||
|
paddr_d to print addresses. Change ``d'' to ``ld''.
|
||||||
|
|
||||||
|
* utils.c (strlen_paddr): New function.
|
||||||
|
|
||||||
|
Tue Aug 31 01:36:44 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* config/d30v/tm-d30v.h (d30v_frame_chain,
|
||||||
|
d30v_init_frame_pc): Add declaration.
|
||||||
|
|
||||||
|
* arc-tdep.c (arc_pop_frame): Rename pop_frame.
|
||||||
|
(arc_push_dummy_frame): Rename push_dummy_frame.
|
||||||
|
(arc_set_cpu_type_command): Add declaration.
|
||||||
|
|
||||||
|
* config/arc/tm-arc.h (arc_pop_frame, arc_push_dummy_frame): Add
|
||||||
|
declaration.
|
||||||
|
|
||||||
1999-08-30 Stan Shebs <shebs@andros.cygnus.com>
|
1999-08-30 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
|
||||||
* infrun.c (prepare_to_wait): New function, broken out from the
|
* infrun.c (prepare_to_wait): New function, broken out from the
|
||||||
|
|
|
@ -126,6 +126,8 @@ READLINE_CFLAGS = -I$(READLINE_SRC)/..
|
||||||
|
|
||||||
WARN_CFLAGS = @WARN_CFLAGS@
|
WARN_CFLAGS = @WARN_CFLAGS@
|
||||||
WERROR_CFLAGS = @WERROR_CFLAGS@
|
WERROR_CFLAGS = @WERROR_CFLAGS@
|
||||||
|
GDB_WARN_CFLAGS = $(WARN_CFLAGS)
|
||||||
|
GDB_WERROR_CFLAGS = $(WERROR_CFLAGS)
|
||||||
|
|
||||||
# Where is the INTL library? Typically in ../intl.
|
# Where is the INTL library? Typically in ../intl.
|
||||||
INTL_DIR = ../intl
|
INTL_DIR = ../intl
|
||||||
|
@ -188,8 +190,8 @@ INTERNAL_WARN_CFLAGS = \
|
||||||
$(CFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \
|
$(CFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \
|
||||||
$(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) \
|
$(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) \
|
||||||
$(BFD_CFLAGS) $(MMALLOC_CFLAGS) $(INCLUDE_CFLAGS) \
|
$(BFD_CFLAGS) $(MMALLOC_CFLAGS) $(INCLUDE_CFLAGS) \
|
||||||
$(INTL_CFLAGS) $(TUI_CFLAGS) $(ENABLE_CFLAGS) $(WARN_CFLAGS)
|
$(INTL_CFLAGS) $(TUI_CFLAGS) $(ENABLE_CFLAGS) $(GDB_WARN_CFLAGS)
|
||||||
INTERNAL_CFLAGS = $(INTERNAL_WARN_CFLAGS) $(WERROR_CFLAGS)
|
INTERNAL_CFLAGS = $(INTERNAL_WARN_CFLAGS) $(GDB_WERROR_CFLAGS)
|
||||||
|
|
||||||
# LDFLAGS is specifically reserved for setting from the command line
|
# LDFLAGS is specifically reserved for setting from the command line
|
||||||
# when running make.
|
# when running make.
|
||||||
|
@ -227,7 +229,7 @@ CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE) \
|
||||||
ADD_FILES = $(REGEX) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
|
ADD_FILES = $(REGEX) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
|
||||||
ADD_DEPS = $(REGEX1) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
|
ADD_DEPS = $(REGEX1) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
|
||||||
|
|
||||||
VERSION = 19990830
|
VERSION = 19990908
|
||||||
DIST=gdb
|
DIST=gdb
|
||||||
|
|
||||||
LINT=/usr/5bin/lint
|
LINT=/usr/5bin/lint
|
||||||
|
@ -453,6 +455,7 @@ inferior_h = inferior.h $(breakpoint_h)
|
||||||
tracepoint_h = tracepoint.h
|
tracepoint_h = tracepoint.h
|
||||||
ax_h = ax.h
|
ax_h = ax.h
|
||||||
event_loop_h = event-loop.h
|
event_loop_h = event-loop.h
|
||||||
|
version_h = version.h
|
||||||
|
|
||||||
# Header files that need to have srcdir added. Note that in the cases
|
# Header files that need to have srcdir added. Note that in the cases
|
||||||
# where we use a macro like $(gdbcmd_h), things are carefully arranged
|
# where we use a macro like $(gdbcmd_h), things are carefully arranged
|
||||||
|
@ -829,9 +832,12 @@ copying.c: COPYING copying.awk
|
||||||
awk -f $(srcdir)/copying.awk < $(srcdir)/COPYING > copying.c
|
awk -f $(srcdir)/copying.awk < $(srcdir)/COPYING > copying.c
|
||||||
|
|
||||||
version.c: Makefile
|
version.c: Makefile
|
||||||
echo 'char *version = "$(VERSION)";' >version.c
|
rm -f version.c
|
||||||
echo 'char *host_name = "$(host_alias)";' >> version.c
|
echo '#include "version.h"' >> version.c
|
||||||
echo 'char *target_name = "$(target_alias)";' >> version.c
|
echo 'const char version[] = "$(VERSION)";' >> version.c
|
||||||
|
echo 'const char host_name[] = "$(host_alias)";' >> version.c
|
||||||
|
echo 'const char target_name[] = "$(target_alias)";' >> version.c
|
||||||
|
version.o: version.c $(version_h)
|
||||||
|
|
||||||
# c-exp.tab.c is generated in objdir from c-exp.y if it doesn't exist
|
# c-exp.tab.c is generated in objdir from c-exp.y if it doesn't exist
|
||||||
# in srcdir, then compiled in objdir to c-exp.tab.o.
|
# in srcdir, then compiled in objdir to c-exp.tab.o.
|
||||||
|
@ -942,7 +948,7 @@ ALLDEPFILES = 29k-share/udi/udip2soc.c 29k-share/udi/udr.c \
|
||||||
gould-tdep.c gould-xdep.c h8300-tdep.c h8500-tdep.c \
|
gould-tdep.c gould-xdep.c h8300-tdep.c h8500-tdep.c \
|
||||||
hp300ux-nat.c hppa-tdep.c hppab-nat.c hppah-nat.c \
|
hp300ux-nat.c hppa-tdep.c hppab-nat.c hppah-nat.c \
|
||||||
hp-psymtab-read.c hp-symtab-read.c \
|
hp-psymtab-read.c hp-symtab-read.c \
|
||||||
i386-tdep.c i386b-nat.c i386mach-nat.c i386v-nat.c \
|
i386-tdep.c i386b-nat.c i386mach-nat.c i386v-nat.c i386-linux-nat.c \
|
||||||
i386aix-nat.c i386m3-nat.c i386v4-nat.c i386ly-tdep.c \
|
i386aix-nat.c i386m3-nat.c i386v4-nat.c i386ly-tdep.c \
|
||||||
i387-tdep.c \
|
i387-tdep.c \
|
||||||
i960-tdep.c \
|
i960-tdep.c \
|
||||||
|
@ -1092,7 +1098,7 @@ delta68-nat.o: delta68-nat.c $(defs_h)
|
||||||
demangle.o: demangle.c $(defs_h) $(gdbcmd_h) gdb_string.h
|
demangle.o: demangle.c $(defs_h) $(gdbcmd_h) gdb_string.h
|
||||||
|
|
||||||
dink32-rom.o: dink32-rom.c monitor.h $(bfd_h) $(wait_h) $(defs_h) $(gdbcmd_h) \
|
dink32-rom.o: dink32-rom.c monitor.h $(bfd_h) $(wait_h) $(defs_h) $(gdbcmd_h) \
|
||||||
$(inferior_h) target.h serial.h terminal.h
|
$(inferior_h) target.h serial.h terminal.h symfile.h
|
||||||
|
|
||||||
dpx2-nat.o: dpx2-nat.c $(defs_h) $(gdbcore_h) gdb_string.h
|
dpx2-nat.o: dpx2-nat.c $(defs_h) $(gdbcore_h) gdb_string.h
|
||||||
|
|
||||||
|
@ -1190,6 +1196,9 @@ i386mach-nat.o: i386mach-nat.c $(defs_h) $(gdbcore_h) $(inferior_h)
|
||||||
i386v-nat.o: i386v-nat.c $(floatformat_h) $(defs_h) $(gdbcore_h) \
|
i386v-nat.o: i386v-nat.c $(floatformat_h) $(defs_h) $(gdbcore_h) \
|
||||||
$(inferior_h) language.h target.h
|
$(inferior_h) language.h target.h
|
||||||
|
|
||||||
|
i386-linux-nat.o: i386-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
||||||
|
$(symtab_h) $(frame_h) $(symfile_h) $(objfiles_h)
|
||||||
|
|
||||||
i386v4-nat.o: i386v4-nat.c $(defs_h)
|
i386v4-nat.o: i386v4-nat.c $(defs_h)
|
||||||
|
|
||||||
i387-tdep.o: i387-tdep.c $(floatformat_h) $(defs_h) $(gdbcore_h) \
|
i387-tdep.o: i387-tdep.c $(floatformat_h) $(defs_h) $(gdbcore_h) \
|
||||||
|
@ -1309,8 +1318,14 @@ mipsread.o: mipsread.c buildsym.h complaints.h $(bfd_h) $(defs_h) \
|
||||||
|
|
||||||
mipsv4-nat.o: mipsv4-nat.c $(defs_h) $(gdbcore_h) $(inferior_h) target.h
|
mipsv4-nat.o: mipsv4-nat.c $(defs_h) $(gdbcore_h) $(inferior_h) target.h
|
||||||
|
|
||||||
|
# FIXME: Monitor.c has -Wformat problems. The code using the macros
|
||||||
|
# RDEBUG and EXTRA_RDEBUG needs be replaced with something that:
|
||||||
|
# doesn't cause -Wformat errors; sends all output to gdb_stdlog
|
||||||
|
# instead of stdout; and controls the output throug a ``set
|
||||||
|
# monitordebug'' command/variable. cagney, 1999-09-01.
|
||||||
monitor.o: monitor.c monitor.h $(bfd_h) $(wait_h) $(defs_h) $(gdbcmd_h) \
|
monitor.o: monitor.c monitor.h $(bfd_h) $(wait_h) $(defs_h) $(gdbcmd_h) \
|
||||||
$(inferior_h) target.h serial.h terminal.h gdb_string.h
|
$(inferior_h) target.h serial.h terminal.h gdb_string.h
|
||||||
|
$(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) $<
|
||||||
|
|
||||||
news-xdep.o: news-xdep.c
|
news-xdep.o: news-xdep.c
|
||||||
|
|
||||||
|
@ -1382,6 +1397,12 @@ printcmd.o: printcmd.c $(breakpoint_h) $(defs_h) $(expression_h) \
|
||||||
procfs.o: procfs.c $(command_h) $(defs_h) $(gdbcore_h) $(inferior_h) \
|
procfs.o: procfs.c $(command_h) $(defs_h) $(gdbcore_h) $(inferior_h) \
|
||||||
target.h gdb_string.h
|
target.h gdb_string.h
|
||||||
|
|
||||||
|
sol-thread.o: sol-thread.c $(defs_h) gdbthread.h target.h $(inferior_h) \
|
||||||
|
$(gdbcmd_h)
|
||||||
|
|
||||||
|
linux-thread.o: linux-thread.c $(breakpoint_h) $(gdbcmd_h) $(wait_h) \
|
||||||
|
gdbthread.h $(gdbcore_h) $(inferior_h) target.h $(defs_h)
|
||||||
|
|
||||||
# OBSOLETE pyr-tdep.o: pyr-tdep.c $(defs_h)
|
# OBSOLETE pyr-tdep.o: pyr-tdep.c $(defs_h)
|
||||||
|
|
||||||
# OBSOLETE pyr-xdep.o: pyr-xdep.c $(defs_h) $(gdbcore_h) $(inferior_h)
|
# OBSOLETE pyr-xdep.o: pyr-xdep.c $(defs_h) $(gdbcore_h) $(inferior_h)
|
||||||
|
@ -1392,7 +1413,8 @@ remote-adapt.o: remote-adapt.c $(wait_h) $(defs_h) $(gdbcore_h) \
|
||||||
$(inferior_h) target.h terminal.h gdb_string.h
|
$(inferior_h) target.h terminal.h gdb_string.h
|
||||||
|
|
||||||
remote-array.o: remote-array.c $(wait_h) $(defs_h) $(gdbcore_h) target.h \
|
remote-array.o: remote-array.c $(wait_h) $(defs_h) $(gdbcore_h) target.h \
|
||||||
gdb_string.h $(command_h) serial.h monitor.h $(remote_utils_h)
|
gdb_string.h $(command_h) serial.h monitor.h $(remote_utils_h) \
|
||||||
|
$(version_h)
|
||||||
|
|
||||||
remote-rdi.o: remote-rdi.c $(wait_h) $(defs_h) $(gdbcore_h) \
|
remote-rdi.o: remote-rdi.c $(wait_h) $(defs_h) $(gdbcore_h) \
|
||||||
$(inferior_h) gdb_string.h
|
$(inferior_h) gdb_string.h
|
||||||
|
@ -1416,8 +1438,13 @@ remote-rdp.o: remote-rdp.c $(wait_h) $(defs_h) $(gdbcore_h) \
|
||||||
remote-bug.o: remote-bug.c $(wait_h) $(defs_h) $(gdbcore_h) \
|
remote-bug.o: remote-bug.c $(wait_h) $(defs_h) $(gdbcore_h) \
|
||||||
$(inferior_h) target.h terminal.h $(remote_utils_h) gdb_string.h
|
$(inferior_h) target.h terminal.h $(remote_utils_h) gdb_string.h
|
||||||
|
|
||||||
|
# FIXME: For the SH target, remote-e7000 contains numerous -Wformat
|
||||||
|
# warnings. Since the fixes involve modifications to the code that
|
||||||
|
# handles the SH remote protocol the changes need to be tested against
|
||||||
|
# an SH board before they can be committed. cagney 1999-09-01.
|
||||||
remote-e7000.o: remote-e7000.c $(defs_h) $(gdbcore_h) target.h \
|
remote-e7000.o: remote-e7000.c $(defs_h) $(gdbcore_h) target.h \
|
||||||
$(wait_h) serial.h gdb_string.h
|
$(wait_h) serial.h gdb_string.h
|
||||||
|
$(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) $<
|
||||||
|
|
||||||
remote-eb.o: remote-eb.c $(wait_h) $(srcdir)/config/a29k/tm-a29k.h \
|
remote-eb.o: remote-eb.c $(wait_h) $(srcdir)/config/a29k/tm-a29k.h \
|
||||||
$(defs_h) $(gdbcore_h) $(inferior_h) symfile.h target.h terminal.h \
|
$(defs_h) $(gdbcore_h) $(inferior_h) symfile.h target.h terminal.h \
|
||||||
|
@ -1587,7 +1614,7 @@ thread.o: thread.c $(defs_h) gdbthread.h $(gdbcmd_h) target.h
|
||||||
|
|
||||||
top.o: top.c top.h $(bfd_h) $(getopt_h) $(readline_headers) call-cmds.h \
|
top.o: top.c top.h $(bfd_h) $(getopt_h) $(readline_headers) call-cmds.h \
|
||||||
$(defs_h) $(gdbcmd_h) $(inferior_h) language.h signals.h \
|
$(defs_h) $(gdbcmd_h) $(inferior_h) language.h signals.h \
|
||||||
$(remote_utils_h) gdb_string.h $(event_loop_h)
|
$(remote_utils_h) gdb_string.h $(event_loop_h) $(version_h)
|
||||||
|
|
||||||
typeprint.o: typeprint.c $(defs_h) $(expression_h) $(gdbcmd_h) \
|
typeprint.o: typeprint.c $(defs_h) $(expression_h) $(gdbcmd_h) \
|
||||||
$(gdbcore_h) $(gdbtypes_h) language.h $(symtab_h) target.h \
|
$(gdbcore_h) $(gdbtypes_h) language.h $(symtab_h) target.h \
|
||||||
|
@ -1645,8 +1672,12 @@ xcoffread.o: xcoffread.c $(bfd_h) $(INCLUDE_DIR)/aout/stab.def \
|
||||||
|
|
||||||
xcoffsolib.o: xcoffsolib.c $(bfd_h) $(defs_h) xcoffsolib.h
|
xcoffsolib.o: xcoffsolib.c $(bfd_h) $(defs_h) xcoffsolib.h
|
||||||
|
|
||||||
|
# FIXME: z8k-tdep.c calls _initialize_gdbtypes(). Since that isn't
|
||||||
|
# declared -Wimplicit fails. It should be using the GDBARCH framework.
|
||||||
|
# cagney 1999-09-02.
|
||||||
z8k-tdep.o: z8k-tdep.c $(bfd_h) $(dis-asm_h) $(defs_h) $(frame_h) \
|
z8k-tdep.o: z8k-tdep.c $(bfd_h) $(dis-asm_h) $(defs_h) $(frame_h) \
|
||||||
$(gdbcmd_h) $(gdbtypes_h) $(symtab_h) $(gdbcore_h)
|
$(gdbcmd_h) $(gdbtypes_h) $(symtab_h) $(gdbcore_h) $(value_h)
|
||||||
|
$(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) $<
|
||||||
|
|
||||||
c-exp.tab.o: c-exp.tab.c c-lang.h $(defs_h) $(expression_h) \
|
c-exp.tab.o: c-exp.tab.c c-lang.h $(defs_h) $(expression_h) \
|
||||||
$(gdbtypes_h) language.h parser-defs.h $(symtab_h) $(value_h) \
|
$(gdbtypes_h) language.h parser-defs.h $(symtab_h) $(value_h) \
|
||||||
|
|
|
@ -465,7 +465,7 @@ heuristic_proc_start (pc)
|
||||||
else
|
else
|
||||||
warning ("Hit heuristic-fence-post without finding");
|
warning ("Hit heuristic-fence-post without finding");
|
||||||
|
|
||||||
warning ("enclosing function for address 0x%lx", pc);
|
warning ("enclosing function for address 0x%s", paddr_nz (pc));
|
||||||
if (!blurb_printed)
|
if (!blurb_printed)
|
||||||
{
|
{
|
||||||
printf_filtered ("\
|
printf_filtered ("\
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
#include "gdbcmd.h"
|
#include "gdbcmd.h"
|
||||||
|
|
||||||
|
/* Local functions */
|
||||||
|
|
||||||
|
static int arc_set_cpu_type (char *str);
|
||||||
|
|
||||||
/* Current CPU, set with the "set cpu" command. */
|
/* Current CPU, set with the "set cpu" command. */
|
||||||
static int arc_bfd_mach_type;
|
static int arc_bfd_mach_type;
|
||||||
char *arc_cpu_type;
|
char *arc_cpu_type;
|
||||||
|
@ -404,7 +408,7 @@ frame_find_saved_regs (fip, fsrp)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
push_dummy_frame ()
|
arc_push_dummy_frame (void)
|
||||||
{
|
{
|
||||||
CORE_ADDR sp = read_register (SP_REGNUM);
|
CORE_ADDR sp = read_register (SP_REGNUM);
|
||||||
int regnum;
|
int regnum;
|
||||||
|
@ -425,7 +429,7 @@ push_dummy_frame ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pop_frame ()
|
arc_pop_frame (void)
|
||||||
{
|
{
|
||||||
struct frame_info *frame = get_current_frame ();
|
struct frame_info *frame = get_current_frame ();
|
||||||
CORE_ADDR fp;
|
CORE_ADDR fp;
|
||||||
|
@ -641,9 +645,7 @@ arc_print_insn (vma, info)
|
||||||
/* Command to set cpu type. */
|
/* Command to set cpu type. */
|
||||||
|
|
||||||
void
|
void
|
||||||
arc_set_cpu_type_command (args, from_tty)
|
arc_set_cpu_type_command (char *args, int from_tty)
|
||||||
char *args;
|
|
||||||
int from_tty;
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -677,7 +679,7 @@ arc_show_cpu_type_command (args, from_tty)
|
||||||
/* Modify the actual cpu type.
|
/* Modify the actual cpu type.
|
||||||
Result is a boolean indicating success. */
|
Result is a boolean indicating success. */
|
||||||
|
|
||||||
int
|
static int
|
||||||
arc_set_cpu_type (str)
|
arc_set_cpu_type (str)
|
||||||
char *str;
|
char *str;
|
||||||
{
|
{
|
||||||
|
|
|
@ -1049,8 +1049,6 @@ gen_sub (ax, value, value1, value2)
|
||||||
struct agent_expr *ax;
|
struct agent_expr *ax;
|
||||||
struct axs_value *value, *value1, *value2;
|
struct axs_value *value, *value1, *value2;
|
||||||
{
|
{
|
||||||
struct type *element;
|
|
||||||
|
|
||||||
if (value1->type->code == TYPE_CODE_PTR)
|
if (value1->type->code == TYPE_CODE_PTR)
|
||||||
{
|
{
|
||||||
/* Is it PTR - INT? */
|
/* Is it PTR - INT? */
|
||||||
|
@ -1943,8 +1941,6 @@ void _initialize_ax_gdb PARAMS ((void));
|
||||||
void
|
void
|
||||||
_initialize_ax_gdb ()
|
_initialize_ax_gdb ()
|
||||||
{
|
{
|
||||||
struct cmd_list_element *c;
|
|
||||||
|
|
||||||
add_cmd ("agent", class_maintenance, agent_command,
|
add_cmd ("agent", class_maintenance, agent_command,
|
||||||
"Translate an expression into remote agent bytecode.",
|
"Translate an expression into remote agent bytecode.",
|
||||||
&maintenancelist);
|
&maintenancelist);
|
||||||
|
|
|
@ -3415,10 +3415,8 @@ solib_load_unload_1 (hookname, tempflag, dll_pathname, cond_string, bp_kind)
|
||||||
{
|
{
|
||||||
struct breakpoint *b;
|
struct breakpoint *b;
|
||||||
struct symtabs_and_lines sals;
|
struct symtabs_and_lines sals;
|
||||||
struct symtab_and_line sal;
|
|
||||||
struct cleanup *old_chain;
|
struct cleanup *old_chain;
|
||||||
struct cleanup *canonical_strings_chain = NULL;
|
struct cleanup *canonical_strings_chain = NULL;
|
||||||
int i;
|
|
||||||
char *addr_start = hookname;
|
char *addr_start = hookname;
|
||||||
char *addr_end = NULL;
|
char *addr_end = NULL;
|
||||||
char **canonical = (char **) NULL;
|
char **canonical = (char **) NULL;
|
||||||
|
@ -4101,9 +4099,9 @@ break_at_finish_at_depth_command_1 (arg, flag, from_tty)
|
||||||
{
|
{
|
||||||
addr_string = (char *) xmalloc (26 + extra_args_len);
|
addr_string = (char *) xmalloc (26 + extra_args_len);
|
||||||
if (extra_args_len)
|
if (extra_args_len)
|
||||||
sprintf (addr_string, "*0x%x %s", high, extra_args);
|
sprintf (addr_string, "*0x%s %s", paddr_nz (high), extra_args);
|
||||||
else
|
else
|
||||||
sprintf (addr_string, "*0x%x", high);
|
sprintf (addr_string, "*0x%s", paddr_nz (high));
|
||||||
break_command_1 (addr_string, flag, from_tty);
|
break_command_1 (addr_string, flag, from_tty);
|
||||||
free (addr_string);
|
free (addr_string);
|
||||||
}
|
}
|
||||||
|
@ -4138,7 +4136,7 @@ break_at_finish_command_1 (arg, flag, from_tty)
|
||||||
if (selected_frame)
|
if (selected_frame)
|
||||||
{
|
{
|
||||||
addr_string = (char *) xmalloc (15);
|
addr_string = (char *) xmalloc (15);
|
||||||
sprintf (addr_string, "*0x%x", selected_frame->pc);
|
sprintf (addr_string, "*0x%s", paddr_nz (selected_frame->pc));
|
||||||
if (arg)
|
if (arg)
|
||||||
if_arg = 1;
|
if_arg = 1;
|
||||||
}
|
}
|
||||||
|
@ -4186,9 +4184,9 @@ break_at_finish_command_1 (arg, flag, from_tty)
|
||||||
{
|
{
|
||||||
break_string = (char *) xmalloc (extra_args_len + 26);
|
break_string = (char *) xmalloc (extra_args_len + 26);
|
||||||
if (extra_args_len)
|
if (extra_args_len)
|
||||||
sprintf (break_string, "*0x%x %s", high, extra_args);
|
sprintf (break_string, "*0x%s %s", paddr_nz (high), extra_args);
|
||||||
else
|
else
|
||||||
sprintf (break_string, "*0x%x", high);
|
sprintf (break_string, "*0x%s", paddr_nz (high));
|
||||||
break_command_1 (break_string, flag, from_tty);
|
break_command_1 (break_string, flag, from_tty);
|
||||||
free (break_string);
|
free (break_string);
|
||||||
}
|
}
|
||||||
|
@ -4666,7 +4664,6 @@ until_break_command (arg, from_tty)
|
||||||
struct frame_info *prev_frame = get_prev_frame (selected_frame);
|
struct frame_info *prev_frame = get_prev_frame (selected_frame);
|
||||||
struct breakpoint *breakpoint;
|
struct breakpoint *breakpoint;
|
||||||
struct cleanup *old_chain;
|
struct cleanup *old_chain;
|
||||||
struct continuation_arg *arg1, *arg2;
|
|
||||||
|
|
||||||
clear_proceed_status ();
|
clear_proceed_status ();
|
||||||
|
|
||||||
|
@ -5238,7 +5235,6 @@ create_exception_catchpoint (tempflag, cond_string, ex_event, sal)
|
||||||
struct symtab_and_line *sal;
|
struct symtab_and_line *sal;
|
||||||
{
|
{
|
||||||
struct breakpoint *b;
|
struct breakpoint *b;
|
||||||
int i;
|
|
||||||
int thread = -1; /* All threads. */
|
int thread = -1; /* All threads. */
|
||||||
|
|
||||||
if (!sal) /* no exception support? */
|
if (!sal) /* no exception support? */
|
||||||
|
|
|
@ -201,7 +201,7 @@ static void patch_opaque_types PARAMS ((struct symtab *));
|
||||||
|
|
||||||
static void patch_type PARAMS ((struct type *, struct type *));
|
static void patch_type PARAMS ((struct type *, struct type *));
|
||||||
|
|
||||||
static void enter_linenos PARAMS ((long, int, int, struct section_offsets *));
|
static void enter_linenos PARAMS ((long, int, int, struct objfile *));
|
||||||
|
|
||||||
static void free_linetab PARAMS ((void));
|
static void free_linetab PARAMS ((void));
|
||||||
|
|
||||||
|
@ -1081,7 +1081,7 @@ coff_symtab_read (symtab_offset, nsyms, objfile)
|
||||||
fcn_first_line_addr);
|
fcn_first_line_addr);
|
||||||
else
|
else
|
||||||
enter_linenos (fcn_line_ptr, fcn_first_line, fcn_last_line,
|
enter_linenos (fcn_line_ptr, fcn_first_line, fcn_last_line,
|
||||||
objfile->section_offsets);
|
objfile);
|
||||||
|
|
||||||
finish_block (new->name, &local_symbols, new->old_blocks,
|
finish_block (new->name, &local_symbols, new->old_blocks,
|
||||||
new->start_addr,
|
new->start_addr,
|
||||||
|
@ -1389,11 +1389,11 @@ free_linetab ()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
enter_linenos (file_offset, first_line, last_line, section_offsets)
|
enter_linenos (file_offset, first_line, last_line, objfile)
|
||||||
long file_offset;
|
long file_offset;
|
||||||
register int first_line;
|
register int first_line;
|
||||||
register int last_line;
|
register int last_line;
|
||||||
struct section_offsets *section_offsets;
|
struct objfile *objfile;
|
||||||
{
|
{
|
||||||
register char *rawptr;
|
register char *rawptr;
|
||||||
struct internal_lineno lptr;
|
struct internal_lineno lptr;
|
||||||
|
@ -1423,7 +1423,7 @@ enter_linenos (file_offset, first_line, last_line, section_offsets)
|
||||||
if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line)
|
if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line)
|
||||||
record_line (current_subfile, first_line + L_LNNO32 (&lptr),
|
record_line (current_subfile, first_line + L_LNNO32 (&lptr),
|
||||||
lptr.l_addr.l_paddr
|
lptr.l_addr.l_paddr
|
||||||
+ ANOFFSET (section_offsets, SECT_OFF_TEXT));
|
+ ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT));
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1374,8 +1374,6 @@ do_setshow_command (arg, from_tty, c)
|
||||||
{
|
{
|
||||||
case var_string:
|
case var_string:
|
||||||
{
|
{
|
||||||
unsigned char *p;
|
|
||||||
|
|
||||||
fputs_filtered ("\"", gdb_stdout);
|
fputs_filtered ("\"", gdb_stdout);
|
||||||
if (*(unsigned char **) c->var)
|
if (*(unsigned char **) c->var)
|
||||||
fputstr_filtered (*(unsigned char **) c->var, '"', gdb_stdout);
|
fputstr_filtered (*(unsigned char **) c->var, '"', gdb_stdout);
|
||||||
|
|
|
@ -408,7 +408,7 @@ init_extra_frame_info PARAMS ((struct frame_info *));
|
||||||
#define PRINT_EXTRA_FRAME_INFO(fi) \
|
#define PRINT_EXTRA_FRAME_INFO(fi) \
|
||||||
{ \
|
{ \
|
||||||
if (fi && fi->proc_desc && fi->proc_desc->pdr.framereg < NUM_REGS) \
|
if (fi && fi->proc_desc && fi->proc_desc->pdr.framereg < NUM_REGS) \
|
||||||
printf_filtered (" frame pointer is at %s+%d\n", \
|
printf_filtered (" frame pointer is at %s+%ld\n", \
|
||||||
REGISTER_NAME (fi->proc_desc->pdr.framereg), \
|
REGISTER_NAME (fi->proc_desc->pdr.framereg), \
|
||||||
fi->proc_desc->pdr.frameoffset); \
|
fi->proc_desc->pdr.frameoffset); \
|
||||||
}
|
}
|
||||||
|
|
|
@ -309,12 +309,14 @@ extern void frame_find_saved_regs (); /* See arc-tdep.c */
|
||||||
|
|
||||||
|
|
||||||
/* Things needed for making calls to functions in the inferior process */
|
/* Things needed for making calls to functions in the inferior process */
|
||||||
|
void arc_push_dummy_frame (void);
|
||||||
#define PUSH_DUMMY_FRAME \
|
#define PUSH_DUMMY_FRAME \
|
||||||
push_dummy_frame ()
|
arc_push_dummy_frame ()
|
||||||
|
|
||||||
/* Discard from the stack the innermost frame, restoring all registers. */
|
/* Discard from the stack the innermost frame, restoring all registers. */
|
||||||
|
void arc_pop_frame (void);
|
||||||
#define POP_FRAME \
|
#define POP_FRAME \
|
||||||
pop_frame ()
|
arc_pop_frame ()
|
||||||
|
|
||||||
/* This sequence of words is the instructions bl xxxx, flag 1 */
|
/* This sequence of words is the instructions bl xxxx, flag 1 */
|
||||||
#define CALL_DUMMY { 0x28000000, 0x1fbe8001 }
|
#define CALL_DUMMY { 0x28000000, 0x1fbe8001 }
|
||||||
|
|
|
@ -215,6 +215,7 @@ extern void d30v_init_extra_frame_info PARAMS ((int fromleaf, struct frame_info
|
||||||
#define FRAMELESS_FUNCTION_INVOCATION(FI) \
|
#define FRAMELESS_FUNCTION_INVOCATION(FI) \
|
||||||
(frameless_look_for_prologue (FI))
|
(frameless_look_for_prologue (FI))
|
||||||
|
|
||||||
|
CORE_ADDR d30v_frame_chain (struct frame_info *frame);
|
||||||
#define FRAME_CHAIN(FRAME) d30v_frame_chain(FRAME)
|
#define FRAME_CHAIN(FRAME) d30v_frame_chain(FRAME)
|
||||||
extern int d30v_frame_chain_valid PARAMS ((CORE_ADDR, struct frame_info *));
|
extern int d30v_frame_chain_valid PARAMS ((CORE_ADDR, struct frame_info *));
|
||||||
#define FRAME_CHAIN_VALID(chain, thisframe) d30v_frame_chain_valid (chain, thisframe)
|
#define FRAME_CHAIN_VALID(chain, thisframe) d30v_frame_chain_valid (chain, thisframe)
|
||||||
|
@ -222,6 +223,7 @@ extern int d30v_frame_chain_valid PARAMS ((CORE_ADDR, struct frame_info *));
|
||||||
#define FRAME_ARGS_ADDRESS(fi) (fi)->frame
|
#define FRAME_ARGS_ADDRESS(fi) (fi)->frame
|
||||||
#define FRAME_LOCALS_ADDRESS(fi) (fi)->frame
|
#define FRAME_LOCALS_ADDRESS(fi) (fi)->frame
|
||||||
|
|
||||||
|
void d30v_init_frame_pc (int fromleaf, struct frame_info *prev);
|
||||||
#define INIT_FRAME_PC_FIRST(fromleaf, prev) d30v_init_frame_pc(fromleaf, prev)
|
#define INIT_FRAME_PC_FIRST(fromleaf, prev) d30v_init_frame_pc(fromleaf, prev)
|
||||||
#define INIT_FRAME_PC(fromleaf, prev) /* nada */
|
#define INIT_FRAME_PC(fromleaf, prev) /* nada */
|
||||||
|
|
||||||
|
|
|
@ -4,4 +4,5 @@ XM_FILE= xm-linux.h
|
||||||
XDEPFILES= ser-tcp.o
|
XDEPFILES= ser-tcp.o
|
||||||
|
|
||||||
NAT_FILE= nm-linux.h
|
NAT_FILE= nm-linux.h
|
||||||
NATDEPFILES= infptrace.o solib.o inftarg.o fork-child.o corelow.o core-aout.o core-regset.o i386v-nat.o i386v4-nat.o
|
NATDEPFILES= infptrace.o solib.o inftarg.o fork-child.o corelow.o \
|
||||||
|
core-aout.o core-regset.o i386v-nat.o i386-linux-nat.o linux-thread.o
|
||||||
|
|
|
@ -64,6 +64,9 @@ extern int kernel_u_size PARAMS ((void));
|
||||||
#include "solib.h" /* Support for shared libraries. */
|
#include "solib.h" /* Support for shared libraries. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Override copies of {fetch,store}_inferior_registers in infptrace.c. */
|
||||||
|
#define FETCH_INFERIOR_REGISTERS
|
||||||
|
|
||||||
extern CORE_ADDR
|
extern CORE_ADDR
|
||||||
i386_stopped_by_watchpoint PARAMS ((int));
|
i386_stopped_by_watchpoint PARAMS ((int));
|
||||||
extern int
|
extern int
|
||||||
|
@ -71,4 +74,22 @@ i386_insert_watchpoint PARAMS ((int pid, CORE_ADDR addr, int len, int rw));
|
||||||
extern int
|
extern int
|
||||||
i386_remove_watchpoint PARAMS ((int pid, CORE_ADDR addr, int len));
|
i386_remove_watchpoint PARAMS ((int pid, CORE_ADDR addr, int len));
|
||||||
|
|
||||||
|
/* Support for the glibc linuxthreads package. */
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
struct objfile;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void
|
||||||
|
linuxthreads_new_objfile PARAMS ((struct objfile *objfile));
|
||||||
|
#define target_new_objfile(OBJFILE) linuxthreads_new_objfile (OBJFILE)
|
||||||
|
|
||||||
|
extern char *
|
||||||
|
linuxthreads_pid_to_str PARAMS ((int pid));
|
||||||
|
#define target_pid_to_str(PID) linuxthreads_pid_to_str (PID)
|
||||||
|
|
||||||
|
extern int
|
||||||
|
linuxthreads_prepare_to_proceed PARAMS ((int step));
|
||||||
|
#define PREPARE_TO_PROCEED(select_it) linuxthreads_prepare_to_proceed (1)
|
||||||
|
|
||||||
#endif /* #ifndef NM_LINUX_H */
|
#endif /* #ifndef NM_LINUX_H */
|
||||||
|
|
|
@ -21,8 +21,7 @@
|
||||||
#ifndef TM_LINUX_H
|
#ifndef TM_LINUX_H
|
||||||
#define TM_LINUX_H
|
#define TM_LINUX_H
|
||||||
|
|
||||||
/* FIXME: If nothing else gets added to this file, it could be removed
|
#define I386_GNULINUX_TARGET
|
||||||
and configure could just use tm-i386.h instead. -fnf */
|
|
||||||
|
|
||||||
#include "i386/tm-i386.h"
|
#include "i386/tm-i386.h"
|
||||||
|
|
||||||
|
@ -39,9 +38,196 @@
|
||||||
|
|
||||||
#include "tm-sysv4.h"
|
#include "tm-sysv4.h"
|
||||||
|
|
||||||
|
/* copy of tm-cygwin32.h */
|
||||||
|
#undef REGISTER_RAW_SIZE
|
||||||
|
#undef REGISTER_VIRTUAL_SIZE
|
||||||
|
#undef REGISTER_VIRTUAL_TYPE
|
||||||
|
#undef REGISTER_NAMES
|
||||||
|
#undef REGISTER_BYTES
|
||||||
|
#undef REGISTER_BYTE
|
||||||
|
#undef MAX_REGISTER_VIRTUAL_SIZE
|
||||||
|
#undef NUM_REGS
|
||||||
|
#undef NUM_FREGS
|
||||||
|
|
||||||
|
/* Number of machine registers */
|
||||||
|
|
||||||
|
#define NUM_REGS 31
|
||||||
|
#define NUM_FREGS 15
|
||||||
|
|
||||||
|
/* Initializer for an array of names of registers.
|
||||||
|
There should be NUM_REGS strings in this initializer. */
|
||||||
|
|
||||||
|
/* the order of the first 8 registers must match the compiler's
|
||||||
|
* numbering scheme (which is the same as the 386 scheme)
|
||||||
|
* also, this table must match regmap in i386-pinsn.c.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define REGISTER_NAMES { "eax", "ecx", "edx", "ebx", \
|
||||||
|
"esp", "ebp", "esi", "edi", \
|
||||||
|
"eip", "eflags","cs", "ss", \
|
||||||
|
"ds", "es", "fs", "gs", \
|
||||||
|
"cwd", "swd", "twd", "fip", \
|
||||||
|
"fcs", "fopo", "fos", \
|
||||||
|
"st", "st1", "st2", "st3", \
|
||||||
|
"st4", "st5", "st6", "st7",}
|
||||||
|
|
||||||
|
#define LOW_RETURN_REGNUM 0 /* holds low four bytes of result */
|
||||||
|
#define HIGH_RETURN_REGNUM 2 /* holds high four bytes of result */
|
||||||
|
|
||||||
|
#define FPSTART_REGNUM 16 /* start of FPU registers */
|
||||||
|
#define FPCONTROL_REGNUM 16 /* FPU control register */
|
||||||
|
#define FPSTATUS_REGNUM 17 /* FPU status register */
|
||||||
|
#define FPTAG_REGNUM 18 /* FPU tag register */
|
||||||
|
#define FPDATA_REGNUM 23 /* actual floating-point values */
|
||||||
|
#define FPEND_REGNUM (FPSTART_REGNUM + 14) /* last FPU register */
|
||||||
|
|
||||||
|
#define FPENV_BYTES (7 * 4)
|
||||||
|
|
||||||
|
#define FPREG_RAW_SIZE (10)
|
||||||
|
|
||||||
|
/* Total amount of space needed to store our copies of the machine's
|
||||||
|
FPU state. */
|
||||||
|
|
||||||
|
#define FPREG_BYTES (FPENV_BYTES + 8 * FPREG_RAW_SIZE)
|
||||||
|
|
||||||
|
/* Total amount of space needed to store our copies of the machine's
|
||||||
|
register state, the array `registers'. */
|
||||||
|
|
||||||
|
#define REGISTER_BYTES (FPSTART_REGNUM * 4 + FPREG_BYTES)
|
||||||
|
|
||||||
|
/* Index within `registers' of the first byte of the space for
|
||||||
|
register N. */
|
||||||
|
|
||||||
|
#define REGISTER_BYTE(N) (((N) < FPDATA_REGNUM) ? \
|
||||||
|
(N) * 4 : \
|
||||||
|
(((N) - FPDATA_REGNUM) * FPREG_RAW_SIZE) \
|
||||||
|
+ (FPDATA_REGNUM * 4))
|
||||||
|
|
||||||
|
/* Number of bytes of storage in the actual machine representation
|
||||||
|
for register N. */
|
||||||
|
|
||||||
|
#define REGISTER_RAW_SIZE(N) (((N) < FPDATA_REGNUM) ? 4 : FPREG_RAW_SIZE)
|
||||||
|
|
||||||
|
/* Number of bytes of storage in the program's representation
|
||||||
|
for register N. */
|
||||||
|
|
||||||
|
#define REGISTER_VIRTUAL_SIZE(N) (((N) < FPDATA_REGNUM) ? 4 : FPREG_RAW_SIZE)
|
||||||
|
|
||||||
|
/* Largest value REGISTER_RAW_SIZE can have. */
|
||||||
|
|
||||||
|
#undef MAX_REGISTER_RAW_SIZE
|
||||||
|
#define MAX_REGISTER_RAW_SIZE FPREG_RAW_SIZE
|
||||||
|
|
||||||
|
/* Largest value REGISTER_VIRTUAL_SIZE can have. */
|
||||||
|
|
||||||
|
#define MAX_REGISTER_VIRTUAL_SIZE FPREG_RAW_SIZE
|
||||||
|
|
||||||
|
#if defined(HAVE_LONG_DOUBLE) && defined(HOST_I386)
|
||||||
|
/* The host and target are i386 machines and the compiler supports
|
||||||
|
long doubles. Long doubles on the host therefore have the same
|
||||||
|
layout as a 387 FPU stack register. */
|
||||||
|
#define LD_I387
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define TARGET_LONG_DOUBLE_BIT 80
|
||||||
|
|
||||||
|
#ifdef LD_I387
|
||||||
|
extern int i387_extract_floating (PTR addr, int len, long double *dretptr);
|
||||||
|
extern int i387_store_floating (PTR addr, int len, long double val);
|
||||||
|
|
||||||
|
#define TARGET_EXTRACT_FLOATING i387_extract_floating
|
||||||
|
#define TARGET_STORE_FLOATING i387_store_floating
|
||||||
|
|
||||||
|
#define TARGET_ANALYZE_FLOATING \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
unsigned expon; \
|
||||||
|
\
|
||||||
|
low = extract_unsigned_integer (valaddr, 4); \
|
||||||
|
high = extract_unsigned_integer (valaddr + 4, 4); \
|
||||||
|
expon = extract_unsigned_integer (valaddr + 8, 2); \
|
||||||
|
\
|
||||||
|
nonnegative = ((expon & 0x8000) == 0); \
|
||||||
|
is_nan = ((expon & 0x7fff) == 0x7fff) \
|
||||||
|
&& ((high & 0x80000000) == 0x80000000) \
|
||||||
|
&& (((high & 0x7fffffff) | low) != 0); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LD_I387
|
||||||
|
/* Nonzero if register N requires conversion
|
||||||
|
from raw format to virtual format. */
|
||||||
|
#define REGISTER_CONVERTIBLE(N) \
|
||||||
|
((N < FPDATA_REGNUM) ? 0 : 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef LD_I387
|
||||||
|
#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,TYPE,FROM,TO) \
|
||||||
|
{ \
|
||||||
|
long double val = *((long double *)FROM); \
|
||||||
|
store_floating ((TO), TYPE_LENGTH (TYPE), val); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* Convert data from raw format for register REGNUM in buffer FROM
|
||||||
|
to virtual format with type TYPE in buffer TO. */
|
||||||
|
extern void
|
||||||
|
i387_to_double PARAMS ((char *, char *));
|
||||||
|
|
||||||
|
#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,TYPE,FROM,TO) \
|
||||||
|
{ \
|
||||||
|
double val; \
|
||||||
|
i387_to_double ((FROM), (char *)&val); \
|
||||||
|
store_floating ((TO), TYPE_LENGTH (TYPE), val); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef LD_I387
|
||||||
|
#define REGISTER_CONVERT_TO_RAW(TYPE,REGNUM,FROM,TO) \
|
||||||
|
{ \
|
||||||
|
long double val = extract_floating ((FROM), TYPE_LENGTH (TYPE)); \
|
||||||
|
*((long double *)TO) = val; \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
extern void
|
||||||
|
double_to_i387 PARAMS ((char *, char *));
|
||||||
|
|
||||||
|
#define REGISTER_CONVERT_TO_RAW(TYPE,REGNUM,FROM,TO) \
|
||||||
|
{ \
|
||||||
|
double val = extract_floating ((FROM), TYPE_LENGTH (TYPE)); \
|
||||||
|
double_to_i387((char *)&val, (TO)); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Return the GDB type object for the "standard" data type
|
||||||
|
of data in register N. */
|
||||||
|
|
||||||
|
#ifdef LD_I387
|
||||||
|
#define REGISTER_VIRTUAL_TYPE(N) \
|
||||||
|
((N < FPDATA_REGNUM) ? builtin_type_int : \
|
||||||
|
builtin_type_long_double)
|
||||||
|
#else
|
||||||
|
#define REGISTER_VIRTUAL_TYPE(N) \
|
||||||
|
((N < FPDATA_REGNUM) ? builtin_type_int : \
|
||||||
|
builtin_type_double)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* end of copy */
|
||||||
|
|
||||||
|
extern void i387_float_info(void);
|
||||||
|
#define FLOAT_INFO { i387_float_info (); }
|
||||||
|
|
||||||
/* The following works around a problem with /usr/include/sys/procfs.h */
|
/* The following works around a problem with /usr/include/sys/procfs.h */
|
||||||
#define sys_quotactl 1
|
#define sys_quotactl 1
|
||||||
|
|
||||||
|
/* Define DO_REGISTERS_INFO() to do machine-specific formatting
|
||||||
|
of register dumps. */
|
||||||
|
|
||||||
|
#define DO_REGISTERS_INFO(_regnum, fp) i386_do_registers_info(_regnum, fp)
|
||||||
|
extern void i386_do_registers_info PARAMS ((int, int));
|
||||||
|
|
||||||
|
extern void i387_print_register PARAMS ((char *, int));
|
||||||
|
|
||||||
/* When the i386 Linux kernel calls a signal handler, the return
|
/* When the i386 Linux kernel calls a signal handler, the return
|
||||||
address points to a bit of code on the stack. These definitions
|
address points to a bit of code on the stack. These definitions
|
||||||
are used to identify this bit of code as a signal trampoline in
|
are used to identify this bit of code as a signal trampoline in
|
||||||
|
@ -104,4 +290,29 @@ extern CORE_ADDR i386_linux_sigtramp_saved_pc PARAMS ((struct frame_info *));
|
||||||
|
|
||||||
extern CORE_ADDR i386_linux_sigtramp_saved_sp PARAMS ((struct frame_info *));
|
extern CORE_ADDR i386_linux_sigtramp_saved_sp PARAMS ((struct frame_info *));
|
||||||
|
|
||||||
|
/* Some versions of Linux have real-time signal support in the C library, and
|
||||||
|
some don't. We have to include this file to find out. */
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#ifdef __SIGRTMIN
|
||||||
|
#define REALTIME_LO __SIGRTMIN
|
||||||
|
#define REALTIME_HI (__SIGRTMAX + 1)
|
||||||
|
#else
|
||||||
|
#define REALTIME_LO 32
|
||||||
|
#define REALTIME_HI 64
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* When we call a function in a shared library, and the PLT sends us
|
||||||
|
into the dynamic linker to find the function's real address, we
|
||||||
|
need to skip over the dynamic linker call. This function decides
|
||||||
|
when to skip, and where to skip to. See the comments for
|
||||||
|
SKIP_SOLIB_RESOLVER at the top of infrun.c. */
|
||||||
|
#define SKIP_SOLIB_RESOLVER i386_linux_skip_solib_resolver
|
||||||
|
extern CORE_ADDR i386_linux_skip_solib_resolver (CORE_ADDR pc);
|
||||||
|
|
||||||
|
/* N_FUN symbols in shared libaries have 0 for their values and need
|
||||||
|
to be relocated. */
|
||||||
|
#define SOFUN_ADDRESS_MAYBE_MISSING
|
||||||
|
|
||||||
#endif /* #ifndef TM_LINUX_H */
|
#endif /* #ifndef TM_LINUX_H */
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#ifndef XM_LINUX_H
|
#ifndef XM_LINUX_H
|
||||||
#define XM_LINUX_H
|
#define XM_LINUX_H
|
||||||
|
|
||||||
|
#define HOST_I386
|
||||||
|
|
||||||
#define HOST_BYTE_ORDER LITTLE_ENDIAN
|
#define HOST_BYTE_ORDER LITTLE_ENDIAN
|
||||||
|
|
||||||
#define HAVE_TERMIOS
|
#define HAVE_TERMIOS
|
||||||
|
|
|
@ -287,6 +287,7 @@ extern use_struct_convention_fn i960_use_struct_convention;
|
||||||
by FI does not have a frame on the stack associated with it. If it
|
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. */
|
||||||
|
|
||||||
|
CORE_ADDR leafproc_return (CORE_ADDR ip);
|
||||||
#define FRAMELESS_FUNCTION_INVOCATION(FI) \
|
#define FRAMELESS_FUNCTION_INVOCATION(FI) \
|
||||||
(leafproc_return ((FI)->pc) != 0)
|
(leafproc_return ((FI)->pc) != 0)
|
||||||
|
|
||||||
|
@ -341,8 +342,10 @@ error("Function calls into the inferior process are not supported on the i960")
|
||||||
|
|
||||||
/* Discard from the stack the innermost frame, restoring all registers. */
|
/* Discard from the stack the innermost frame, restoring all registers. */
|
||||||
|
|
||||||
|
|
||||||
|
void i960_pop_frame (void);
|
||||||
#define POP_FRAME \
|
#define POP_FRAME \
|
||||||
pop_frame ()
|
i960_pop_frame ()
|
||||||
|
|
||||||
|
|
||||||
/* This sequence of words is the instructions
|
/* This sequence of words is the instructions
|
||||||
|
|
|
@ -168,6 +168,7 @@ extern CORE_ADDR m32r_skip_prologue PARAMS ((CORE_ADDR pc));
|
||||||
|
|
||||||
#define COERCE_FLOAT_TO_DOUBLE 1
|
#define COERCE_FLOAT_TO_DOUBLE 1
|
||||||
|
|
||||||
|
extern void m32r_write_sp (CORE_ADDR val);
|
||||||
#define TARGET_WRITE_SP m32r_write_sp
|
#define TARGET_WRITE_SP m32r_write_sp
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ int remote_mips_remove_watchpoint PARAMS ((CORE_ADDR addr, int len, int type));
|
||||||
|
|
||||||
#define HAVE_NONSTEPPABLE_WATCHPOINT
|
#define HAVE_NONSTEPPABLE_WATCHPOINT
|
||||||
|
|
||||||
|
int remote_mips_stopped_by_watchpoint (void);
|
||||||
#define STOPPED_BY_WATCHPOINT(w) remote_mips_stopped_by_watchpoint ()
|
#define STOPPED_BY_WATCHPOINT(w) remote_mips_stopped_by_watchpoint ()
|
||||||
|
|
||||||
#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(type, cnt, ot) \
|
#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(type, cnt, ot) \
|
||||||
|
|
|
@ -579,3 +579,7 @@ typedef unsigned long t_inst; /* Integer big enough to hold an instruction */
|
||||||
(((long) MSYMBOL_INFO (msym) & 0x80000000) != 0)
|
(((long) MSYMBOL_INFO (msym) & 0x80000000) != 0)
|
||||||
#define MSYMBOL_SIZE(msym) \
|
#define MSYMBOL_SIZE(msym) \
|
||||||
((long) MSYMBOL_INFO (msym) & 0x7fffffff)
|
((long) MSYMBOL_INFO (msym) & 0x7fffffff)
|
||||||
|
|
||||||
|
|
||||||
|
/* Command to set the processor type. */
|
||||||
|
extern void mips_set_processor_type_command (char *, int);
|
||||||
|
|
|
@ -161,6 +161,8 @@ extern CORE_ADDR mn10200_frame_saved_pc PARAMS ((struct frame_info *));
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern CORE_ADDR mn10200_store_struct_return (CORE_ADDR addr, CORE_ADDR sp);
|
||||||
#define STORE_STRUCT_RETURN(STRUCT_ADDR, SP) \
|
#define STORE_STRUCT_RETURN(STRUCT_ADDR, SP) \
|
||||||
(SP) = mn10200_store_struct_return (STRUCT_ADDR, SP)
|
(SP) = mn10200_store_struct_return (STRUCT_ADDR, SP)
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,8 @@ void mn10300_store_return_value PARAMS ((struct type * type, char *valbuf));
|
||||||
#define STORE_RETURN_VALUE(TYPE, VALBUF) \
|
#define STORE_RETURN_VALUE(TYPE, VALBUF) \
|
||||||
mn10300_store_return_value (TYPE, VALBUF)
|
mn10300_store_return_value (TYPE, VALBUF)
|
||||||
|
|
||||||
|
|
||||||
|
extern CORE_ADDR mn10300_store_struct_return (CORE_ADDR addr, CORE_ADDR sp);
|
||||||
#define STORE_STRUCT_RETURN(STRUCT_ADDR, SP) \
|
#define STORE_STRUCT_RETURN(STRUCT_ADDR, SP) \
|
||||||
(mn10300_store_struct_return (STRUCT_ADDR, SP))
|
(mn10300_store_struct_return (STRUCT_ADDR, SP))
|
||||||
|
|
||||||
|
|
|
@ -339,8 +339,8 @@ extern void sparc_init_extra_frame_info PARAMS ((int, struct frame_info *));
|
||||||
#define PRINT_EXTRA_FRAME_INFO(fi) \
|
#define PRINT_EXTRA_FRAME_INFO(fi) \
|
||||||
{ \
|
{ \
|
||||||
if ((fi) && (fi)->flat) \
|
if ((fi) && (fi)->flat) \
|
||||||
printf_filtered (" flat, pc saved at 0x%x, fp saved at 0x%x\n", \
|
printf_filtered (" flat, pc saved at 0x%s, fp saved at 0x%s\n", \
|
||||||
(fi)->pc_addr, (fi)->fp_addr); \
|
paddr_nz ((fi)->pc_addr), paddr_nz ((fi)->fp_addr)); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FRAME_CHAIN(thisframe) (sparc_frame_chain (thisframe))
|
#define FRAME_CHAIN(thisframe) (sparc_frame_chain (thisframe))
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
to reach some "real" code. */
|
to reach some "real" code. */
|
||||||
|
|
||||||
#define SKIP_PROLOGUE(ip) (z8k_skip_prologue (ip))
|
#define SKIP_PROLOGUE(ip) (z8k_skip_prologue (ip))
|
||||||
extern CORE_ADDR mz8k_skip_prologue PARAMS ((CORE_ADDR ip));
|
extern CORE_ADDR z8k_skip_prologue PARAMS ((CORE_ADDR ip));
|
||||||
|
|
||||||
|
|
||||||
/* Immediately after a function call, return the saved pc.
|
/* Immediately after a function call, return the saved pc.
|
||||||
|
@ -50,7 +50,9 @@ extern CORE_ADDR mz8k_skip_prologue PARAMS ((CORE_ADDR ip));
|
||||||
the new frame is not set up until the new function executes
|
the new frame is not set up until the new function executes
|
||||||
some instructions. */
|
some instructions. */
|
||||||
|
|
||||||
#define SAVED_PC_AFTER_CALL(frame) saved_pc_after_call(frame)
|
|
||||||
|
extern int z8k_saved_pc_after_call (struct frame_info *frame);
|
||||||
|
#define SAVED_PC_AFTER_CALL(frame) z8k_saved_pc_after_call(frame)
|
||||||
|
|
||||||
/* Stack grows downward. */
|
/* Stack grows downward. */
|
||||||
|
|
||||||
|
@ -167,7 +169,8 @@ extern CORE_ADDR mz8k_skip_prologue PARAMS ((CORE_ADDR ip));
|
||||||
is the address of a ptr sized byte word containing the calling
|
is the address of a ptr sized byte word containing the calling
|
||||||
frame's address. */
|
frame's address. */
|
||||||
|
|
||||||
#define FRAME_CHAIN(thisframe) frame_chain(thisframe);
|
extern CORE_ADDR z8k_frame_chain (struct frame_info *thisframe);
|
||||||
|
#define FRAME_CHAIN(thisframe) z8k_frame_chain(thisframe);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,7 +182,8 @@ extern CORE_ADDR mz8k_skip_prologue PARAMS ((CORE_ADDR ip));
|
||||||
#define FRAMELESS_FUNCTION_INVOCATION(FI) \
|
#define FRAMELESS_FUNCTION_INVOCATION(FI) \
|
||||||
(frameless_look_for_prologue (FI))
|
(frameless_look_for_prologue (FI))
|
||||||
|
|
||||||
#define FRAME_SAVED_PC(FRAME) frame_saved_pc(FRAME)
|
extern CORE_ADDR z8k_frame_saved_pc (struct frame_info *frame);
|
||||||
|
#define FRAME_SAVED_PC(FRAME) z8k_frame_saved_pc(FRAME)
|
||||||
|
|
||||||
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
|
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
|
||||||
|
|
||||||
|
@ -276,9 +280,11 @@ int sim_z8001_mode;
|
||||||
|
|
||||||
#define NO_STD_REGS
|
#define NO_STD_REGS
|
||||||
|
|
||||||
#define PRINT_REGISTER_HOOK(regno) print_register_hook(regno)
|
extern void z8k_print_register_hook (int regno);
|
||||||
|
#define PRINT_REGISTER_HOOK(regno) z8k_print_register_hook(regno)
|
||||||
|
|
||||||
|
|
||||||
|
extern void z8k_set_pointer_size (int newsize);
|
||||||
#define INIT_EXTRA_SYMTAB_INFO \
|
#define INIT_EXTRA_SYMTAB_INFO \
|
||||||
z8k_set_pointer_size(objfile->obfd->arch_info->bits_per_address);
|
z8k_set_pointer_size(objfile->obfd->arch_info->bits_per_address);
|
||||||
|
|
||||||
|
|
75
gdb/configure
vendored
75
gdb/configure
vendored
|
@ -5163,10 +5163,9 @@ case "${enableval}" in
|
||||||
build_warnings="${t} ${build_warnings}";;
|
build_warnings="${t} ${build_warnings}";;
|
||||||
*) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
|
*) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
|
||||||
esac
|
esac
|
||||||
else
|
if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
|
||||||
build_warnings=""
|
echo "Setting warning flags = $build_warnings" 6>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
WARN_CFLAGS=""
|
WARN_CFLAGS=""
|
||||||
WERROR_CFLAGS=""
|
WERROR_CFLAGS=""
|
||||||
if test "x${build_warnings}" != x -a "x$GCC" = xyes
|
if test "x${build_warnings}" != x -a "x$GCC" = xyes
|
||||||
|
@ -5180,6 +5179,10 @@ then
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
build_warnings=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -5216,12 +5219,12 @@ fi
|
||||||
|
|
||||||
# In the Cygwin environment, we need some additional flags.
|
# In the Cygwin environment, we need some additional flags.
|
||||||
echo $ac_n "checking for cygwin""... $ac_c" 1>&6
|
echo $ac_n "checking for cygwin""... $ac_c" 1>&6
|
||||||
echo "configure:5343: checking for cygwin" >&5
|
echo "configure:5346: checking for cygwin" >&5
|
||||||
if eval "test \"`echo '$''{'gdb_cv_os_cygwin'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'gdb_cv_os_cygwin'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 5348 "configure"
|
#line 5351 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if defined (__CYGWIN__) || defined (__CYGWIN32__)
|
#if defined (__CYGWIN__) || defined (__CYGWIN32__)
|
||||||
|
@ -5255,7 +5258,7 @@ if test x$gdb_cv_os_cygwin = xyes; then
|
||||||
else
|
else
|
||||||
TERM_LIB=
|
TERM_LIB=
|
||||||
echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
|
echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
|
||||||
echo "configure:5382: checking for tgetent in -lncurses" >&5
|
echo "configure:5385: checking for tgetent in -lncurses" >&5
|
||||||
ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -5263,7 +5266,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lncurses $LIBS"
|
LIBS="-lncurses $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 5390 "configure"
|
#line 5393 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -5274,7 +5277,7 @@ int main() {
|
||||||
tgetent()
|
tgetent()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:5401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:5404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -5293,7 +5296,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||||
else
|
else
|
||||||
echo "$ac_t""no" 1>&6
|
echo "$ac_t""no" 1>&6
|
||||||
echo $ac_n "checking for tgetent in -lHcurses""... $ac_c" 1>&6
|
echo $ac_n "checking for tgetent in -lHcurses""... $ac_c" 1>&6
|
||||||
echo "configure:5420: checking for tgetent in -lHcurses" >&5
|
echo "configure:5423: checking for tgetent in -lHcurses" >&5
|
||||||
ac_lib_var=`echo Hcurses'_'tgetent | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo Hcurses'_'tgetent | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -5301,7 +5304,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lHcurses $LIBS"
|
LIBS="-lHcurses $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 5428 "configure"
|
#line 5431 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -5312,7 +5315,7 @@ int main() {
|
||||||
tgetent()
|
tgetent()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:5439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:5442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -5331,7 +5334,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||||
else
|
else
|
||||||
echo "$ac_t""no" 1>&6
|
echo "$ac_t""no" 1>&6
|
||||||
echo $ac_n "checking for tgetent in -ltermlib""... $ac_c" 1>&6
|
echo $ac_n "checking for tgetent in -ltermlib""... $ac_c" 1>&6
|
||||||
echo "configure:5458: checking for tgetent in -ltermlib" >&5
|
echo "configure:5461: checking for tgetent in -ltermlib" >&5
|
||||||
ac_lib_var=`echo termlib'_'tgetent | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo termlib'_'tgetent | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -5339,7 +5342,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-ltermlib $LIBS"
|
LIBS="-ltermlib $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 5466 "configure"
|
#line 5469 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -5350,7 +5353,7 @@ int main() {
|
||||||
tgetent()
|
tgetent()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:5477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:5480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -5369,7 +5372,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||||
else
|
else
|
||||||
echo "$ac_t""no" 1>&6
|
echo "$ac_t""no" 1>&6
|
||||||
echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
|
echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
|
||||||
echo "configure:5496: checking for tgetent in -ltermcap" >&5
|
echo "configure:5499: checking for tgetent in -ltermcap" >&5
|
||||||
ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -5377,7 +5380,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-ltermcap $LIBS"
|
LIBS="-ltermcap $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 5504 "configure"
|
#line 5507 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -5388,7 +5391,7 @@ int main() {
|
||||||
tgetent()
|
tgetent()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:5515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:5518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -5407,7 +5410,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||||
else
|
else
|
||||||
echo "$ac_t""no" 1>&6
|
echo "$ac_t""no" 1>&6
|
||||||
echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6
|
echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6
|
||||||
echo "configure:5534: checking for tgetent in -lcurses" >&5
|
echo "configure:5537: checking for tgetent in -lcurses" >&5
|
||||||
ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -5415,7 +5418,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lcurses $LIBS"
|
LIBS="-lcurses $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 5542 "configure"
|
#line 5545 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -5426,7 +5429,7 @@ int main() {
|
||||||
tgetent()
|
tgetent()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:5553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:5556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -5445,7 +5448,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||||
else
|
else
|
||||||
echo "$ac_t""no" 1>&6
|
echo "$ac_t""no" 1>&6
|
||||||
echo $ac_n "checking for tgetent in -lterminfo""... $ac_c" 1>&6
|
echo $ac_n "checking for tgetent in -lterminfo""... $ac_c" 1>&6
|
||||||
echo "configure:5572: checking for tgetent in -lterminfo" >&5
|
echo "configure:5575: checking for tgetent in -lterminfo" >&5
|
||||||
ac_lib_var=`echo terminfo'_'tgetent | sed 'y%./+-%__p_%'`
|
ac_lib_var=`echo terminfo'_'tgetent | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -5453,7 +5456,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lterminfo $LIBS"
|
LIBS="-lterminfo $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 5580 "configure"
|
#line 5583 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -5464,7 +5467,7 @@ int main() {
|
||||||
tgetent()
|
tgetent()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:5591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:5594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -5516,7 +5519,7 @@ fi
|
||||||
# Uses ac_ vars as temps to allow command line to override cache and checks.
|
# Uses ac_ vars as temps to allow command line to override cache and checks.
|
||||||
# --without-x overrides everything else, but does not touch the cache.
|
# --without-x overrides everything else, but does not touch the cache.
|
||||||
echo $ac_n "checking for X""... $ac_c" 1>&6
|
echo $ac_n "checking for X""... $ac_c" 1>&6
|
||||||
echo "configure:6727: checking for X" >&5
|
echo "configure:6730: checking for X" >&5
|
||||||
|
|
||||||
# Check whether --with-x or --without-x was given.
|
# Check whether --with-x or --without-x was given.
|
||||||
if test "${with_x+set}" = set; then
|
if test "${with_x+set}" = set; then
|
||||||
|
@ -5578,12 +5581,12 @@ if test "$ac_x_includes" = NO; then
|
||||||
|
|
||||||
# First, try using that file with no special directory specified.
|
# First, try using that file with no special directory specified.
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 6789 "configure"
|
#line 6792 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <$x_direct_test_include>
|
#include <$x_direct_test_include>
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:6794: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:6797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
|
@ -5652,14 +5655,14 @@ if test "$ac_x_libraries" = NO; then
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-l$x_direct_test_library $LIBS"
|
LIBS="-l$x_direct_test_library $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 6863 "configure"
|
#line 6866 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
${x_direct_test_function}()
|
${x_direct_test_function}()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:6870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:6873: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
LIBS="$ac_save_LIBS"
|
LIBS="$ac_save_LIBS"
|
||||||
# We can link X programs with no special library path.
|
# We can link X programs with no special library path.
|
||||||
|
@ -5939,12 +5942,12 @@ fi
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
|
echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
|
||||||
echo "configure:7221: checking for Cygwin environment" >&5
|
echo "configure:7224: checking for Cygwin environment" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 7226 "configure"
|
#line 7229 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -5955,7 +5958,7 @@ int main() {
|
||||||
return __CYGWIN__;
|
return __CYGWIN__;
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:7237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:7240: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_cygwin=yes
|
ac_cv_cygwin=yes
|
||||||
else
|
else
|
||||||
|
@ -5972,19 +5975,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
|
||||||
CYGWIN=
|
CYGWIN=
|
||||||
test "$ac_cv_cygwin" = yes && CYGWIN=yes
|
test "$ac_cv_cygwin" = yes && CYGWIN=yes
|
||||||
echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
|
echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
|
||||||
echo "configure:7254: checking for mingw32 environment" >&5
|
echo "configure:7257: checking for mingw32 environment" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 7259 "configure"
|
#line 7262 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
return __MINGW32__;
|
return __MINGW32__;
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:7266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:7269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_mingw32=yes
|
ac_cv_mingw32=yes
|
||||||
else
|
else
|
||||||
|
@ -6003,7 +6006,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
|
echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
|
||||||
echo "configure:7285: checking for executable suffix" >&5
|
echo "configure:7288: checking for executable suffix" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -6013,7 +6016,7 @@ else
|
||||||
rm -f conftest*
|
rm -f conftest*
|
||||||
echo 'int main () { return 0; }' > conftest.$ac_ext
|
echo 'int main () { return 0; }' > conftest.$ac_ext
|
||||||
ac_cv_exeext=
|
ac_cv_exeext=
|
||||||
if { (eval echo configure:7295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
|
if { (eval echo configure:7298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
|
||||||
for file in conftest.*; do
|
for file in conftest.*; do
|
||||||
case $file in
|
case $file in
|
||||||
*.c | *.o | *.obj) ;;
|
*.c | *.o | *.obj) ;;
|
||||||
|
|
|
@ -399,8 +399,10 @@ case "${enableval}" in
|
||||||
*,) t=`echo "${enableval}" | sed -e "s/,/ /g"`
|
*,) t=`echo "${enableval}" | sed -e "s/,/ /g"`
|
||||||
build_warnings="${t} ${build_warnings}";;
|
build_warnings="${t} ${build_warnings}";;
|
||||||
*) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
|
*) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
|
||||||
esac],[build_warnings=""])dnl
|
esac
|
||||||
|
if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
|
||||||
|
echo "Setting warning flags = $build_warnings" 6>&1
|
||||||
|
fi
|
||||||
WARN_CFLAGS=""
|
WARN_CFLAGS=""
|
||||||
WERROR_CFLAGS=""
|
WERROR_CFLAGS=""
|
||||||
if test "x${build_warnings}" != x -a "x$GCC" = xyes
|
if test "x${build_warnings}" != x -a "x$GCC" = xyes
|
||||||
|
@ -413,7 +415,8 @@ then
|
||||||
*) WARN_CFLAGS="${WARN_CFLAGS} $w"
|
*) WARN_CFLAGS="${WARN_CFLAGS} $w"
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
fi
|
fi],[build_warnings=""])dnl
|
||||||
|
|
||||||
AC_SUBST(WARN_CFLAGS)
|
AC_SUBST(WARN_CFLAGS)
|
||||||
AC_SUBST(WERROR_CFLAGS)
|
AC_SUBST(WERROR_CFLAGS)
|
||||||
|
|
||||||
|
|
|
@ -726,7 +726,7 @@ cp_print_class_member (valaddr, domain, stream, prefix)
|
||||||
fprintf_filtered (stream, " (offset in bits)");
|
fprintf_filtered (stream, " (offset in bits)");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fprintf_filtered (stream, "%d", val >> 3);
|
fprintf_filtered (stream, "%ld", (long) (val >> 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -729,34 +729,35 @@ show_regs (args, from_tty)
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
int a;
|
int a;
|
||||||
printf_filtered ("PC=%04x (0x%x) PSW=%04x RPT_S=%04x RPT_E=%04x RPT_C=%04x\n",
|
printf_filtered ("PC=%04lx (0x%lx) PSW=%04lx RPT_S=%04lx RPT_E=%04lx RPT_C=%04lx\n",
|
||||||
read_register (PC_REGNUM), D10V_MAKE_IADDR (read_register (PC_REGNUM)),
|
(long) read_register (PC_REGNUM),
|
||||||
read_register (PSW_REGNUM),
|
(long) D10V_MAKE_IADDR (read_register (PC_REGNUM)),
|
||||||
read_register (24),
|
(long) read_register (PSW_REGNUM),
|
||||||
read_register (25),
|
(long) read_register (24),
|
||||||
read_register (23));
|
(long) read_register (25),
|
||||||
printf_filtered ("R0-R7 %04x %04x %04x %04x %04x %04x %04x %04x\n",
|
(long) read_register (23));
|
||||||
read_register (0),
|
printf_filtered ("R0-R7 %04lx %04lx %04lx %04lx %04lx %04lx %04lx %04lx\n",
|
||||||
read_register (1),
|
(long) read_register (0),
|
||||||
read_register (2),
|
(long) read_register (1),
|
||||||
read_register (3),
|
(long) read_register (2),
|
||||||
read_register (4),
|
(long) read_register (3),
|
||||||
read_register (5),
|
(long) read_register (4),
|
||||||
read_register (6),
|
(long) read_register (5),
|
||||||
read_register (7));
|
(long) read_register (6),
|
||||||
printf_filtered ("R8-R15 %04x %04x %04x %04x %04x %04x %04x %04x\n",
|
(long) read_register (7));
|
||||||
read_register (8),
|
printf_filtered ("R8-R15 %04lx %04lx %04lx %04lx %04lx %04lx %04lx %04lx\n",
|
||||||
read_register (9),
|
(long) read_register (8),
|
||||||
read_register (10),
|
(long) read_register (9),
|
||||||
read_register (11),
|
(long) read_register (10),
|
||||||
read_register (12),
|
(long) read_register (11),
|
||||||
read_register (13),
|
(long) read_register (12),
|
||||||
read_register (14),
|
(long) read_register (13),
|
||||||
read_register (15));
|
(long) read_register (14),
|
||||||
printf_filtered ("IMAP0 %04x IMAP1 %04x DMAP %04x\n",
|
(long) read_register (15));
|
||||||
read_register (IMAP0_REGNUM),
|
printf_filtered ("IMAP0 %04lx IMAP1 %04lx DMAP %04lx\n",
|
||||||
read_register (IMAP1_REGNUM),
|
(long) read_register (IMAP0_REGNUM),
|
||||||
read_register (DMAP_REGNUM));
|
(long) read_register (IMAP1_REGNUM),
|
||||||
|
(long) read_register (DMAP_REGNUM));
|
||||||
printf_filtered ("A0-A1");
|
printf_filtered ("A0-A1");
|
||||||
for (a = A0_REGNUM; a <= A0_REGNUM + 1; a++)
|
for (a = A0_REGNUM; a <= A0_REGNUM + 1; a++)
|
||||||
{
|
{
|
||||||
|
@ -1129,10 +1130,11 @@ trace_info (args, from_tty)
|
||||||
|
|
||||||
for (i = 0; i < trace_data.size; ++i)
|
for (i = 0; i < trace_data.size; ++i)
|
||||||
{
|
{
|
||||||
printf_filtered ("%d: %d instruction%s at 0x%x\n",
|
printf_filtered ("%d: %d instruction%s at 0x%s\n",
|
||||||
i, trace_data.counts[i],
|
i,
|
||||||
|
trace_data.counts[i],
|
||||||
(trace_data.counts[i] == 1 ? "" : "s"),
|
(trace_data.counts[i] == 1 ? "" : "s"),
|
||||||
trace_data.addrs[i]);
|
paddr_nz (trace_data.addrs[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1261,7 +1263,7 @@ tdisassemble_command (arg, from_tty)
|
||||||
high = low;
|
high = low;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_filtered ("Dump of trace from %d to %d:\n", low, high);
|
printf_filtered ("Dump of trace from %s to %s:\n", paddr_u (low), paddr_u (high));
|
||||||
|
|
||||||
display_trace (low, high);
|
display_trace (low, high);
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
#include "symfile.h"
|
#include "symfile.h"
|
||||||
#include "objfiles.h"
|
#include "objfiles.h"
|
||||||
|
|
||||||
|
#include "language.h" /* For local_hex_string() */
|
||||||
|
|
||||||
void d30v_frame_find_saved_regs PARAMS ((struct frame_info * fi,
|
void d30v_frame_find_saved_regs PARAMS ((struct frame_info * fi,
|
||||||
struct frame_saved_regs * fsr));
|
struct frame_saved_regs * fsr));
|
||||||
void d30v_frame_find_saved_regs_offsets PARAMS ((struct frame_info * fi,
|
void d30v_frame_find_saved_regs_offsets PARAMS ((struct frame_info * fi,
|
||||||
|
@ -727,10 +729,11 @@ d30v_print_register (regnum, tabular)
|
||||||
if (regnum < A0_REGNUM)
|
if (regnum < A0_REGNUM)
|
||||||
{
|
{
|
||||||
if (tabular)
|
if (tabular)
|
||||||
printf_filtered ("%08x", read_register (regnum));
|
printf_filtered ("%08lx", (long) read_register (regnum));
|
||||||
else
|
else
|
||||||
printf_filtered ("0x%x %d", read_register (regnum),
|
printf_filtered ("0x%lx %ld",
|
||||||
read_register (regnum));
|
(long) read_register (regnum),
|
||||||
|
(long) read_register (regnum));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1162,10 +1165,10 @@ trace_info (args, from_tty)
|
||||||
|
|
||||||
for (i = 0; i < trace_data.size; ++i)
|
for (i = 0; i < trace_data.size; ++i)
|
||||||
{
|
{
|
||||||
printf_filtered ("%d: %d instruction%s at 0x%x\n",
|
printf_filtered ("%d: %d instruction%s at 0x%s\n",
|
||||||
i, trace_data.counts[i],
|
i, trace_data.counts[i],
|
||||||
(trace_data.counts[i] == 1 ? "" : "s"),
|
(trace_data.counts[i] == 1 ? "" : "s"),
|
||||||
trace_data.addrs[i]);
|
paddr_nz (trace_data.addrs[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1294,7 +1297,9 @@ tdisassemble_command (arg, from_tty)
|
||||||
high = low;
|
high = low;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_filtered ("Dump of trace from %d to %d:\n", low, high);
|
printf_filtered ("Dump of trace from %s to %s:\n",
|
||||||
|
paddr_u (low),
|
||||||
|
paddr_u (high));
|
||||||
|
|
||||||
display_trace (low, high);
|
display_trace (low, high);
|
||||||
|
|
||||||
|
|
|
@ -289,7 +289,7 @@ static void
|
||||||
read_dbx_dynamic_symtab PARAMS ((struct objfile * objfile));
|
read_dbx_dynamic_symtab PARAMS ((struct objfile * objfile));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_dbx_symtab PARAMS ((struct objfile *, CORE_ADDR, int));
|
read_dbx_symtab PARAMS ((struct objfile *));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_bincl_list PARAMS ((struct objfile *));
|
free_bincl_list PARAMS ((struct objfile *));
|
||||||
|
@ -333,6 +333,10 @@ add_old_header_file PARAMS ((char *, int));
|
||||||
static void
|
static void
|
||||||
add_this_object_header_file PARAMS ((int));
|
add_this_object_header_file PARAMS ((int));
|
||||||
|
|
||||||
|
static struct partial_symtab *
|
||||||
|
start_psymtab PARAMS ((struct objfile *, char *, CORE_ADDR, int,
|
||||||
|
struct partial_symbol **, struct partial_symbol **));
|
||||||
|
|
||||||
/* Free up old header file tables */
|
/* Free up old header file tables */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -571,8 +575,6 @@ record_minimal_symbol (name, address, type, objfile)
|
||||||
put all the relevant info into a "struct dbx_symfile_info",
|
put all the relevant info into a "struct dbx_symfile_info",
|
||||||
hung off the objfile structure.
|
hung off the objfile structure.
|
||||||
|
|
||||||
SECTION_OFFSETS contains offsets relative to which the symbols in the
|
|
||||||
various sections are (depending where the sections were actually loaded).
|
|
||||||
MAINLINE is true if we are reading the main symbol
|
MAINLINE is true if we are reading the main symbol
|
||||||
table (as opposed to a shared lib or dynamically loaded file). */
|
table (as opposed to a shared lib or dynamically loaded file). */
|
||||||
|
|
||||||
|
@ -585,8 +587,6 @@ dbx_symfile_read (objfile, mainline)
|
||||||
int val;
|
int val;
|
||||||
struct cleanup *back_to;
|
struct cleanup *back_to;
|
||||||
|
|
||||||
val = strlen (objfile->name);
|
|
||||||
|
|
||||||
sym_bfd = objfile->obfd;
|
sym_bfd = objfile->obfd;
|
||||||
|
|
||||||
/* .o and .nlm files are relocatables with text, data and bss segs based at
|
/* .o and .nlm files are relocatables with text, data and bss segs based at
|
||||||
|
@ -625,12 +625,9 @@ dbx_symfile_read (objfile, mainline)
|
||||||
init_minimal_symbol_collection ();
|
init_minimal_symbol_collection ();
|
||||||
make_cleanup ((make_cleanup_func) discard_minimal_symbols, 0);
|
make_cleanup ((make_cleanup_func) discard_minimal_symbols, 0);
|
||||||
|
|
||||||
/* Now that the symbol table data of the executable file are all in core,
|
/* Read stabs data from executable file and define symbols. */
|
||||||
process them and define symbols accordingly. */
|
|
||||||
|
|
||||||
read_dbx_symtab (objfile,
|
read_dbx_symtab (objfile);
|
||||||
DBX_TEXT_ADDR (objfile),
|
|
||||||
DBX_TEXT_SIZE (objfile));
|
|
||||||
|
|
||||||
/* Add the dynamic symbols. */
|
/* Add the dynamic symbols. */
|
||||||
|
|
||||||
|
@ -1239,21 +1236,17 @@ read_dbx_dynamic_symtab (objfile)
|
||||||
do_cleanups (back_to);
|
do_cleanups (back_to);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given pointers to an a.out symbol table in core containing dbx
|
/* Setup partial_symtab's describing each source file for which
|
||||||
style data, setup partial_symtab's describing each source file for
|
debugging information is available. */
|
||||||
which debugging information is available.
|
|
||||||
SYMFILE_NAME is the name of the file we are reading from
|
|
||||||
and SECTION_OFFSETS is the set of offsets for the various sections
|
|
||||||
of the file (a set of zeros if the mainline program). */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_dbx_symtab (objfile, text_addr, text_size)
|
read_dbx_symtab (objfile)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
CORE_ADDR text_addr;
|
|
||||||
int text_size;
|
|
||||||
{
|
{
|
||||||
register struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch */
|
register struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch */
|
||||||
struct internal_nlist nlist;
|
struct internal_nlist nlist;
|
||||||
|
CORE_ADDR text_addr;
|
||||||
|
int text_size;
|
||||||
|
|
||||||
register char *namestring;
|
register char *namestring;
|
||||||
int nsl;
|
int nsl;
|
||||||
|
@ -1276,6 +1269,9 @@ read_dbx_symtab (objfile, text_addr, text_size)
|
||||||
struct partial_symtab **dependency_list;
|
struct partial_symtab **dependency_list;
|
||||||
int dependencies_used, dependencies_allocated;
|
int dependencies_used, dependencies_allocated;
|
||||||
|
|
||||||
|
text_addr = DBX_TEXT_ADDR (objfile);
|
||||||
|
text_size = DBX_TEXT_SIZE (objfile);
|
||||||
|
|
||||||
/* FIXME. We probably want to change stringtab_global rather than add this
|
/* FIXME. We probably want to change stringtab_global rather than add this
|
||||||
while processing every symbol entry. FIXME. */
|
while processing every symbol entry. FIXME. */
|
||||||
file_string_table_offset = 0;
|
file_string_table_offset = 0;
|
||||||
|
@ -1361,8 +1357,8 @@ read_dbx_symtab (objfile, text_addr, text_size)
|
||||||
#define CUR_SYMBOL_VALUE nlist.n_value
|
#define CUR_SYMBOL_VALUE nlist.n_value
|
||||||
#define CUR_SYMBOL_STRX nlist.n_strx
|
#define CUR_SYMBOL_STRX nlist.n_strx
|
||||||
#define DBXREAD_ONLY
|
#define DBXREAD_ONLY
|
||||||
#define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
|
#define START_PSYMTAB(ofile,fname,low,symoff,global_syms,static_syms)\
|
||||||
start_psymtab(ofile, secoff, fname, low, symoff, global_syms, static_syms)
|
start_psymtab(ofile, fname, low, symoff, global_syms, static_syms)
|
||||||
#define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set)\
|
#define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set)\
|
||||||
end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set)
|
end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set)
|
||||||
|
|
||||||
|
@ -1385,7 +1381,7 @@ read_dbx_symtab (objfile, text_addr, text_size)
|
||||||
/* Don't set pst->texthigh lower than it already is. */
|
/* Don't set pst->texthigh lower than it already is. */
|
||||||
CORE_ADDR text_end =
|
CORE_ADDR text_end =
|
||||||
(lowest_text_address == (CORE_ADDR) -1
|
(lowest_text_address == (CORE_ADDR) -1
|
||||||
? (text_addr + objfile->section_offsets->offsets[SECT_OFF_TEXT])
|
? (text_addr + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT))
|
||||||
: lowest_text_address)
|
: lowest_text_address)
|
||||||
+ text_size;
|
+ text_size;
|
||||||
|
|
||||||
|
@ -1406,11 +1402,9 @@ read_dbx_symtab (objfile, text_addr, text_size)
|
||||||
(normal). */
|
(normal). */
|
||||||
|
|
||||||
|
|
||||||
struct partial_symtab *
|
static struct partial_symtab *
|
||||||
start_psymtab (objfile, section_offsets,
|
start_psymtab (objfile, filename, textlow, ldsymoff, global_syms, static_syms)
|
||||||
filename, textlow, ldsymoff, global_syms, static_syms)
|
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
char *filename;
|
char *filename;
|
||||||
CORE_ADDR textlow;
|
CORE_ADDR textlow;
|
||||||
int ldsymoff;
|
int ldsymoff;
|
||||||
|
@ -1418,7 +1412,7 @@ start_psymtab (objfile, section_offsets,
|
||||||
struct partial_symbol **static_syms;
|
struct partial_symbol **static_syms;
|
||||||
{
|
{
|
||||||
struct partial_symtab *result =
|
struct partial_symtab *result =
|
||||||
start_psymtab_common (objfile, section_offsets,
|
start_psymtab_common (objfile, objfile->section_offsets,
|
||||||
filename, textlow, global_syms, static_syms);
|
filename, textlow, global_syms, static_syms);
|
||||||
|
|
||||||
result->read_symtab_private = (char *)
|
result->read_symtab_private = (char *)
|
||||||
|
@ -2635,7 +2629,6 @@ elfstab_build_psymtabs (objfile, mainline,
|
||||||
bfd *sym_bfd = objfile->obfd;
|
bfd *sym_bfd = objfile->obfd;
|
||||||
char *name = bfd_get_filename (sym_bfd);
|
char *name = bfd_get_filename (sym_bfd);
|
||||||
struct dbx_symfile_info *info;
|
struct dbx_symfile_info *info;
|
||||||
asection *text_sect;
|
|
||||||
|
|
||||||
/* There is already a dbx_symfile_info allocated by our caller.
|
/* There is already a dbx_symfile_info allocated by our caller.
|
||||||
It might even contain some info from the ELF symtab to help us. */
|
It might even contain some info from the ELF symtab to help us. */
|
||||||
|
|
|
@ -525,8 +525,8 @@ dcache_info (exp, tty)
|
||||||
for (p = last_cache->valid_head; p; p = p->p)
|
for (p = last_cache->valid_head; p; p = p->p)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
printf_filtered ("Line at %08xd, referenced %d times\n",
|
printf_filtered ("Line at %s, referenced %d times\n",
|
||||||
p->addr, p->refs);
|
paddr (p->addr), p->refs);
|
||||||
|
|
||||||
for (j = 0; j < LINE_SIZE; j++)
|
for (j = 0; j < LINE_SIZE; j++)
|
||||||
printf_filtered ("%02x", p->data[j] & 0xFF);
|
printf_filtered ("%02x", p->data[j] & 0xFF);
|
||||||
|
|
|
@ -517,12 +517,13 @@ extern void fputstr_unfiltered PARAMS ((const char *str, int quotr, GDB_FILE *st
|
||||||
|
|
||||||
extern void fputstrn_unfiltered PARAMS ((const char *str, int n, int quotr, GDB_FILE *stream));
|
extern void fputstrn_unfiltered PARAMS ((const char *str, int n, int quotr, GDB_FILE *stream));
|
||||||
|
|
||||||
extern void gdb_print_address PARAMS ((void *, GDB_FILE *));
|
/* Display the host ADDR on STREAM formatted as ``0x%x''. */
|
||||||
|
extern void gdb_print_host_address (void *addr, struct gdb_file *stream);
|
||||||
|
|
||||||
/* Convert a CORE_ADDR into a HEX string. paddr() is like %08lx.
|
/* Convert a CORE_ADDR into a HEX string. paddr() is like %08lx.
|
||||||
paddr_nz() is like %lx. paddr_u() is like %lu. paddr_width() is
|
paddr_nz() is like %lx. paddr_u() is like %lu. paddr_width() is
|
||||||
for ``%*''. */
|
for ``%*''. */
|
||||||
extern int strlen_paddr ();
|
extern int strlen_paddr (void);
|
||||||
extern char* paddr (CORE_ADDR addr);
|
extern char* paddr (CORE_ADDR addr);
|
||||||
extern char* paddr_nz (CORE_ADDR addr);
|
extern char* paddr_nz (CORE_ADDR addr);
|
||||||
extern char* paddr_u (CORE_ADDR addr);
|
extern char* paddr_u (CORE_ADDR addr);
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include "target.h"
|
#include "target.h"
|
||||||
#include "monitor.h"
|
#include "monitor.h"
|
||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
|
#include "symfile.h" /* For generic_load() */
|
||||||
|
#include "inferior.h" /* For write_pc() */
|
||||||
|
|
||||||
static void dink32_open PARAMS ((char *args, int from_tty));
|
static void dink32_open PARAMS ((char *args, int from_tty));
|
||||||
|
|
||||||
|
@ -34,7 +36,7 @@ dink32_supply_register (regname, regnamelen, val, vallen)
|
||||||
char *val;
|
char *val;
|
||||||
int vallen;
|
int vallen;
|
||||||
{
|
{
|
||||||
int regno = 0, base = 0;
|
int regno = 0;
|
||||||
|
|
||||||
if (regnamelen < 2 || regnamelen > 4)
|
if (regnamelen < 2 || regnamelen > 4)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,3 +1,25 @@
|
||||||
|
1999-09-07 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
|
||||||
|
* gdb.texinfo: Fiks speling errers.
|
||||||
|
|
||||||
|
* gdb.texinfo: Fix uses of @multitable.
|
||||||
|
|
||||||
|
From Eli Zaretskii <eliz@is.elta.co.il>:
|
||||||
|
* gdb.texinfo: Include details specific to DOS host, clarify
|
||||||
|
some confusing language, fix @ref/@xref/@pxref usages, add
|
||||||
|
comments about using with optimization, add more indexing,
|
||||||
|
fix info about disassembly-flavor.
|
||||||
|
|
||||||
|
Tue Sep 7 09:11:24 1999 Kevin Buettner <kevinb@cygnus.com>
|
||||||
|
|
||||||
|
* gdbint.texinfo (IN_SOLIB_DYNSYM_RESOLVE_CODE,
|
||||||
|
SKIP_SOLIB_RESOLVER): Define.
|
||||||
|
|
||||||
|
Fri Sep 3 18:05:14 1999 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* gdb.texinfo (Protocol): Review. Add tables describing ``q'' and
|
||||||
|
``g'' packets.
|
||||||
|
|
||||||
1999-08-30 Stan Shebs <shebs@andros.cygnus.com>
|
1999-08-30 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
|
||||||
* gdb.texinfo: Create a new "Configurations" chapter with
|
* gdb.texinfo: Create a new "Configurations" chapter with
|
||||||
|
|
1055
gdb/doc/gdb.texinfo
1055
gdb/doc/gdb.texinfo
File diff suppressed because it is too large
Load diff
|
@ -1481,6 +1481,17 @@ trampoline that connects to a shared library.
|
||||||
Define this to evaluate to nonzero if the program is stopped in the
|
Define this to evaluate to nonzero if the program is stopped in the
|
||||||
trampoline that returns from a shared library.
|
trampoline that returns from a shared library.
|
||||||
|
|
||||||
|
@item IN_SOLIB_DYNSYM_RESOLVE_CODE pc
|
||||||
|
Define this to evaluate to nonzero if the program is stopped in the
|
||||||
|
dynamic linker.
|
||||||
|
|
||||||
|
@item SKIP_SOLIB_RESOLVER pc
|
||||||
|
Define this to evaluate to the (nonzero) address at which execution
|
||||||
|
should continue to get past the dynamic linker's symbol resolution
|
||||||
|
function. A zero value indicates that it is not important or necessary
|
||||||
|
to set a breakpoint to get through the dynamic linker and that single
|
||||||
|
stepping will suffice.
|
||||||
|
|
||||||
@item IS_TRAPPED_INTERNALVAR (name)
|
@item IS_TRAPPED_INTERNALVAR (name)
|
||||||
This is an ugly hook to allow the specification of special actions that
|
This is an ugly hook to allow the specification of special actions that
|
||||||
should occur as a side-effect of setting the value of a variable
|
should occur as a side-effect of setting the value of a variable
|
||||||
|
|
10
gdb/dsrec.c
10
gdb/dsrec.c
|
@ -98,8 +98,14 @@ load_srec (desc, file, load_offset, maxrecsize, flags, hashmark, waitack)
|
||||||
bfd_vma addr = bfd_get_section_vma (abfd, s) + load_offset;
|
bfd_vma addr = bfd_get_section_vma (abfd, s) + load_offset;
|
||||||
bfd_size_type size = bfd_get_section_size_before_reloc (s);
|
bfd_size_type size = bfd_get_section_size_before_reloc (s);
|
||||||
char *section_name = (char *) bfd_get_section_name (abfd, s);
|
char *section_name = (char *) bfd_get_section_name (abfd, s);
|
||||||
printf_filtered ("%s\t: 0x%08x .. 0x%08x ",
|
/* Both GDB and BFD have mechanisms for printing addresses.
|
||||||
section_name, (int) addr, (int) addr + size);
|
In the below, GDB's is used so that the address is
|
||||||
|
consistent with the rest of GDB. BFD's printf_vma() could
|
||||||
|
have also been used. cagney 1999-09-01 */
|
||||||
|
printf_filtered ("%s\t: 0x%s .. 0x%s ",
|
||||||
|
section_name,
|
||||||
|
paddr (addr),
|
||||||
|
paddr (addr + size));
|
||||||
gdb_flush (gdb_stdout);
|
gdb_flush (gdb_stdout);
|
||||||
|
|
||||||
data_count += size;
|
data_count += size;
|
||||||
|
|
|
@ -1638,13 +1638,13 @@ init_dst_sections (chan)
|
||||||
struct section_offsets dst_symfile_faker =
|
struct section_offsets dst_symfile_faker =
|
||||||
{0};
|
{0};
|
||||||
|
|
||||||
struct section_offsets *
|
void
|
||||||
dst_symfile_offsets (objfile, addr)
|
dst_symfile_offsets (objfile, addr)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
CORE_ADDR addr;
|
CORE_ADDR addr;
|
||||||
{
|
{
|
||||||
objfile->num_sections = 1;
|
objfile->num_sections = 1;
|
||||||
return &dst_symfile_faker;
|
objfile->section_offsets = &dst_symfile_faker;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Register our ability to parse symbols for DST BFD files */
|
/* Register our ability to parse symbols for DST BFD files */
|
||||||
|
|
|
@ -532,7 +532,7 @@ store_bitmapped_register (regno, bf)
|
||||||
oldbits = (oldval >> bf->start) & mask;
|
oldbits = (oldval >> bf->start) & mask;
|
||||||
newbits = (newval >> bf->start) & mask;
|
newbits = (newval >> bf->start) & mask;
|
||||||
if (oldbits != newbits)
|
if (oldbits != newbits)
|
||||||
monitor_printf ("%s %x ", bf->user_name, newbits);
|
monitor_printf ("%s %lx ", bf->user_name, newbits);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -563,14 +563,10 @@ extern int info_verbose; /* From main.c; nonzero => verbose */
|
||||||
static void dwarf2_locate_sections PARAMS ((bfd *, asection *, PTR));
|
static void dwarf2_locate_sections PARAMS ((bfd *, asection *, PTR));
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static void dwarf2_build_psymtabs_easy PARAMS ((struct objfile *,
|
static void dwarf2_build_psymtabs_easy PARAMS ((struct objfile *, int));
|
||||||
struct section_offsets *,
|
|
||||||
int));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void dwarf2_build_psymtabs_hard PARAMS ((struct objfile *,
|
static void dwarf2_build_psymtabs_hard PARAMS ((struct objfile *, int));
|
||||||
struct section_offsets *,
|
|
||||||
int));
|
|
||||||
|
|
||||||
static char *scan_partial_symbols PARAMS ((char *, struct objfile *,
|
static char *scan_partial_symbols PARAMS ((char *, struct objfile *,
|
||||||
CORE_ADDR *, CORE_ADDR *));
|
CORE_ADDR *, CORE_ADDR *));
|
||||||
|
@ -840,9 +836,8 @@ dwarf2_locate_sections (ignore_abfd, sectp, ignore_ptr)
|
||||||
/* Build a partial symbol table. */
|
/* Build a partial symbol table. */
|
||||||
|
|
||||||
void
|
void
|
||||||
dwarf2_build_psymtabs (objfile, section_offsets, mainline)
|
dwarf2_build_psymtabs (objfile, mainline)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
int mainline;
|
int mainline;
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -867,17 +862,17 @@ dwarf2_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
#if 0
|
#if 0
|
||||||
if (dwarf_aranges_offset && dwarf_pubnames_offset)
|
if (dwarf_aranges_offset && dwarf_pubnames_offset)
|
||||||
{
|
{
|
||||||
/* Things are significanlty easier if we have .debug_aranges and
|
/* Things are significantly easier if we have .debug_aranges and
|
||||||
.debug_pubnames sections */
|
.debug_pubnames sections */
|
||||||
|
|
||||||
dwarf2_build_psymtabs_easy (objfile, section_offsets, mainline);
|
dwarf2_build_psymtabs_easy (objfile, mainline);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
/* only test this case for now */
|
/* only test this case for now */
|
||||||
{
|
{
|
||||||
/* In this case we have to work a bit harder */
|
/* In this case we have to work a bit harder */
|
||||||
dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline);
|
dwarf2_build_psymtabs_hard (objfile, mainline);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -886,9 +881,8 @@ dwarf2_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
.debug_pubnames and .debug_aranges sections. */
|
.debug_pubnames and .debug_aranges sections. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dwarf2_build_psymtabs_easy (objfile, section_offsets, mainline)
|
dwarf2_build_psymtabs_easy (objfile, mainline)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
int mainline;
|
int mainline;
|
||||||
{
|
{
|
||||||
bfd *abfd = objfile->obfd;
|
bfd *abfd = objfile->obfd;
|
||||||
|
@ -923,9 +917,8 @@ dwarf2_build_psymtabs_easy (objfile, section_offsets, mainline)
|
||||||
.debug_info and .debug_abbrev sections. */
|
.debug_info and .debug_abbrev sections. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline)
|
dwarf2_build_psymtabs_hard (objfile, mainline)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
int mainline;
|
int mainline;
|
||||||
{
|
{
|
||||||
/* Instead of reading this into a big buffer, we should probably use
|
/* Instead of reading this into a big buffer, we should probably use
|
||||||
|
@ -1002,7 +995,7 @@ dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline)
|
||||||
set_cu_language (comp_unit_die.language);
|
set_cu_language (comp_unit_die.language);
|
||||||
|
|
||||||
/* Allocate a new partial symbol table structure */
|
/* Allocate a new partial symbol table structure */
|
||||||
pst = start_psymtab_common (objfile, section_offsets,
|
pst = start_psymtab_common (objfile, objfile->section_offsets,
|
||||||
comp_unit_die.name ? comp_unit_die.name : "",
|
comp_unit_die.name ? comp_unit_die.name : "",
|
||||||
comp_unit_die.lowpc,
|
comp_unit_die.lowpc,
|
||||||
objfile->global_psymbols.next,
|
objfile->global_psymbols.next,
|
||||||
|
@ -1016,7 +1009,7 @@ dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline)
|
||||||
DWARF_ABBREV_BUFFER (pst) = dwarf_abbrev_buffer;
|
DWARF_ABBREV_BUFFER (pst) = dwarf_abbrev_buffer;
|
||||||
DWARF_ABBREV_SIZE (pst) = dwarf_abbrev_size;
|
DWARF_ABBREV_SIZE (pst) = dwarf_abbrev_size;
|
||||||
DWARF_LINE_BUFFER (pst) = dwarf_line_buffer;
|
DWARF_LINE_BUFFER (pst) = dwarf_line_buffer;
|
||||||
baseaddr = ANOFFSET (section_offsets, 0);
|
baseaddr = ANOFFSET (objfile->section_offsets, 0);
|
||||||
|
|
||||||
/* Store the function that reads in the rest of the symbol table */
|
/* Store the function that reads in the rest of the symbol table */
|
||||||
pst->read_symtab = dwarf2_psymtab_to_symtab;
|
pst->read_symtab = dwarf2_psymtab_to_symtab;
|
||||||
|
|
|
@ -704,7 +704,6 @@ set_cu_language (dip)
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
|
|
||||||
void dwarf_build_psymtabs (struct objfile *objfile,
|
void dwarf_build_psymtabs (struct objfile *objfile,
|
||||||
struct section_offsets *section_offsets,
|
|
||||||
int mainline, file_ptr dbfoff, unsigned int dbfsize,
|
int mainline, file_ptr dbfoff, unsigned int dbfsize,
|
||||||
file_ptr lnoffset, unsigned int lnsize)
|
file_ptr lnoffset, unsigned int lnsize)
|
||||||
|
|
||||||
|
@ -728,10 +727,9 @@ set_cu_language (dip)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
dwarf_build_psymtabs (objfile, section_offsets, mainline, dbfoff, dbfsize,
|
dwarf_build_psymtabs (objfile, mainline, dbfoff, dbfsize,
|
||||||
lnoffset, lnsize)
|
lnoffset, lnsize)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
int mainline;
|
int mainline;
|
||||||
file_ptr dbfoff;
|
file_ptr dbfoff;
|
||||||
unsigned int dbfsize;
|
unsigned int dbfsize;
|
||||||
|
@ -765,8 +763,8 @@ dwarf_build_psymtabs (objfile, section_offsets, mainline, dbfoff, dbfsize,
|
||||||
|
|
||||||
/* Save the relocation factor where everybody can see it. */
|
/* Save the relocation factor where everybody can see it. */
|
||||||
|
|
||||||
base_section_offsets = section_offsets;
|
base_section_offsets = objfile->section_offsets;
|
||||||
baseaddr = ANOFFSET (section_offsets, 0);
|
baseaddr = ANOFFSET (objfile->section_offsets, 0);
|
||||||
|
|
||||||
/* Follow the compilation unit sibling chain, building a partial symbol
|
/* Follow the compilation unit sibling chain, building a partial symbol
|
||||||
table entry for each one. Save enough information about each compilation
|
table entry for each one. Save enough information about each compilation
|
||||||
|
|
|
@ -77,7 +77,7 @@ static void
|
||||||
elf_symfile_finish PARAMS ((struct objfile *));
|
elf_symfile_finish PARAMS ((struct objfile *));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elf_symtab_read PARAMS ((bfd *, CORE_ADDR, struct objfile *, int));
|
elf_symtab_read PARAMS ((struct objfile *, int));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_elfinfo PARAMS ((void *));
|
free_elfinfo PARAMS ((void *));
|
||||||
|
@ -221,15 +221,13 @@ record_minimal_symbol_and_info (name, address, ms_type, info, bfd_section,
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
|
|
||||||
void elf_symtab_read (bfd *abfd, CORE_ADDR addr,
|
void elf_symtab_read (struct objfile *objfile, int dynamic)
|
||||||
struct objfile *objfile, int dynamic)
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
|
|
||||||
Given an open bfd, a base address to relocate symbols to, and a
|
Given an objfile and a flag that specifies whether or not the objfile
|
||||||
flag that specifies whether or not this bfd is for an executable
|
is for an executable or not (may be shared library for example), add
|
||||||
or not (may be shared library for example), add all the global
|
all the global function and data symbols to the minimal symbol table.
|
||||||
function and data symbols to the minimal symbol table.
|
|
||||||
|
|
||||||
In stabs-in-ELF, as implemented by Sun, there are some local symbols
|
In stabs-in-ELF, as implemented by Sun, there are some local symbols
|
||||||
defined in the ELF symbol table, which can be used to locate
|
defined in the ELF symbol table, which can be used to locate
|
||||||
|
@ -240,9 +238,7 @@ record_minimal_symbol_and_info (name, address, ms_type, info, bfd_section,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elf_symtab_read (abfd, addr, objfile, dynamic)
|
elf_symtab_read (objfile, dynamic)
|
||||||
bfd *abfd;
|
|
||||||
CORE_ADDR addr;
|
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
int dynamic;
|
int dynamic;
|
||||||
{
|
{
|
||||||
|
@ -254,6 +250,7 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
|
||||||
int index;
|
int index;
|
||||||
struct cleanup *back_to;
|
struct cleanup *back_to;
|
||||||
CORE_ADDR symaddr;
|
CORE_ADDR symaddr;
|
||||||
|
CORE_ADDR offset;
|
||||||
enum minimal_symbol_type ms_type;
|
enum minimal_symbol_type ms_type;
|
||||||
/* If sectinfo is nonNULL, it contains section info that should end up
|
/* If sectinfo is nonNULL, it contains section info that should end up
|
||||||
filed in the objfile. */
|
filed in the objfile. */
|
||||||
|
@ -267,11 +264,11 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
|
||||||
#endif
|
#endif
|
||||||
struct dbx_symfile_info *dbx = objfile->sym_stab_info;
|
struct dbx_symfile_info *dbx = objfile->sym_stab_info;
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
int stripped = (bfd_get_symcount (abfd) == 0);
|
int stripped = (bfd_get_symcount (objfile->obfd) == 0);
|
||||||
|
|
||||||
if (dynamic)
|
if (dynamic)
|
||||||
{
|
{
|
||||||
storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
|
storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
|
||||||
|
|
||||||
/* Nothing to be done if there is no dynamic symtab. */
|
/* Nothing to be done if there is no dynamic symtab. */
|
||||||
if (storage_needed < 0)
|
if (storage_needed < 0)
|
||||||
|
@ -279,9 +276,9 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
storage_needed = bfd_get_symtab_upper_bound (abfd);
|
storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
|
||||||
if (storage_needed < 0)
|
if (storage_needed < 0)
|
||||||
error ("Can't read symbols from %s: %s", bfd_get_filename (abfd),
|
error ("Can't read symbols from %s: %s", bfd_get_filename (objfile->obfd),
|
||||||
bfd_errmsg (bfd_get_error ()));
|
bfd_errmsg (bfd_get_error ()));
|
||||||
}
|
}
|
||||||
if (storage_needed > 0)
|
if (storage_needed > 0)
|
||||||
|
@ -289,13 +286,15 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
|
||||||
symbol_table = (asymbol **) xmalloc (storage_needed);
|
symbol_table = (asymbol **) xmalloc (storage_needed);
|
||||||
back_to = make_cleanup (free, symbol_table);
|
back_to = make_cleanup (free, symbol_table);
|
||||||
if (dynamic)
|
if (dynamic)
|
||||||
number_of_symbols = bfd_canonicalize_dynamic_symtab (abfd,
|
number_of_symbols = bfd_canonicalize_dynamic_symtab (objfile->obfd,
|
||||||
symbol_table);
|
symbol_table);
|
||||||
else
|
else
|
||||||
number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table);
|
number_of_symbols = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
|
||||||
if (number_of_symbols < 0)
|
if (number_of_symbols < 0)
|
||||||
error ("Can't read symbols from %s: %s", bfd_get_filename (abfd),
|
error ("Can't read symbols from %s: %s", bfd_get_filename (objfile->obfd),
|
||||||
bfd_errmsg (bfd_get_error ()));
|
bfd_errmsg (bfd_get_error ()));
|
||||||
|
/* FIXME: Should use section specific offset, not SECT_OFF_TEXT. */
|
||||||
|
offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
for (i = 0; i < number_of_symbols; i++)
|
for (i = 0; i < number_of_symbols; i++)
|
||||||
{
|
{
|
||||||
sym = symbol_table[i];
|
sym = symbol_table[i];
|
||||||
|
@ -316,14 +315,14 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
|
||||||
a shared library.
|
a shared library.
|
||||||
If its value is non zero then it is usually the address
|
If its value is non zero then it is usually the address
|
||||||
of the corresponding entry in the procedure linkage table,
|
of the corresponding entry in the procedure linkage table,
|
||||||
relative to the base address.
|
plus the desired section offset.
|
||||||
If its value is zero then the dynamic linker has to resolve
|
If its value is zero then the dynamic linker has to resolve
|
||||||
the symbol. We are unable to find any meaningful address
|
the symbol. We are unable to find any meaningful address
|
||||||
for this symbol in the executable file, so we skip it. */
|
for this symbol in the executable file, so we skip it. */
|
||||||
symaddr = sym->value;
|
symaddr = sym->value;
|
||||||
if (symaddr == 0)
|
if (symaddr == 0)
|
||||||
continue;
|
continue;
|
||||||
symaddr += addr;
|
symaddr += offset;
|
||||||
msym = record_minimal_symbol_and_info
|
msym = record_minimal_symbol_and_info
|
||||||
((char *) sym->name, symaddr,
|
((char *) sym->name, symaddr,
|
||||||
mst_solib_trampoline, NULL, sym->section, objfile);
|
mst_solib_trampoline, NULL, sym->section, objfile);
|
||||||
|
@ -365,10 +364,10 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
|
||||||
interested in will have a section. */
|
interested in will have a section. */
|
||||||
/* Bfd symbols are section relative. */
|
/* Bfd symbols are section relative. */
|
||||||
symaddr = sym->value + sym->section->vma;
|
symaddr = sym->value + sym->section->vma;
|
||||||
/* Relocate all non-absolute symbols by base address. */
|
/* Relocate all non-absolute symbols by the section offset. */
|
||||||
if (sym->section != &bfd_abs_section)
|
if (sym->section != &bfd_abs_section)
|
||||||
{
|
{
|
||||||
symaddr += addr;
|
symaddr += offset;
|
||||||
}
|
}
|
||||||
/* For non-absolute symbols, use the type of the section
|
/* For non-absolute symbols, use the type of the section
|
||||||
they are relative to, to intuit text/data. Bfd provides
|
they are relative to, to intuit text/data. Bfd provides
|
||||||
|
@ -397,12 +396,12 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If it is an Irix dynamic symbol, skip section name
|
/* If it is an Irix dynamic symbol, skip section name
|
||||||
symbols, relocate all others. */
|
symbols, relocate all others by section offset. */
|
||||||
if (ms_type != mst_abs)
|
if (ms_type != mst_abs)
|
||||||
{
|
{
|
||||||
if (sym->name[0] == '.')
|
if (sym->name[0] == '.')
|
||||||
continue;
|
continue;
|
||||||
symaddr += addr;
|
symaddr += offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sym->section->flags & SEC_CODE)
|
else if (sym->section->flags & SEC_CODE)
|
||||||
|
@ -498,10 +497,10 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
|
||||||
}
|
}
|
||||||
/* Bfd symbols are section relative. */
|
/* Bfd symbols are section relative. */
|
||||||
symaddr = sym->value + sym->section->vma;
|
symaddr = sym->value + sym->section->vma;
|
||||||
/* Relocate non-absolute symbols by base address. */
|
/* Relocate non-absolute symbols by the section offset. */
|
||||||
if (sym->section != &bfd_abs_section)
|
if (sym->section != &bfd_abs_section)
|
||||||
{
|
{
|
||||||
symaddr += addr;
|
symaddr += offset;
|
||||||
}
|
}
|
||||||
sectinfo->sections[index] = symaddr;
|
sectinfo->sections[index] = symaddr;
|
||||||
/* The special local symbols don't go in the
|
/* The special local symbols don't go in the
|
||||||
|
@ -608,13 +607,11 @@ elf_symfile_read (objfile, mainline)
|
||||||
chain of info into the dbx_symfile_info in objfile->sym_stab_info,
|
chain of info into the dbx_symfile_info in objfile->sym_stab_info,
|
||||||
which can later be used by elfstab_offset_sections. */
|
which can later be used by elfstab_offset_sections. */
|
||||||
|
|
||||||
/* FIXME, should take a section_offsets param, not just an offset. */
|
elf_symtab_read (objfile, 0);
|
||||||
offset = ANOFFSET (objfile->section_offsets, 0);
|
|
||||||
elf_symtab_read (abfd, offset, objfile, 0);
|
|
||||||
|
|
||||||
/* Add the dynamic symbols. */
|
/* Add the dynamic symbols. */
|
||||||
|
|
||||||
elf_symtab_read (abfd, offset, objfile, 1);
|
elf_symtab_read (objfile, 1);
|
||||||
|
|
||||||
/* Now process debugging information, which is contained in
|
/* Now process debugging information, which is contained in
|
||||||
special ELF sections. */
|
special ELF sections. */
|
||||||
|
@ -651,8 +648,7 @@ elf_symfile_read (objfile, mainline)
|
||||||
information. */
|
information. */
|
||||||
swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
|
swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
|
||||||
if (swap)
|
if (swap)
|
||||||
elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect,
|
elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
|
||||||
objfile->section_offsets);
|
|
||||||
}
|
}
|
||||||
if (ei.stabsect)
|
if (ei.stabsect)
|
||||||
{
|
{
|
||||||
|
@ -674,13 +670,13 @@ elf_symfile_read (objfile, mainline)
|
||||||
if (dwarf2_has_info (abfd))
|
if (dwarf2_has_info (abfd))
|
||||||
{
|
{
|
||||||
/* DWARF 2 sections */
|
/* DWARF 2 sections */
|
||||||
dwarf2_build_psymtabs (objfile, objfile->section_offsets, mainline);
|
dwarf2_build_psymtabs (objfile, mainline);
|
||||||
}
|
}
|
||||||
else if (ei.dboffset && ei.lnoffset)
|
else if (ei.dboffset && ei.lnoffset)
|
||||||
{
|
{
|
||||||
/* DWARF sections */
|
/* DWARF sections */
|
||||||
dwarf_build_psymtabs (objfile,
|
dwarf_build_psymtabs (objfile,
|
||||||
objfile->section_offsets, mainline,
|
mainline,
|
||||||
ei.dboffset, ei.dbsize,
|
ei.dboffset, ei.dbsize,
|
||||||
ei.lnoffset, ei.lnsize);
|
ei.lnoffset, ei.lnsize);
|
||||||
}
|
}
|
||||||
|
|
|
@ -394,7 +394,6 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
|
||||||
int code;
|
int code;
|
||||||
int ix;
|
int ix;
|
||||||
long mem_offset;
|
long mem_offset;
|
||||||
struct symbol *sym;
|
|
||||||
struct type **arg_types;
|
struct type **arg_types;
|
||||||
int save_pos1;
|
int save_pos1;
|
||||||
|
|
||||||
|
@ -842,10 +841,6 @@ evaluate_subexp_standard (expect_type, exp, pos, noside)
|
||||||
int static_memfuncp;
|
int static_memfuncp;
|
||||||
value_ptr temp = arg2;
|
value_ptr temp = arg2;
|
||||||
char tstr[256];
|
char tstr[256];
|
||||||
struct fn_field *fns_ptr;
|
|
||||||
int num_fns;
|
|
||||||
struct type *basetype;
|
|
||||||
int boffset;
|
|
||||||
|
|
||||||
/* Method invocation : stuff "this" as first parameter */
|
/* Method invocation : stuff "this" as first parameter */
|
||||||
/* pai: this used to have lookup_pointer_type for some reason,
|
/* pai: this used to have lookup_pointer_type for some reason,
|
||||||
|
|
|
@ -52,7 +52,9 @@ void handle_sigint PARAMS ((int));
|
||||||
static void handle_sigquit PARAMS ((int));
|
static void handle_sigquit PARAMS ((int));
|
||||||
static void handle_sighup PARAMS ((int));
|
static void handle_sighup PARAMS ((int));
|
||||||
static void handle_sigfpe PARAMS ((int));
|
static void handle_sigfpe PARAMS ((int));
|
||||||
|
#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
||||||
static void handle_sigwinch PARAMS ((int));
|
static void handle_sigwinch PARAMS ((int));
|
||||||
|
#endif
|
||||||
/* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT. */
|
/* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT. */
|
||||||
#ifndef STOP_SIGNAL
|
#ifndef STOP_SIGNAL
|
||||||
#ifdef SIGTSTP
|
#ifdef SIGTSTP
|
||||||
|
|
20
gdb/exec.c
20
gdb/exec.c
|
@ -315,11 +315,7 @@ exec_file_command (args, from_tty)
|
||||||
char *args;
|
char *args;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
char **argv;
|
|
||||||
char *filename;
|
|
||||||
|
|
||||||
target_preopen (from_tty);
|
target_preopen (from_tty);
|
||||||
|
|
||||||
exec_file_attach (args, from_tty);
|
exec_file_attach (args, from_tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -618,13 +614,21 @@ exec_files_info (t)
|
||||||
struct vmap *vp;
|
struct vmap *vp;
|
||||||
|
|
||||||
printf_unfiltered ("\tMapping info for file `%s'.\n", vmap->name);
|
printf_unfiltered ("\tMapping info for file `%s'.\n", vmap->name);
|
||||||
printf_unfiltered ("\t %8.8s %8.8s %8.8s %8.8s %8.8s %s\n",
|
printf_unfiltered ("\t %*s %*s %*s %*s %8.8s %s\n",
|
||||||
"tstart", "tend", "dstart", "dend", "section",
|
strlen_paddr (), "tstart",
|
||||||
|
strlen_paddr (), "tend",
|
||||||
|
strlen_paddr (), "dstart",
|
||||||
|
strlen_paddr (), "dend",
|
||||||
|
"section",
|
||||||
"file(member)");
|
"file(member)");
|
||||||
|
|
||||||
for (vp = vmap; vp; vp = vp->nxt)
|
for (vp = vmap; vp; vp = vp->nxt)
|
||||||
printf_unfiltered ("\t0x%8.8x 0x%8.8x 0x%8.8x 0x%8.8x %s%s%s%s\n",
|
printf_unfiltered ("\t0x%s 0x%s 0x%s 0x%s %s%s%s%s\n",
|
||||||
vp->tstart, vp->tend, vp->dstart, vp->dend, vp->name,
|
paddr (vp->tstart),
|
||||||
|
paddr (vp->tend),
|
||||||
|
paddr (vp->dstart),
|
||||||
|
paddr (vp->dend),
|
||||||
|
vp->name,
|
||||||
*vp->member ? "(" : "", vp->member,
|
*vp->member ? "(" : "", vp->member,
|
||||||
*vp->member ? ")" : "");
|
*vp->member ? ")" : "");
|
||||||
}
|
}
|
||||||
|
|
|
@ -706,7 +706,7 @@ dump_prefix_expression (exp, stream, note)
|
||||||
int eltsize;
|
int eltsize;
|
||||||
|
|
||||||
fprintf_filtered (stream, "Dump of expression @ ");
|
fprintf_filtered (stream, "Dump of expression @ ");
|
||||||
gdb_print_address (exp, stream);
|
gdb_print_host_address (exp, stream);
|
||||||
fprintf_filtered (stream, ", %s:\nExpression: `", note);
|
fprintf_filtered (stream, ", %s:\nExpression: `", note);
|
||||||
if (exp->elts[0].opcode != OP_TYPE)
|
if (exp->elts[0].opcode != OP_TYPE)
|
||||||
print_expression (exp, stream);
|
print_expression (exp, stream);
|
||||||
|
@ -831,7 +831,9 @@ dump_subexp (exp, stream, elt)
|
||||||
elt = dump_subexp (exp, stream, elt);
|
elt = dump_subexp (exp, stream, elt);
|
||||||
break;
|
break;
|
||||||
case OP_LONG:
|
case OP_LONG:
|
||||||
fprintf_filtered (stream, "Type @0x%x (", exp->elts[elt].type);
|
fprintf_filtered (stream, "Type @");
|
||||||
|
gdb_print_host_address (exp->elts[elt].type, stream);
|
||||||
|
fprintf_filtered (stream, " (");
|
||||||
type_print (exp->elts[elt].type, NULL, stream, 0);
|
type_print (exp->elts[elt].type, NULL, stream, 0);
|
||||||
fprintf_filtered (stream, "), value %ld (0x%lx)",
|
fprintf_filtered (stream, "), value %ld (0x%lx)",
|
||||||
(long) exp->elts[elt + 1].longconst,
|
(long) exp->elts[elt + 1].longconst,
|
||||||
|
@ -839,16 +841,20 @@ dump_subexp (exp, stream, elt)
|
||||||
elt += 3;
|
elt += 3;
|
||||||
break;
|
break;
|
||||||
case OP_DOUBLE:
|
case OP_DOUBLE:
|
||||||
fprintf_filtered (stream, "Type @0x%x (", exp->elts[elt].type);
|
fprintf_filtered (stream, "Type @");
|
||||||
|
gdb_print_host_address (exp->elts[elt].type, stream);
|
||||||
|
fprintf_filtered (stream, " (");
|
||||||
type_print (exp->elts[elt].type, NULL, stream, 0);
|
type_print (exp->elts[elt].type, NULL, stream, 0);
|
||||||
fprintf_filtered (stream, "), value %g",
|
fprintf_filtered (stream, "), value %g",
|
||||||
(double) exp->elts[elt + 1].doubleconst);
|
(double) exp->elts[elt + 1].doubleconst);
|
||||||
elt += 3;
|
elt += 3;
|
||||||
break;
|
break;
|
||||||
case OP_VAR_VALUE:
|
case OP_VAR_VALUE:
|
||||||
fprintf_filtered (stream, "Block @0x%x, symbol @0x%x (%s)",
|
fprintf_filtered (stream, "Block @");
|
||||||
exp->elts[elt].block,
|
gdb_print_host_address (exp->elts[elt].block, stream);
|
||||||
exp->elts[elt + 1].symbol,
|
fprintf_filtered (stream, ", symbol @");
|
||||||
|
gdb_print_host_address (exp->elts[elt + 1].symbol, stream);
|
||||||
|
fprintf_filtered (stream, " (%s)",
|
||||||
SYMBOL_NAME (exp->elts[elt + 1].symbol));
|
SYMBOL_NAME (exp->elts[elt + 1].symbol));
|
||||||
elt += 3;
|
elt += 3;
|
||||||
break;
|
break;
|
||||||
|
@ -863,8 +869,9 @@ dump_subexp (exp, stream, elt)
|
||||||
elt += 2;
|
elt += 2;
|
||||||
break;
|
break;
|
||||||
case OP_INTERNALVAR:
|
case OP_INTERNALVAR:
|
||||||
fprintf_filtered (stream, "Internal var @0x%x (%s)",
|
fprintf_filtered (stream, "Internal var @");
|
||||||
exp->elts[elt].internalvar,
|
gdb_print_host_address (exp->elts[elt].internalvar, stream);
|
||||||
|
fprintf_filtered (stream, " (%s)",
|
||||||
exp->elts[elt].internalvar->name);
|
exp->elts[elt].internalvar->name);
|
||||||
elt += 2;
|
elt += 2;
|
||||||
break;
|
break;
|
||||||
|
@ -898,15 +905,17 @@ dump_subexp (exp, stream, elt)
|
||||||
break;
|
break;
|
||||||
case UNOP_MEMVAL:
|
case UNOP_MEMVAL:
|
||||||
case UNOP_CAST:
|
case UNOP_CAST:
|
||||||
fprintf_filtered (stream, "Type @0x%x (",
|
fprintf_filtered (stream, "Type @");
|
||||||
exp->elts[elt].type);
|
gdb_print_host_address (exp->elts[elt].type, stream);
|
||||||
|
fprintf_filtered (stream, " (");
|
||||||
type_print (exp->elts[elt].type, NULL, stream, 0);
|
type_print (exp->elts[elt].type, NULL, stream, 0);
|
||||||
fprintf_filtered (stream, ")");
|
fprintf_filtered (stream, ")");
|
||||||
elt = dump_subexp (exp, stream, elt + 2);
|
elt = dump_subexp (exp, stream, elt + 2);
|
||||||
break;
|
break;
|
||||||
case OP_TYPE:
|
case OP_TYPE:
|
||||||
fprintf_filtered (stream, "Type @0x%x (",
|
fprintf_filtered (stream, "Type @");
|
||||||
exp->elts[elt].type);
|
gdb_print_host_address (exp->elts[elt].type, stream);
|
||||||
|
fprintf_filtered (stream, " (");
|
||||||
type_print (exp->elts[elt].type, NULL, stream, 0);
|
type_print (exp->elts[elt].type, NULL, stream, 0);
|
||||||
fprintf_filtered (stream, ")");
|
fprintf_filtered (stream, ")");
|
||||||
elt += 2;
|
elt += 2;
|
||||||
|
@ -929,7 +938,9 @@ dump_subexp (exp, stream, elt)
|
||||||
char *elem_name;
|
char *elem_name;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
fprintf_filtered (stream, "Type @0x%x (", exp->elts[elt].type);
|
fprintf_filtered (stream, "Type @");
|
||||||
|
gdb_print_host_address (exp->elts[elt].type, stream);
|
||||||
|
fprintf_filtered (stream, " (");
|
||||||
type_print (exp->elts[elt].type, NULL, stream, 0);
|
type_print (exp->elts[elt].type, NULL, stream, 0);
|
||||||
fprintf_filtered (stream, ") ");
|
fprintf_filtered (stream, ") ");
|
||||||
|
|
||||||
|
@ -972,7 +983,7 @@ dump_postfix_expression (exp, stream, note)
|
||||||
int elt;
|
int elt;
|
||||||
|
|
||||||
fprintf_filtered (stream, "Dump of expression @ ");
|
fprintf_filtered (stream, "Dump of expression @ ");
|
||||||
gdb_print_address (exp, stream);
|
gdb_print_host_address (exp, stream);
|
||||||
fprintf_filtered (stream, ", %s:\nExpression: `", note);
|
fprintf_filtered (stream, ", %s:\nExpression: `", note);
|
||||||
if (exp->elts[0].opcode != OP_TYPE)
|
if (exp->elts[0].opcode != OP_TYPE)
|
||||||
print_expression (exp, stream);
|
print_expression (exp, stream);
|
||||||
|
|
|
@ -431,7 +431,7 @@ f_val_print (type, valaddr, embedded_offset, address, stream, format, deref_ref,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addressprint && format != 's')
|
if (addressprint && format != 's')
|
||||||
fprintf_filtered (stream, "0x%x", addr);
|
fprintf_filtered (stream, "0x%s", paddr_nz (addr));
|
||||||
|
|
||||||
/* For a pointer to char or unsigned char, also print the string
|
/* For a pointer to char or unsigned char, also print the string
|
||||||
pointed to, unless pointer is null. */
|
pointed to, unless pointer is null. */
|
||||||
|
|
|
@ -328,6 +328,10 @@ extract_floating (addr, len)
|
||||||
else
|
else
|
||||||
floatformat_to_doublest (TARGET_LONG_DOUBLE_FORMAT, addr, &dretval);
|
floatformat_to_doublest (TARGET_LONG_DOUBLE_FORMAT, addr, &dretval);
|
||||||
}
|
}
|
||||||
|
#ifdef TARGET_EXTRACT_FLOATING
|
||||||
|
else if (TARGET_EXTRACT_FLOATING (addr, len, &dretval))
|
||||||
|
return dretval;
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error ("Can't deal with a floating point number of %d bytes.", len);
|
error ("Can't deal with a floating point number of %d bytes.", len);
|
||||||
|
@ -371,6 +375,10 @@ store_floating (addr, len, val)
|
||||||
else
|
else
|
||||||
floatformat_from_doublest (TARGET_LONG_DOUBLE_FORMAT, &val, addr);
|
floatformat_from_doublest (TARGET_LONG_DOUBLE_FORMAT, &val, addr);
|
||||||
}
|
}
|
||||||
|
#ifdef TARGET_STORE_FLOATING
|
||||||
|
else if (TARGET_STORE_FLOATING (addr, len, val))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error ("Can't deal with a floating point number of %d bytes.", len);
|
error ("Can't deal with a floating point number of %d bytes.", len);
|
||||||
|
|
|
@ -1623,11 +1623,11 @@ is_integral_type (t)
|
||||||
CHECK_TYPEDEF (t);
|
CHECK_TYPEDEF (t);
|
||||||
return
|
return
|
||||||
((t != NULL)
|
((t != NULL)
|
||||||
&& ((TYPE_CODE(t) == TYPE_CODE_INT)
|
&& ((TYPE_CODE (t) == TYPE_CODE_INT)
|
||||||
|| (TYPE_CODE(t) == TYPE_CODE_ENUM)
|
|| (TYPE_CODE (t) == TYPE_CODE_ENUM)
|
||||||
|| (TYPE_CODE(t) == TYPE_CODE_CHAR)
|
|| (TYPE_CODE (t) == TYPE_CODE_CHAR)
|
||||||
|| (TYPE_CODE(t) == TYPE_CODE_RANGE)
|
|| (TYPE_CODE (t) == TYPE_CODE_RANGE)
|
||||||
|| (TYPE_CODE(t) == TYPE_CODE_BOOL)));
|
|| (TYPE_CODE (t) == TYPE_CODE_BOOL)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Chill varying string and arrays are represented as follows:
|
/* Chill varying string and arrays are represented as follows:
|
||||||
|
@ -1994,9 +1994,7 @@ int
|
||||||
count_virtual_fns (dclass)
|
count_virtual_fns (dclass)
|
||||||
struct type *dclass;
|
struct type *dclass;
|
||||||
{
|
{
|
||||||
int base; /* index for base classes */
|
|
||||||
int fn, oi; /* function and overloaded instance indices */
|
int fn, oi; /* function and overloaded instance indices */
|
||||||
|
|
||||||
int vfuncs; /* count to return */
|
int vfuncs; /* count to return */
|
||||||
|
|
||||||
/* recurse on bases that can share virtual table */
|
/* recurse on bases that can share virtual table */
|
||||||
|
@ -2485,7 +2483,7 @@ dump_fn_fieldlists (type, spaces)
|
||||||
struct fn_field *f;
|
struct fn_field *f;
|
||||||
|
|
||||||
printfi_filtered (spaces, "fn_fieldlists ");
|
printfi_filtered (spaces, "fn_fieldlists ");
|
||||||
gdb_print_address (TYPE_FN_FIELDLISTS (type), gdb_stdout);
|
gdb_print_host_address (TYPE_FN_FIELDLISTS (type), gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
for (method_idx = 0; method_idx < TYPE_NFN_FIELDS (type); method_idx++)
|
for (method_idx = 0; method_idx < TYPE_NFN_FIELDS (type); method_idx++)
|
||||||
{
|
{
|
||||||
|
@ -2493,8 +2491,8 @@ dump_fn_fieldlists (type, spaces)
|
||||||
printfi_filtered (spaces + 2, "[%d] name '%s' (",
|
printfi_filtered (spaces + 2, "[%d] name '%s' (",
|
||||||
method_idx,
|
method_idx,
|
||||||
TYPE_FN_FIELDLIST_NAME (type, method_idx));
|
TYPE_FN_FIELDLIST_NAME (type, method_idx));
|
||||||
gdb_print_address (TYPE_FN_FIELDLIST_NAME (type, method_idx),
|
gdb_print_host_address (TYPE_FN_FIELDLIST_NAME (type, method_idx),
|
||||||
gdb_stdout);
|
gdb_stdout);
|
||||||
printf_filtered (") length %d\n",
|
printf_filtered (") length %d\n",
|
||||||
TYPE_FN_FIELDLIST_LENGTH (type, method_idx));
|
TYPE_FN_FIELDLIST_LENGTH (type, method_idx));
|
||||||
for (overload_idx = 0;
|
for (overload_idx = 0;
|
||||||
|
@ -2504,24 +2502,24 @@ dump_fn_fieldlists (type, spaces)
|
||||||
printfi_filtered (spaces + 4, "[%d] physname '%s' (",
|
printfi_filtered (spaces + 4, "[%d] physname '%s' (",
|
||||||
overload_idx,
|
overload_idx,
|
||||||
TYPE_FN_FIELD_PHYSNAME (f, overload_idx));
|
TYPE_FN_FIELD_PHYSNAME (f, overload_idx));
|
||||||
gdb_print_address (TYPE_FN_FIELD_PHYSNAME (f, overload_idx),
|
gdb_print_host_address (TYPE_FN_FIELD_PHYSNAME (f, overload_idx),
|
||||||
gdb_stdout);
|
gdb_stdout);
|
||||||
printf_filtered (")\n");
|
printf_filtered (")\n");
|
||||||
printfi_filtered (spaces + 8, "type ");
|
printfi_filtered (spaces + 8, "type ");
|
||||||
gdb_print_address (TYPE_FN_FIELD_TYPE (f, overload_idx), gdb_stdout);
|
gdb_print_host_address (TYPE_FN_FIELD_TYPE (f, overload_idx), gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
|
|
||||||
recursive_dump_type (TYPE_FN_FIELD_TYPE (f, overload_idx),
|
recursive_dump_type (TYPE_FN_FIELD_TYPE (f, overload_idx),
|
||||||
spaces + 8 + 2);
|
spaces + 8 + 2);
|
||||||
|
|
||||||
printfi_filtered (spaces + 8, "args ");
|
printfi_filtered (spaces + 8, "args ");
|
||||||
gdb_print_address (TYPE_FN_FIELD_ARGS (f, overload_idx), gdb_stdout);
|
gdb_print_host_address (TYPE_FN_FIELD_ARGS (f, overload_idx), gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
|
|
||||||
print_arg_types (TYPE_FN_FIELD_ARGS (f, overload_idx), spaces);
|
print_arg_types (TYPE_FN_FIELD_ARGS (f, overload_idx), spaces);
|
||||||
printfi_filtered (spaces + 8, "fcontext ");
|
printfi_filtered (spaces + 8, "fcontext ");
|
||||||
gdb_print_address (TYPE_FN_FIELD_FCONTEXT (f, overload_idx),
|
gdb_print_host_address (TYPE_FN_FIELD_FCONTEXT (f, overload_idx),
|
||||||
gdb_stdout);
|
gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
|
|
||||||
printfi_filtered (spaces + 8, "is_const %d\n",
|
printfi_filtered (spaces + 8, "is_const %d\n",
|
||||||
|
@ -2555,7 +2553,7 @@ print_cplus_stuff (type, spaces)
|
||||||
{
|
{
|
||||||
printfi_filtered (spaces, "virtual_field_bits (%d bits at *",
|
printfi_filtered (spaces, "virtual_field_bits (%d bits at *",
|
||||||
TYPE_N_BASECLASSES (type));
|
TYPE_N_BASECLASSES (type));
|
||||||
gdb_print_address (TYPE_FIELD_VIRTUAL_BITS (type), gdb_stdout);
|
gdb_print_host_address (TYPE_FIELD_VIRTUAL_BITS (type), gdb_stdout);
|
||||||
printf_filtered (")");
|
printf_filtered (")");
|
||||||
|
|
||||||
print_bit_vector (TYPE_FIELD_VIRTUAL_BITS (type),
|
print_bit_vector (TYPE_FIELD_VIRTUAL_BITS (type),
|
||||||
|
@ -2568,7 +2566,7 @@ print_cplus_stuff (type, spaces)
|
||||||
{
|
{
|
||||||
printfi_filtered (spaces, "private_field_bits (%d bits at *",
|
printfi_filtered (spaces, "private_field_bits (%d bits at *",
|
||||||
TYPE_NFIELDS (type));
|
TYPE_NFIELDS (type));
|
||||||
gdb_print_address (TYPE_FIELD_PRIVATE_BITS (type), gdb_stdout);
|
gdb_print_host_address (TYPE_FIELD_PRIVATE_BITS (type), gdb_stdout);
|
||||||
printf_filtered (")");
|
printf_filtered (")");
|
||||||
print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type),
|
print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type),
|
||||||
TYPE_NFIELDS (type));
|
TYPE_NFIELDS (type));
|
||||||
|
@ -2578,7 +2576,7 @@ print_cplus_stuff (type, spaces)
|
||||||
{
|
{
|
||||||
printfi_filtered (spaces, "protected_field_bits (%d bits at *",
|
printfi_filtered (spaces, "protected_field_bits (%d bits at *",
|
||||||
TYPE_NFIELDS (type));
|
TYPE_NFIELDS (type));
|
||||||
gdb_print_address (TYPE_FIELD_PROTECTED_BITS (type), gdb_stdout);
|
gdb_print_host_address (TYPE_FIELD_PROTECTED_BITS (type), gdb_stdout);
|
||||||
printf_filtered (")");
|
printf_filtered (")");
|
||||||
print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type),
|
print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type),
|
||||||
TYPE_NFIELDS (type));
|
TYPE_NFIELDS (type));
|
||||||
|
@ -2617,7 +2615,7 @@ recursive_dump_type (type, spaces)
|
||||||
if (type == first_dont_print[i])
|
if (type == first_dont_print[i])
|
||||||
{
|
{
|
||||||
printfi_filtered (spaces, "type node ");
|
printfi_filtered (spaces, "type node ");
|
||||||
gdb_print_address (type, gdb_stdout);
|
gdb_print_host_address (type, gdb_stdout);
|
||||||
printf_filtered (" <same as already seen type>\n");
|
printf_filtered (" <same as already seen type>\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2627,17 +2625,17 @@ recursive_dump_type (type, spaces)
|
||||||
}
|
}
|
||||||
|
|
||||||
printfi_filtered (spaces, "type node ");
|
printfi_filtered (spaces, "type node ");
|
||||||
gdb_print_address (type, gdb_stdout);
|
gdb_print_host_address (type, gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
printfi_filtered (spaces, "name '%s' (",
|
printfi_filtered (spaces, "name '%s' (",
|
||||||
TYPE_NAME (type) ? TYPE_NAME (type) : "<NULL>");
|
TYPE_NAME (type) ? TYPE_NAME (type) : "<NULL>");
|
||||||
gdb_print_address (TYPE_NAME (type), gdb_stdout);
|
gdb_print_host_address (TYPE_NAME (type), gdb_stdout);
|
||||||
printf_filtered (")\n");
|
printf_filtered (")\n");
|
||||||
if (TYPE_TAG_NAME (type) != NULL)
|
if (TYPE_TAG_NAME (type) != NULL)
|
||||||
{
|
{
|
||||||
printfi_filtered (spaces, "tagname '%s' (",
|
printfi_filtered (spaces, "tagname '%s' (",
|
||||||
TYPE_TAG_NAME (type));
|
TYPE_TAG_NAME (type));
|
||||||
gdb_print_address (TYPE_TAG_NAME (type), gdb_stdout);
|
gdb_print_host_address (TYPE_TAG_NAME (type), gdb_stdout);
|
||||||
printf_filtered (")\n");
|
printf_filtered (")\n");
|
||||||
}
|
}
|
||||||
printfi_filtered (spaces, "code 0x%x ", TYPE_CODE (type));
|
printfi_filtered (spaces, "code 0x%x ", TYPE_CODE (type));
|
||||||
|
@ -2710,20 +2708,20 @@ recursive_dump_type (type, spaces)
|
||||||
puts_filtered ("\n");
|
puts_filtered ("\n");
|
||||||
printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
|
printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
|
||||||
printfi_filtered (spaces, "objfile ");
|
printfi_filtered (spaces, "objfile ");
|
||||||
gdb_print_address (TYPE_OBJFILE (type), gdb_stdout);
|
gdb_print_host_address (TYPE_OBJFILE (type), gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
printfi_filtered (spaces, "target_type ");
|
printfi_filtered (spaces, "target_type ");
|
||||||
gdb_print_address (TYPE_TARGET_TYPE (type), gdb_stdout);
|
gdb_print_host_address (TYPE_TARGET_TYPE (type), gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
if (TYPE_TARGET_TYPE (type) != NULL)
|
if (TYPE_TARGET_TYPE (type) != NULL)
|
||||||
{
|
{
|
||||||
recursive_dump_type (TYPE_TARGET_TYPE (type), spaces + 2);
|
recursive_dump_type (TYPE_TARGET_TYPE (type), spaces + 2);
|
||||||
}
|
}
|
||||||
printfi_filtered (spaces, "pointer_type ");
|
printfi_filtered (spaces, "pointer_type ");
|
||||||
gdb_print_address (TYPE_POINTER_TYPE (type), gdb_stdout);
|
gdb_print_host_address (TYPE_POINTER_TYPE (type), gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
printfi_filtered (spaces, "reference_type ");
|
printfi_filtered (spaces, "reference_type ");
|
||||||
gdb_print_address (TYPE_REFERENCE_TYPE (type), gdb_stdout);
|
gdb_print_host_address (TYPE_REFERENCE_TYPE (type), gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
printfi_filtered (spaces, "flags 0x%x", TYPE_FLAGS (type));
|
printfi_filtered (spaces, "flags 0x%x", TYPE_FLAGS (type));
|
||||||
if (TYPE_FLAGS (type) & TYPE_FLAG_UNSIGNED)
|
if (TYPE_FLAGS (type) & TYPE_FLAG_UNSIGNED)
|
||||||
|
@ -2736,7 +2734,7 @@ recursive_dump_type (type, spaces)
|
||||||
}
|
}
|
||||||
puts_filtered ("\n");
|
puts_filtered ("\n");
|
||||||
printfi_filtered (spaces, "nfields %d ", TYPE_NFIELDS (type));
|
printfi_filtered (spaces, "nfields %d ", TYPE_NFIELDS (type));
|
||||||
gdb_print_address (TYPE_FIELDS (type), gdb_stdout);
|
gdb_print_host_address (TYPE_FIELDS (type), gdb_stdout);
|
||||||
puts_filtered ("\n");
|
puts_filtered ("\n");
|
||||||
for (idx = 0; idx < TYPE_NFIELDS (type); idx++)
|
for (idx = 0; idx < TYPE_NFIELDS (type); idx++)
|
||||||
{
|
{
|
||||||
|
@ -2744,12 +2742,12 @@ recursive_dump_type (type, spaces)
|
||||||
"[%d] bitpos %d bitsize %d type ",
|
"[%d] bitpos %d bitsize %d type ",
|
||||||
idx, TYPE_FIELD_BITPOS (type, idx),
|
idx, TYPE_FIELD_BITPOS (type, idx),
|
||||||
TYPE_FIELD_BITSIZE (type, idx));
|
TYPE_FIELD_BITSIZE (type, idx));
|
||||||
gdb_print_address (TYPE_FIELD_TYPE (type, idx), gdb_stdout);
|
gdb_print_host_address (TYPE_FIELD_TYPE (type, idx), gdb_stdout);
|
||||||
printf_filtered (" name '%s' (",
|
printf_filtered (" name '%s' (",
|
||||||
TYPE_FIELD_NAME (type, idx) != NULL
|
TYPE_FIELD_NAME (type, idx) != NULL
|
||||||
? TYPE_FIELD_NAME (type, idx)
|
? TYPE_FIELD_NAME (type, idx)
|
||||||
: "<NULL>");
|
: "<NULL>");
|
||||||
gdb_print_address (TYPE_FIELD_NAME (type, idx), gdb_stdout);
|
gdb_print_host_address (TYPE_FIELD_NAME (type, idx), gdb_stdout);
|
||||||
printf_filtered (")\n");
|
printf_filtered (")\n");
|
||||||
if (TYPE_FIELD_TYPE (type, idx) != NULL)
|
if (TYPE_FIELD_TYPE (type, idx) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -2757,7 +2755,7 @@ recursive_dump_type (type, spaces)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printfi_filtered (spaces, "vptr_basetype ");
|
printfi_filtered (spaces, "vptr_basetype ");
|
||||||
gdb_print_address (TYPE_VPTR_BASETYPE (type), gdb_stdout);
|
gdb_print_host_address (TYPE_VPTR_BASETYPE (type), gdb_stdout);
|
||||||
puts_filtered ("\n");
|
puts_filtered ("\n");
|
||||||
if (TYPE_VPTR_BASETYPE (type) != NULL)
|
if (TYPE_VPTR_BASETYPE (type) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -2769,14 +2767,14 @@ recursive_dump_type (type, spaces)
|
||||||
case TYPE_CODE_METHOD:
|
case TYPE_CODE_METHOD:
|
||||||
case TYPE_CODE_FUNC:
|
case TYPE_CODE_FUNC:
|
||||||
printfi_filtered (spaces, "arg_types ");
|
printfi_filtered (spaces, "arg_types ");
|
||||||
gdb_print_address (TYPE_ARG_TYPES (type), gdb_stdout);
|
gdb_print_host_address (TYPE_ARG_TYPES (type), gdb_stdout);
|
||||||
puts_filtered ("\n");
|
puts_filtered ("\n");
|
||||||
print_arg_types (TYPE_ARG_TYPES (type), spaces);
|
print_arg_types (TYPE_ARG_TYPES (type), spaces);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_CODE_STRUCT:
|
case TYPE_CODE_STRUCT:
|
||||||
printfi_filtered (spaces, "cplus_stuff ");
|
printfi_filtered (spaces, "cplus_stuff ");
|
||||||
gdb_print_address (TYPE_CPLUS_SPECIFIC (type), gdb_stdout);
|
gdb_print_host_address (TYPE_CPLUS_SPECIFIC (type), gdb_stdout);
|
||||||
puts_filtered ("\n");
|
puts_filtered ("\n");
|
||||||
print_cplus_stuff (type, spaces);
|
print_cplus_stuff (type, spaces);
|
||||||
break;
|
break;
|
||||||
|
@ -2786,7 +2784,7 @@ recursive_dump_type (type, spaces)
|
||||||
the value. Pick cplus_struct_type, even though we know it isn't
|
the value. Pick cplus_struct_type, even though we know it isn't
|
||||||
any particular one. */
|
any particular one. */
|
||||||
printfi_filtered (spaces, "type_specific ");
|
printfi_filtered (spaces, "type_specific ");
|
||||||
gdb_print_address (TYPE_CPLUS_SPECIFIC (type), gdb_stdout);
|
gdb_print_host_address (TYPE_CPLUS_SPECIFIC (type), gdb_stdout);
|
||||||
if (TYPE_CPLUS_SPECIFIC (type) != NULL)
|
if (TYPE_CPLUS_SPECIFIC (type) != NULL)
|
||||||
{
|
{
|
||||||
printf_filtered (" (unknown data form)");
|
printf_filtered (" (unknown data form)");
|
||||||
|
|
|
@ -45,7 +45,7 @@ void
|
||||||
do_pxdb PARAMS ((bfd *));
|
do_pxdb PARAMS ((bfd *));
|
||||||
|
|
||||||
void hpread_build_psymtabs
|
void hpread_build_psymtabs
|
||||||
PARAMS ((struct objfile *, struct section_offsets *, int));
|
PARAMS ((struct objfile *, int));
|
||||||
|
|
||||||
void hpread_symfile_finish
|
void hpread_symfile_finish
|
||||||
PARAMS ((struct objfile *));
|
PARAMS ((struct objfile *));
|
||||||
|
@ -57,7 +57,7 @@ static unsigned long hpread_get_textlow
|
||||||
PARAMS ((int, int, struct objfile *, int));
|
PARAMS ((int, int, struct objfile *, int));
|
||||||
|
|
||||||
static struct partial_symtab *hpread_start_psymtab
|
static struct partial_symtab *hpread_start_psymtab
|
||||||
PARAMS ((struct objfile *, struct section_offsets *, char *, CORE_ADDR, int,
|
PARAMS ((struct objfile *, char *, CORE_ADDR, int,
|
||||||
struct partial_symbol **, struct partial_symbol **));
|
struct partial_symbol **, struct partial_symbol **));
|
||||||
|
|
||||||
static struct partial_symtab *hpread_end_psymtab
|
static struct partial_symtab *hpread_end_psymtab
|
||||||
|
@ -516,7 +516,7 @@ find_next_module_isym (index, qMD, curr_md, pxdb_header_p)
|
||||||
organized in a separate routine, although it does take lots of arguments. pai/1997-10-08 */
|
organized in a separate routine, although it does take lots of arguments. pai/1997-10-08 */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
scan_procs (curr_pd_p, qPD, max_procs, start_adr, end_adr, pst, vt_bits, objfile, section_offsets)
|
scan_procs (curr_pd_p, qPD, max_procs, start_adr, end_adr, pst, vt_bits, objfile)
|
||||||
int *curr_pd_p; /* pointer to current proc index */
|
int *curr_pd_p; /* pointer to current proc index */
|
||||||
quick_procedure_entry *qPD; /* the procedure quick lookup table */
|
quick_procedure_entry *qPD; /* the procedure quick lookup table */
|
||||||
int max_procs; /* number of entries in proc. table */
|
int max_procs; /* number of entries in proc. table */
|
||||||
|
@ -525,7 +525,6 @@ scan_procs (curr_pd_p, qPD, max_procs, start_adr, end_adr, pst, vt_bits, objfile
|
||||||
struct partial_symtab *pst; /* current psymtab */
|
struct partial_symtab *pst; /* current psymtab */
|
||||||
char *vt_bits; /* strings table of SOM debug space */
|
char *vt_bits; /* strings table of SOM debug space */
|
||||||
struct objfile *objfile; /* current object file */
|
struct objfile *objfile; /* current object file */
|
||||||
struct section_offsets *section_offsets; /* not really used for HP-UX currently */
|
|
||||||
{
|
{
|
||||||
union dnttentry *dn_bufp;
|
union dnttentry *dn_bufp;
|
||||||
int symbol_count = 0; /* Total number of symbols in this psymtab */
|
int symbol_count = 0; /* Total number of symbols in this psymtab */
|
||||||
|
@ -602,7 +601,7 @@ scan_procs (curr_pd_p, qPD, max_procs, start_adr, end_adr, pst, vt_bits, objfile
|
||||||
LOC_BLOCK, /* "I am a routine" */
|
LOC_BLOCK, /* "I am a routine" */
|
||||||
&objfile->global_psymbols,
|
&objfile->global_psymbols,
|
||||||
(qPD[curr_pd].adrStart + /* Starting address of rtn */
|
(qPD[curr_pd].adrStart + /* Starting address of rtn */
|
||||||
ANOFFSET (section_offsets, SECT_OFF_TEXT)),
|
ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT)),
|
||||||
0, /* core addr?? */
|
0, /* core addr?? */
|
||||||
trans_lang ((enum hp_language) qPD[curr_pd].language),
|
trans_lang ((enum hp_language) qPD[curr_pd].language),
|
||||||
objfile);
|
objfile);
|
||||||
|
@ -615,7 +614,7 @@ scan_procs (curr_pd_p, qPD, max_procs, start_adr, end_adr, pst, vt_bits, objfile
|
||||||
LOC_BLOCK, /* "I am a routine" */
|
LOC_BLOCK, /* "I am a routine" */
|
||||||
&objfile->static_psymbols,
|
&objfile->static_psymbols,
|
||||||
(qPD[curr_pd].adrStart + /* Starting address of rtn */
|
(qPD[curr_pd].adrStart + /* Starting address of rtn */
|
||||||
ANOFFSET (section_offsets, SECT_OFF_TEXT)),
|
ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT)),
|
||||||
0, /* core addr?? */
|
0, /* core addr?? */
|
||||||
trans_lang ((enum hp_language) qPD[curr_pd].language),
|
trans_lang ((enum hp_language) qPD[curr_pd].language),
|
||||||
objfile);
|
objfile);
|
||||||
|
@ -647,9 +646,8 @@ scan_procs (curr_pd_p, qPD, max_procs, start_adr, end_adr, pst, vt_bits, objfile
|
||||||
entry for it, so in such cases we create a psymtab for the file. */
|
entry for it, so in such cases we create a psymtab for the file. */
|
||||||
|
|
||||||
int
|
int
|
||||||
hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header_p)
|
hpread_quick_traverse (objfile, gntt_bits, vt_bits, pxdb_header_p)
|
||||||
struct objfile *objfile; /* The object file descriptor */
|
struct objfile *objfile; /* The object file descriptor */
|
||||||
struct section_offsets *section_offsets; /* ?? Null for HP */
|
|
||||||
char *gntt_bits; /* GNTT entries, loaded in from the file */
|
char *gntt_bits; /* GNTT entries, loaded in from the file */
|
||||||
char *vt_bits; /* VT (string) entries ditto. */
|
char *vt_bits; /* VT (string) entries ditto. */
|
||||||
PXDB_header_ptr pxdb_header_p; /* Pointer to pxdb header ditto */
|
PXDB_header_ptr pxdb_header_p; /* Pointer to pxdb header ditto */
|
||||||
|
@ -862,7 +860,6 @@ hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header
|
||||||
might help. */
|
might help. */
|
||||||
|
|
||||||
pst = hpread_start_psymtab (objfile,
|
pst = hpread_start_psymtab (objfile,
|
||||||
section_offsets, /* ?? */
|
|
||||||
mod_name_string,
|
mod_name_string,
|
||||||
CURR_MODULE_START, /* Low text address: bogus! */
|
CURR_MODULE_START, /* Low text address: bogus! */
|
||||||
(CURR_MODULE_ISYM * sizeof (struct dntt_type_block)),
|
(CURR_MODULE_ISYM * sizeof (struct dntt_type_block)),
|
||||||
|
@ -964,7 +961,6 @@ hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header
|
||||||
And it's not even the right byte offset, as we're using
|
And it's not even the right byte offset, as we're using
|
||||||
the size of a union! FIXME! */
|
the size of a union! FIXME! */
|
||||||
pst = hpread_start_psymtab (objfile,
|
pst = hpread_start_psymtab (objfile,
|
||||||
section_offsets, /* ?? */
|
|
||||||
full_name_string,
|
full_name_string,
|
||||||
start_adr, /* Low text address */
|
start_adr, /* Low text address */
|
||||||
(start_sym * sizeof (struct dntt_type_block)),
|
(start_sym * sizeof (struct dntt_type_block)),
|
||||||
|
@ -980,8 +976,7 @@ hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header
|
||||||
file, based on the starting addresses. */
|
file, based on the starting addresses. */
|
||||||
|
|
||||||
syms_in_pst = scan_procs (&curr_pd, qPD, pxdb_header_p->pd_entries,
|
syms_in_pst = scan_procs (&curr_pd, qPD, pxdb_header_p->pd_entries,
|
||||||
start_adr, end_adr,
|
start_adr, end_adr, pst, vt_bits, objfile);
|
||||||
pst, vt_bits, objfile, section_offsets);
|
|
||||||
|
|
||||||
/* Get ending symbol offset */
|
/* Get ending symbol offset */
|
||||||
|
|
||||||
|
@ -1194,7 +1189,6 @@ hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header
|
||||||
And it's not even the right byte offset, as we're using
|
And it's not even the right byte offset, as we're using
|
||||||
the size of a union! FIXME! */
|
the size of a union! FIXME! */
|
||||||
pst = hpread_start_psymtab (objfile,
|
pst = hpread_start_psymtab (objfile,
|
||||||
section_offsets, /* ?? */
|
|
||||||
full_name_string,
|
full_name_string,
|
||||||
start_adr, /* Low text address */
|
start_adr, /* Low text address */
|
||||||
(start_sym * sizeof (struct dntt_type_block)),
|
(start_sym * sizeof (struct dntt_type_block)),
|
||||||
|
@ -1210,8 +1204,7 @@ hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header
|
||||||
module, based on the starting addresses. */
|
module, based on the starting addresses. */
|
||||||
|
|
||||||
syms_in_pst = scan_procs (&curr_pd, qPD, pxdb_header_p->pd_entries,
|
syms_in_pst = scan_procs (&curr_pd, qPD, pxdb_header_p->pd_entries,
|
||||||
start_adr, end_adr,
|
start_adr, end_adr, pst, vt_bits, objfile);
|
||||||
pst, vt_bits, objfile, section_offsets);
|
|
||||||
|
|
||||||
/* Get ending symbol offset */
|
/* Get ending symbol offset */
|
||||||
|
|
||||||
|
@ -1308,7 +1301,6 @@ hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
pst = hpread_start_psymtab (objfile,
|
pst = hpread_start_psymtab (objfile,
|
||||||
section_offsets, /* ?? */
|
|
||||||
"orphans",
|
"orphans",
|
||||||
start_adr, /* Low text address */
|
start_adr, /* Low text address */
|
||||||
(CURR_PROC_ISYM * sizeof (struct dntt_type_block)),
|
(CURR_PROC_ISYM * sizeof (struct dntt_type_block)),
|
||||||
|
@ -1317,8 +1309,7 @@ hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header
|
||||||
static_syms);
|
static_syms);
|
||||||
|
|
||||||
scan_procs (&curr_pd, qPD, pxdb_header_p->pd_entries,
|
scan_procs (&curr_pd, qPD, pxdb_header_p->pd_entries,
|
||||||
start_adr, end_adr,
|
start_adr, end_adr, pst, vt_bits, objfile);
|
||||||
pst, vt_bits, objfile, section_offsets);
|
|
||||||
|
|
||||||
pst = hpread_end_psymtab (pst,
|
pst = hpread_end_psymtab (pst,
|
||||||
NULL, /* psymtab_include_list */
|
NULL, /* psymtab_include_list */
|
||||||
|
@ -1340,7 +1331,6 @@ hpread_quick_traverse (objfile, section_offsets, gntt_bits, vt_bits, pxdb_header
|
||||||
If null psts were kept on the chain, this would be
|
If null psts were kept on the chain, this would be
|
||||||
a solution. FIXME */
|
a solution. FIXME */
|
||||||
pst = hpread_start_psymtab (objfile,
|
pst = hpread_start_psymtab (objfile,
|
||||||
section_offsets,
|
|
||||||
"globals",
|
"globals",
|
||||||
0,
|
0,
|
||||||
(pxdb_header_p->globals
|
(pxdb_header_p->globals
|
||||||
|
@ -1578,14 +1568,12 @@ hpread_symfile_init (objfile)
|
||||||
We assume hpread_symfile_init has been called to initialize the
|
We assume hpread_symfile_init has been called to initialize the
|
||||||
symbol reader's private data structures.
|
symbol reader's private data structures.
|
||||||
|
|
||||||
SECTION_OFFSETS contains offsets relative to which the symbols in the
|
|
||||||
various sections are (depending where the sections were actually loaded).
|
|
||||||
MAINLINE is true if we are reading the main symbol table (as
|
MAINLINE is true if we are reading the main symbol table (as
|
||||||
opposed to a shared lib or dynamically loaded file). */
|
opposed to a shared lib or dynamically loaded file). */
|
||||||
|
|
||||||
void
|
void
|
||||||
hpread_build_psymtabs (objfile, section_offsets, mainline)
|
hpread_build_psymtabs (objfile, mainline)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
int mainline;
|
int mainline;
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1679,7 +1667,6 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
not found we give up on the quick table stuff,
|
not found we give up on the quick table stuff,
|
||||||
and fall back on the slower method */
|
and fall back on the slower method */
|
||||||
found_modules_in_program = hpread_quick_traverse (objfile,
|
found_modules_in_program = hpread_quick_traverse (objfile,
|
||||||
section_offsets,
|
|
||||||
GNTT (objfile),
|
GNTT (objfile),
|
||||||
VT (objfile),
|
VT (objfile),
|
||||||
&pxdb_header);
|
&pxdb_header);
|
||||||
|
@ -1829,8 +1816,8 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
past_first_source_file = 1;
|
past_first_source_file = 1;
|
||||||
|
|
||||||
valu = hpread_get_textlow (i, hp_symnum, objfile, symcount);
|
valu = hpread_get_textlow (i, hp_symnum, objfile, symcount);
|
||||||
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
valu += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
pst = hpread_start_psymtab (objfile, section_offsets,
|
pst = hpread_start_psymtab (objfile,
|
||||||
namestring, valu,
|
namestring, valu,
|
||||||
(hp_symnum
|
(hp_symnum
|
||||||
* sizeof (struct dntt_type_block)),
|
* sizeof (struct dntt_type_block)),
|
||||||
|
@ -1863,10 +1850,10 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
/* Now begin a new module and a new psymtab for it */
|
/* Now begin a new module and a new psymtab for it */
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
valu = hpread_get_textlow (i, hp_symnum, objfile, symcount);
|
valu = hpread_get_textlow (i, hp_symnum, objfile, symcount);
|
||||||
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
valu += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
if (!pst)
|
if (!pst)
|
||||||
{
|
{
|
||||||
pst = hpread_start_psymtab (objfile, section_offsets,
|
pst = hpread_start_psymtab (objfile,
|
||||||
namestring, valu,
|
namestring, valu,
|
||||||
(hp_symnum
|
(hp_symnum
|
||||||
* sizeof (struct dntt_type_block)),
|
* sizeof (struct dntt_type_block)),
|
||||||
|
@ -1881,12 +1868,12 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
case DNTT_TYPE_ENTRY:
|
case DNTT_TYPE_ENTRY:
|
||||||
/* The beginning of a function. DNTT_TYPE_ENTRY may also denote
|
/* The beginning of a function. DNTT_TYPE_ENTRY may also denote
|
||||||
a secondary entry point. */
|
a secondary entry point. */
|
||||||
valu = dn_bufp->dfunc.hiaddr + ANOFFSET (section_offsets,
|
valu = dn_bufp->dfunc.hiaddr + ANOFFSET (objfile->section_offsets,
|
||||||
SECT_OFF_TEXT);
|
SECT_OFF_TEXT);
|
||||||
if (valu > texthigh)
|
if (valu > texthigh)
|
||||||
texthigh = valu;
|
texthigh = valu;
|
||||||
valu = dn_bufp->dfunc.lowaddr +
|
valu = dn_bufp->dfunc.lowaddr +
|
||||||
ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
if (dn_bufp->dfunc.global)
|
if (dn_bufp->dfunc.global)
|
||||||
add_psymbol_to_list (namestring, strlen (namestring),
|
add_psymbol_to_list (namestring, strlen (namestring),
|
||||||
|
@ -1902,12 +1889,12 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case DNTT_TYPE_DOC_FUNCTION:
|
case DNTT_TYPE_DOC_FUNCTION:
|
||||||
valu = dn_bufp->ddocfunc.hiaddr + ANOFFSET (section_offsets,
|
valu = dn_bufp->ddocfunc.hiaddr + ANOFFSET (objfile->section_offsets,
|
||||||
SECT_OFF_TEXT);
|
SECT_OFF_TEXT);
|
||||||
if (valu > texthigh)
|
if (valu > texthigh)
|
||||||
texthigh = valu;
|
texthigh = valu;
|
||||||
valu = dn_bufp->ddocfunc.lowaddr +
|
valu = dn_bufp->ddocfunc.lowaddr +
|
||||||
ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
if (dn_bufp->ddocfunc.global)
|
if (dn_bufp->ddocfunc.global)
|
||||||
add_psymbol_to_list (namestring, strlen (namestring),
|
add_psymbol_to_list (namestring, strlen (namestring),
|
||||||
|
@ -1985,7 +1972,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
if (!pst)
|
if (!pst)
|
||||||
{
|
{
|
||||||
pst = hpread_start_psymtab (objfile, section_offsets,
|
pst = hpread_start_psymtab (objfile,
|
||||||
"globals", 0,
|
"globals", 0,
|
||||||
(hp_symnum
|
(hp_symnum
|
||||||
* sizeof (struct dntt_type_block)),
|
* sizeof (struct dntt_type_block)),
|
||||||
|
@ -1997,7 +1984,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
valu = dn_bufp->dsvar.location;
|
valu = dn_bufp->dsvar.location;
|
||||||
/* Relocate in case it's in a shared library */
|
/* Relocate in case it's in a shared library */
|
||||||
if (storage == LOC_STATIC)
|
if (storage == LOC_STATIC)
|
||||||
valu += ANOFFSET (section_offsets, SECT_OFF_DATA);
|
valu += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA);
|
||||||
|
|
||||||
/* Luckily, dvar, svar, typedef, and tagdef all
|
/* Luckily, dvar, svar, typedef, and tagdef all
|
||||||
have their "global" bit in the same place, so it works
|
have their "global" bit in the same place, so it works
|
||||||
|
@ -2069,7 +2056,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
if (!pst)
|
if (!pst)
|
||||||
{
|
{
|
||||||
pst = hpread_start_psymtab (objfile, section_offsets,
|
pst = hpread_start_psymtab (objfile,
|
||||||
"globals", 0,
|
"globals", 0,
|
||||||
(hp_symnum
|
(hp_symnum
|
||||||
* sizeof (struct dntt_type_block)),
|
* sizeof (struct dntt_type_block)),
|
||||||
|
@ -2212,20 +2199,19 @@ hpread_get_textlow (global, index, objfile, symcount)
|
||||||
(normal). */
|
(normal). */
|
||||||
|
|
||||||
static struct partial_symtab *
|
static struct partial_symtab *
|
||||||
hpread_start_psymtab (objfile, section_offsets,
|
hpread_start_psymtab (objfile,
|
||||||
filename, textlow, ldsymoff, global_syms, static_syms)
|
filename, textlow, ldsymoff, global_syms, static_syms)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
char *filename;
|
char *filename;
|
||||||
CORE_ADDR textlow;
|
CORE_ADDR textlow;
|
||||||
int ldsymoff;
|
int ldsymoff;
|
||||||
struct partial_symbol **global_syms;
|
struct partial_symbol **global_syms;
|
||||||
struct partial_symbol **static_syms;
|
struct partial_symbol **static_syms;
|
||||||
{
|
{
|
||||||
int offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
int offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
extern void hpread_psymtab_to_symtab ();
|
extern void hpread_psymtab_to_symtab ();
|
||||||
struct partial_symtab *result =
|
struct partial_symtab *result =
|
||||||
start_psymtab_common (objfile, section_offsets,
|
start_psymtab_common (objfile, objfile->section_offsets,
|
||||||
filename, textlow, global_syms, static_syms);
|
filename, textlow, global_syms, static_syms);
|
||||||
|
|
||||||
result->textlow += offset;
|
result->textlow += offset;
|
||||||
|
|
104
gdb/hppa-tdep.c
104
gdb/hppa-tdep.c
|
@ -419,9 +419,9 @@ static void
|
||||||
read_unwind_info (objfile)
|
read_unwind_info (objfile)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
{
|
{
|
||||||
asection *unwind_sec, *elf_unwind_sec, *stub_unwind_sec;
|
asection *unwind_sec, *stub_unwind_sec;
|
||||||
unsigned unwind_size, elf_unwind_size, stub_unwind_size, total_size;
|
unsigned unwind_size, stub_unwind_size, total_size;
|
||||||
unsigned index, unwind_entries, elf_unwind_entries;
|
unsigned index, unwind_entries;
|
||||||
unsigned stub_entries, total_entries;
|
unsigned stub_entries, total_entries;
|
||||||
CORE_ADDR text_offset;
|
CORE_ADDR text_offset;
|
||||||
struct obj_unwind_info *ui;
|
struct obj_unwind_info *ui;
|
||||||
|
@ -435,35 +435,32 @@ read_unwind_info (objfile)
|
||||||
ui->cache = NULL;
|
ui->cache = NULL;
|
||||||
ui->last = -1;
|
ui->last = -1;
|
||||||
|
|
||||||
/* Get hooks to all unwind sections. Note there is no linker-stub unwind
|
/* For reasons unknown the HP PA64 tools generate multiple unwinder
|
||||||
section in ELF at the moment. */
|
sections in a single executable. So we just iterate over every
|
||||||
unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_START$");
|
section in the BFD looking for unwinder sections intead of trying
|
||||||
elf_unwind_sec = bfd_get_section_by_name (objfile->obfd, ".PARISC.unwind");
|
to do a lookup with bfd_get_section_by_name.
|
||||||
|
|
||||||
|
First determine the total size of the unwind tables so that we
|
||||||
|
can allocate memory in a nice big hunk. */
|
||||||
|
total_entries = 0;
|
||||||
|
for (unwind_sec = objfile->obfd->sections;
|
||||||
|
unwind_sec;
|
||||||
|
unwind_sec = unwind_sec->next)
|
||||||
|
{
|
||||||
|
if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0
|
||||||
|
|| strcmp (unwind_sec->name, ".PARISC.unwind") == 0)
|
||||||
|
{
|
||||||
|
unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
|
||||||
|
unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
|
||||||
|
|
||||||
|
total_entries += unwind_entries;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now compute the size of the stub unwinds. Note the ELF tools do not
|
||||||
|
use stub unwinds at the curren time. */
|
||||||
stub_unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_END$");
|
stub_unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_END$");
|
||||||
|
|
||||||
/* Get sizes and unwind counts for all sections. */
|
|
||||||
if (unwind_sec)
|
|
||||||
{
|
|
||||||
unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
|
|
||||||
unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
unwind_size = 0;
|
|
||||||
unwind_entries = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (elf_unwind_sec)
|
|
||||||
{
|
|
||||||
elf_unwind_size = bfd_section_size (objfile->obfd, elf_unwind_sec);
|
|
||||||
elf_unwind_entries = elf_unwind_size / UNWIND_ENTRY_SIZE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
elf_unwind_size = 0;
|
|
||||||
elf_unwind_entries = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stub_unwind_sec)
|
if (stub_unwind_sec)
|
||||||
{
|
{
|
||||||
stub_unwind_size = bfd_section_size (objfile->obfd, stub_unwind_sec);
|
stub_unwind_size = bfd_section_size (objfile->obfd, stub_unwind_sec);
|
||||||
|
@ -476,7 +473,7 @@ read_unwind_info (objfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compute total number of unwind entries and their total size. */
|
/* Compute total number of unwind entries and their total size. */
|
||||||
total_entries = unwind_entries + elf_unwind_entries + stub_entries;
|
total_entries += stub_entries;
|
||||||
total_size = total_entries * sizeof (struct unwind_table_entry);
|
total_size = total_entries * sizeof (struct unwind_table_entry);
|
||||||
|
|
||||||
/* Allocate memory for the unwind table. */
|
/* Allocate memory for the unwind table. */
|
||||||
|
@ -484,16 +481,26 @@ read_unwind_info (objfile)
|
||||||
obstack_alloc (&objfile->psymbol_obstack, total_size);
|
obstack_alloc (&objfile->psymbol_obstack, total_size);
|
||||||
ui->last = total_entries - 1;
|
ui->last = total_entries - 1;
|
||||||
|
|
||||||
/* Internalize the standard unwind entries. */
|
/* Now read in each unwind section and internalize the standard unwind
|
||||||
|
entries. */
|
||||||
index = 0;
|
index = 0;
|
||||||
internalize_unwinds (objfile, &ui->table[index], unwind_sec,
|
for (unwind_sec = objfile->obfd->sections;
|
||||||
unwind_entries, unwind_size, text_offset);
|
unwind_sec;
|
||||||
index += unwind_entries;
|
unwind_sec = unwind_sec->next)
|
||||||
internalize_unwinds (objfile, &ui->table[index], elf_unwind_sec,
|
{
|
||||||
elf_unwind_entries, elf_unwind_size, text_offset);
|
if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0
|
||||||
index += elf_unwind_entries;
|
|| strcmp (unwind_sec->name, ".PARISC.unwind") == 0)
|
||||||
|
{
|
||||||
|
unwind_size = bfd_section_size (objfile->obfd, unwind_sec);
|
||||||
|
unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
|
||||||
|
|
||||||
/* Now internalize the stub unwind entries. */
|
internalize_unwinds (objfile, &ui->table[index], unwind_sec,
|
||||||
|
unwind_entries, unwind_size, text_offset);
|
||||||
|
index += unwind_entries;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now read in and internalize the stub unwind entries. */
|
||||||
if (stub_unwind_size > 0)
|
if (stub_unwind_size > 0)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -3272,7 +3279,7 @@ prologue_inst_adjust_sp (inst)
|
||||||
|
|
||||||
/* std,ma X,D(sp) */
|
/* std,ma X,D(sp) */
|
||||||
if ((inst & 0xffe00008) == 0x73c00008)
|
if ((inst & 0xffe00008) == 0x73c00008)
|
||||||
return (inst & 0x1 ? -1 << 16 : 0) | (((inst >> 4) & 0x3ff) << 3);
|
return (inst & 0x1 ? -1 << 13 : 0) | (((inst >> 4) & 0x3ff) << 3);
|
||||||
|
|
||||||
/* addil high21,%r1; ldo low11,(%r1),%r30)
|
/* addil high21,%r1; ldo low11,(%r1),%r30)
|
||||||
save high bits in save_high21 for later use. */
|
save high bits in save_high21 for later use. */
|
||||||
|
@ -3703,6 +3710,7 @@ hppa_frame_find_saved_regs (frame_info, frame_saved_regs)
|
||||||
int status, i, reg;
|
int status, i, reg;
|
||||||
char buf[4];
|
char buf[4];
|
||||||
int fp_loc = -1;
|
int fp_loc = -1;
|
||||||
|
int final_iteration;
|
||||||
|
|
||||||
/* Zero out everything. */
|
/* Zero out everything. */
|
||||||
memset (frame_saved_regs, '\0', sizeof (struct frame_saved_regs));
|
memset (frame_saved_regs, '\0', sizeof (struct frame_saved_regs));
|
||||||
|
@ -3805,7 +3813,9 @@ hppa_frame_find_saved_regs (frame_info, frame_saved_regs)
|
||||||
Some unexpected things are expected with debugging optimized code, so
|
Some unexpected things are expected with debugging optimized code, so
|
||||||
we allow this routine to walk past user instructions in optimized
|
we allow this routine to walk past user instructions in optimized
|
||||||
GCC code. */
|
GCC code. */
|
||||||
while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
|
final_iteration = 0;
|
||||||
|
while ((save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
|
||||||
|
&& pc <= frame_info->pc)
|
||||||
{
|
{
|
||||||
status = target_read_memory (pc, buf, 4);
|
status = target_read_memory (pc, buf, 4);
|
||||||
inst = extract_unsigned_integer (buf, 4);
|
inst = extract_unsigned_integer (buf, 4);
|
||||||
|
@ -3853,7 +3863,7 @@ hppa_frame_find_saved_regs (frame_info, frame_saved_regs)
|
||||||
CORE_ADDR offset;
|
CORE_ADDR offset;
|
||||||
|
|
||||||
if ((inst >> 26) == 0x1c)
|
if ((inst >> 26) == 0x1c)
|
||||||
offset = (inst & 0x1 ? -1 << 16 : 0) | (((inst >> 4) & 0x3ff) << 3);
|
offset = (inst & 0x1 ? -1 << 13 : 0) | (((inst >> 4) & 0x3ff) << 3);
|
||||||
else if ((inst >> 26) == 0x03)
|
else if ((inst >> 26) == 0x03)
|
||||||
offset = low_sign_extend (inst & 0x1f, 5);
|
offset = low_sign_extend (inst & 0x1f, 5);
|
||||||
else
|
else
|
||||||
|
@ -3908,11 +3918,15 @@ hppa_frame_find_saved_regs (frame_info, frame_saved_regs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Quit if we hit any kind of branch. This can happen if a prologue
|
/* Quit if we hit any kind of branch the previous iteration.
|
||||||
instruction is in the delay slot of the first call/branch. */
|
if (final_iteration)
|
||||||
if (is_branch (inst))
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* We want to look precisely one instruction beyond the branch
|
||||||
|
if we have not found everything yet. */
|
||||||
|
if (is_branch (inst))
|
||||||
|
final_iteration = 1;
|
||||||
|
|
||||||
/* Bump the PC. */
|
/* Bump the PC. */
|
||||||
pc += 4;
|
pc += 4;
|
||||||
}
|
}
|
||||||
|
|
30
gdb/hpread.c
30
gdb/hpread.c
|
@ -159,12 +159,12 @@ static struct type *hpread_read_struct_type
|
||||||
PARAMS ((dnttpointer, union dnttentry *, struct objfile *));
|
PARAMS ((dnttpointer, union dnttentry *, struct objfile *));
|
||||||
|
|
||||||
void hpread_build_psymtabs
|
void hpread_build_psymtabs
|
||||||
PARAMS ((struct objfile *, struct section_offsets *, int));
|
PARAMS ((struct objfile *, int));
|
||||||
|
|
||||||
void hpread_symfile_finish PARAMS ((struct objfile *));
|
void hpread_symfile_finish PARAMS ((struct objfile *));
|
||||||
|
|
||||||
static struct partial_symtab *hpread_start_psymtab
|
static struct partial_symtab *hpread_start_psymtab
|
||||||
PARAMS ((struct objfile *, struct section_offsets *, char *, CORE_ADDR, int,
|
PARAMS ((struct objfile *, char *, CORE_ADDR, int,
|
||||||
struct partial_symbol **, struct partial_symbol **));
|
struct partial_symbol **, struct partial_symbol **));
|
||||||
|
|
||||||
static struct partial_symtab *hpread_end_psymtab
|
static struct partial_symtab *hpread_end_psymtab
|
||||||
|
@ -305,15 +305,12 @@ hpread_symfile_init (objfile)
|
||||||
We assume hpread_symfile_init has been called to initialize the
|
We assume hpread_symfile_init has been called to initialize the
|
||||||
symbol reader's private data structures.
|
symbol reader's private data structures.
|
||||||
|
|
||||||
SECTION_OFFSETS contains offsets relative to which the symbols in the
|
|
||||||
various sections are (depending where the sections were actually loaded).
|
|
||||||
MAINLINE is true if we are reading the main symbol
|
MAINLINE is true if we are reading the main symbol
|
||||||
table (as opposed to a shared lib or dynamically loaded file). */
|
table (as opposed to a shared lib or dynamically loaded file). */
|
||||||
|
|
||||||
void
|
void
|
||||||
hpread_build_psymtabs (objfile, section_offsets, mainline)
|
hpread_build_psymtabs (objfile, mainline)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
int mainline;
|
int mainline;
|
||||||
{
|
{
|
||||||
char *namestring;
|
char *namestring;
|
||||||
|
@ -469,8 +466,8 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
past_first_source_file = 1;
|
past_first_source_file = 1;
|
||||||
|
|
||||||
valu = hpread_get_textlow (i, hp_symnum, objfile);
|
valu = hpread_get_textlow (i, hp_symnum, objfile);
|
||||||
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
valu += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
pst = hpread_start_psymtab (objfile, section_offsets,
|
pst = hpread_start_psymtab (objfile,
|
||||||
namestring, valu,
|
namestring, valu,
|
||||||
(hp_symnum
|
(hp_symnum
|
||||||
* sizeof (struct dntt_type_block)),
|
* sizeof (struct dntt_type_block)),
|
||||||
|
@ -487,10 +484,10 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
is supposed to be. */
|
is supposed to be. */
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
valu = hpread_get_textlow (i, hp_symnum, objfile);
|
valu = hpread_get_textlow (i, hp_symnum, objfile);
|
||||||
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
valu += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
if (!pst)
|
if (!pst)
|
||||||
{
|
{
|
||||||
pst = hpread_start_psymtab (objfile, section_offsets,
|
pst = hpread_start_psymtab (objfile,
|
||||||
namestring, valu,
|
namestring, valu,
|
||||||
(hp_symnum
|
(hp_symnum
|
||||||
* sizeof (struct dntt_type_block)),
|
* sizeof (struct dntt_type_block)),
|
||||||
|
@ -504,12 +501,12 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
case DNTT_TYPE_ENTRY:
|
case DNTT_TYPE_ENTRY:
|
||||||
/* The beginning of a function. DNTT_TYPE_ENTRY may also denote
|
/* The beginning of a function. DNTT_TYPE_ENTRY may also denote
|
||||||
a secondary entry point. */
|
a secondary entry point. */
|
||||||
valu = dn_bufp->dfunc.hiaddr + ANOFFSET (section_offsets,
|
valu = dn_bufp->dfunc.hiaddr + ANOFFSET (objfile->section_offsets,
|
||||||
SECT_OFF_TEXT);
|
SECT_OFF_TEXT);
|
||||||
if (valu > texthigh)
|
if (valu > texthigh)
|
||||||
texthigh = valu;
|
texthigh = valu;
|
||||||
valu = dn_bufp->dfunc.lowaddr +
|
valu = dn_bufp->dfunc.lowaddr +
|
||||||
ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
add_psymbol_to_list (namestring, strlen (namestring),
|
add_psymbol_to_list (namestring, strlen (namestring),
|
||||||
VAR_NAMESPACE, LOC_BLOCK,
|
VAR_NAMESPACE, LOC_BLOCK,
|
||||||
|
@ -571,7 +568,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
if (!pst)
|
if (!pst)
|
||||||
{
|
{
|
||||||
pst = hpread_start_psymtab (objfile, section_offsets,
|
pst = hpread_start_psymtab (objfile,
|
||||||
"globals", 0,
|
"globals", 0,
|
||||||
(hp_symnum
|
(hp_symnum
|
||||||
* sizeof (struct dntt_type_block)),
|
* sizeof (struct dntt_type_block)),
|
||||||
|
@ -602,7 +599,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||||
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
SET_NAMESTRING (dn_bufp, &namestring, objfile);
|
||||||
if (!pst)
|
if (!pst)
|
||||||
{
|
{
|
||||||
pst = hpread_start_psymtab (objfile, section_offsets,
|
pst = hpread_start_psymtab (objfile,
|
||||||
"globals", 0,
|
"globals", 0,
|
||||||
(hp_symnum
|
(hp_symnum
|
||||||
* sizeof (struct dntt_type_block)),
|
* sizeof (struct dntt_type_block)),
|
||||||
|
@ -826,10 +823,9 @@ hpread_has_name (kind)
|
||||||
(normal). */
|
(normal). */
|
||||||
|
|
||||||
static struct partial_symtab *
|
static struct partial_symtab *
|
||||||
hpread_start_psymtab (objfile, section_offsets,
|
hpread_start_psymtab (objfile, filename, textlow, ldsymoff, global_syms,
|
||||||
filename, textlow, ldsymoff, global_syms, static_syms)
|
static_syms)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
char *filename;
|
char *filename;
|
||||||
CORE_ADDR textlow;
|
CORE_ADDR textlow;
|
||||||
int ldsymoff;
|
int ldsymoff;
|
||||||
|
|
379
gdb/i386-linux-nat.c
Normal file
379
gdb/i386-linux-nat.c
Normal file
|
@ -0,0 +1,379 @@
|
||||||
|
/* Native-dependent code for Linux running on i386's, for GDB.
|
||||||
|
|
||||||
|
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 "inferior.h"
|
||||||
|
#include "gdbcore.h"
|
||||||
|
|
||||||
|
/* For i386_linux_skip_solib_resolver */
|
||||||
|
#include "symtab.h"
|
||||||
|
#include "frame.h"
|
||||||
|
#include "symfile.h"
|
||||||
|
#include "objfiles.h"
|
||||||
|
|
||||||
|
#include <sys/ptrace.h>
|
||||||
|
#include <sys/user.h>
|
||||||
|
#include <sys/procfs.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_REG_H
|
||||||
|
#include <sys/reg.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This is a duplicate of the table in i386-xdep.c. */
|
||||||
|
|
||||||
|
static int regmap[] =
|
||||||
|
{
|
||||||
|
EAX, ECX, EDX, EBX,
|
||||||
|
UESP, EBP, ESI, EDI,
|
||||||
|
EIP, EFL, CS, SS,
|
||||||
|
DS, ES, FS, GS,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* FIXME: These routine absolutely depends upon (NUM_REGS - NUM_FREGS)
|
||||||
|
being less than or equal to the number of registers that can be stored
|
||||||
|
in a gregset_t. Note that with the current scheme there will typically
|
||||||
|
be more registers actually stored in a gregset_t that what we know
|
||||||
|
about. This is bogus and should be fixed. */
|
||||||
|
|
||||||
|
/* Given a pointer to a general register set in /proc format (gregset_t *),
|
||||||
|
unpack the register contents and supply them as gdb's idea of the current
|
||||||
|
register values. */
|
||||||
|
|
||||||
|
void
|
||||||
|
supply_gregset (gregsetp)
|
||||||
|
gregset_t *gregsetp;
|
||||||
|
{
|
||||||
|
register int regi;
|
||||||
|
register greg_t *regp = (greg_t *) gregsetp;
|
||||||
|
|
||||||
|
for (regi = 0 ; regi < (NUM_REGS - NUM_FREGS) ; regi++)
|
||||||
|
{
|
||||||
|
supply_register (regi, (char *) (regp + regmap[regi]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fill_gregset (gregsetp, regno)
|
||||||
|
gregset_t *gregsetp;
|
||||||
|
int regno;
|
||||||
|
{
|
||||||
|
int regi;
|
||||||
|
register greg_t *regp = (greg_t *) gregsetp;
|
||||||
|
|
||||||
|
for (regi = 0 ; regi < (NUM_REGS - NUM_FREGS) ; regi++)
|
||||||
|
{
|
||||||
|
if ((regno == -1) || (regno == regi))
|
||||||
|
{
|
||||||
|
*(regp + regmap[regi]) = *(int *) ®isters[REGISTER_BYTE (regi)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Given a pointer to a floating point register set in (fpregset_t *)
|
||||||
|
format, unpack the register contents and supply them as gdb's
|
||||||
|
idea of the current floating point register values. */
|
||||||
|
|
||||||
|
void
|
||||||
|
supply_fpregset (fpregsetp)
|
||||||
|
fpregset_t *fpregsetp;
|
||||||
|
{
|
||||||
|
register int regi;
|
||||||
|
char *from;
|
||||||
|
from = (char *) &(fpregsetp->st_space[0]);
|
||||||
|
for (regi = FPSTART_REGNUM ; regi <= FPEND_REGNUM ; regi++)
|
||||||
|
{
|
||||||
|
supply_register(regi, from);
|
||||||
|
from += REGISTER_RAW_SIZE(regi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Given a pointer to a floating point register set in (fpregset_t *)
|
||||||
|
format, update all of the registers from gdb's idea
|
||||||
|
of the current floating point register set. */
|
||||||
|
|
||||||
|
void
|
||||||
|
fill_fpregset (fpregsetp, regno)
|
||||||
|
fpregset_t *fpregsetp;
|
||||||
|
int regno;
|
||||||
|
{
|
||||||
|
int regi;
|
||||||
|
char *to;
|
||||||
|
char *from;
|
||||||
|
|
||||||
|
to = (char *) &(fpregsetp->st_space[0]);
|
||||||
|
for (regi = FPSTART_REGNUM ; regi <= FPEND_REGNUM ; regi++)
|
||||||
|
{
|
||||||
|
from = (char *) ®isters[REGISTER_BYTE (regi)];
|
||||||
|
memcpy (to, from, REGISTER_RAW_SIZE (regi));
|
||||||
|
to += REGISTER_RAW_SIZE(regi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Get the whole floating point state of the process and
|
||||||
|
store the floating point stack into registers[].
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
fetch_fpregs(void)
|
||||||
|
{
|
||||||
|
int ret, regno;
|
||||||
|
char buf[FPREG_BYTES];
|
||||||
|
|
||||||
|
ret = ptrace (PTRACE_GETFPREGS, inferior_pid, 0, (int)buf);
|
||||||
|
if ( ret < 0 )
|
||||||
|
{
|
||||||
|
warning ("Couldn't get floating point status");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( regno = 0; regno < NUM_FREGS; regno++ )
|
||||||
|
{
|
||||||
|
if ( regno < 7 )
|
||||||
|
supply_register (NUM_REGS-NUM_FREGS+regno, buf + regno*4);
|
||||||
|
else
|
||||||
|
supply_register (NUM_REGS-NUM_FREGS+regno,
|
||||||
|
buf + FPENV_BYTES + (regno-7)*FPREG_RAW_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Get the whole floating point state of the process and
|
||||||
|
replace the contents from registers[].
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
store_fpregs(void)
|
||||||
|
{
|
||||||
|
int ret, regno;
|
||||||
|
char buf[FPREG_BYTES];
|
||||||
|
|
||||||
|
ret = ptrace (PTRACE_GETFPREGS, inferior_pid, 0, (int)buf);
|
||||||
|
if ( ret < 0 )
|
||||||
|
{
|
||||||
|
warning ("Couldn't get floating point status");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( regno = 0; regno < NUM_FREGS; regno++ )
|
||||||
|
{
|
||||||
|
if ( register_valid[regno] )
|
||||||
|
{
|
||||||
|
if ( regno < 7 )
|
||||||
|
{
|
||||||
|
read_register_gen (NUM_REGS-NUM_FREGS+regno,
|
||||||
|
buf + regno*4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
read_register_gen (NUM_REGS-NUM_FREGS+regno,
|
||||||
|
buf + FPENV_BYTES + (regno-7)*FPREG_RAW_SIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ptrace (PTRACE_SETFPREGS, inferior_pid, 0, (int)buf);
|
||||||
|
if ( ret < 0 )
|
||||||
|
{
|
||||||
|
warning ("Couldn't write floating point status");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Get state of all non-fp registers of the process and
|
||||||
|
store into registers[].
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
fetch_regs(void)
|
||||||
|
{
|
||||||
|
int ret, regno;
|
||||||
|
char buf[17*sizeof(unsigned int)];
|
||||||
|
|
||||||
|
ret = ptrace (PTRACE_GETREGS, inferior_pid, 0, (int)buf);
|
||||||
|
if ( ret < 0 )
|
||||||
|
{
|
||||||
|
warning ("Couldn't get registers");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( regno = 0; regno < NUM_REGS-NUM_FREGS; regno++ )
|
||||||
|
supply_register (regno, buf + register_addr (regno, U_REGS_OFFSET));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Get the whole non-floating-point register state of the process and
|
||||||
|
replace them in the process from registers[].
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
store_regs(void)
|
||||||
|
{
|
||||||
|
int ret, regno;
|
||||||
|
char buf[17*sizeof(unsigned int)];
|
||||||
|
|
||||||
|
ret = ptrace (PTRACE_GETREGS, inferior_pid, 0, (int)buf);
|
||||||
|
if ( ret < 0 )
|
||||||
|
{
|
||||||
|
warning ("Couldn't get registers");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( regno = 0; regno < NUM_REGS-NUM_FREGS; regno++ )
|
||||||
|
{
|
||||||
|
if ( register_valid[regno] )
|
||||||
|
read_register_gen (regno, buf + register_addr (regno, U_REGS_OFFSET));
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ptrace (PTRACE_SETREGS, inferior_pid, 0, (int)buf);
|
||||||
|
|
||||||
|
if ( ret < 0 )
|
||||||
|
{
|
||||||
|
warning ("Couldn't write floating point status");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Fetch registers from the child process.
|
||||||
|
Fetch all if regno == -1, otherwise fetch all ordinary
|
||||||
|
registers or all floating point registers depending
|
||||||
|
upon the value of regno. */
|
||||||
|
|
||||||
|
void
|
||||||
|
fetch_inferior_registers (regno)
|
||||||
|
int regno;
|
||||||
|
{
|
||||||
|
if ( (regno < NUM_REGS - NUM_FREGS) || (regno == -1) )
|
||||||
|
fetch_regs();
|
||||||
|
|
||||||
|
if ( (regno >= NUM_REGS - NUM_FREGS) || (regno == -1) )
|
||||||
|
fetch_fpregs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Store our register values back into the inferior.
|
||||||
|
If REGNO is -1, do this for all registers.
|
||||||
|
Otherwise, REGNO specifies which register, which
|
||||||
|
then determines whether we store all ordinary
|
||||||
|
registers or all of the floating point registers. */
|
||||||
|
|
||||||
|
void
|
||||||
|
store_inferior_registers (regno)
|
||||||
|
int regno;
|
||||||
|
{
|
||||||
|
if ( (regno < NUM_REGS - NUM_FREGS) || (regno == -1) )
|
||||||
|
store_regs();
|
||||||
|
|
||||||
|
if ( (regno >= NUM_REGS - NUM_FREGS) || (regno == -1) )
|
||||||
|
store_fpregs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Find the minimal symbol named NAME, and return both the minsym
|
||||||
|
struct and its objfile. This probably ought to be in minsym.c, but
|
||||||
|
everything there is trying to deal with things like C++ and
|
||||||
|
SOFUN_ADDRESS_MAYBE_TURQUOISE, ... Since this is so simple, it may
|
||||||
|
be considered too special-purpose for general consumption. */
|
||||||
|
|
||||||
|
static struct minimal_symbol *
|
||||||
|
find_minsym_and_objfile (char *name, struct objfile **objfile_p)
|
||||||
|
{
|
||||||
|
struct objfile *objfile;
|
||||||
|
|
||||||
|
ALL_OBJFILES (objfile)
|
||||||
|
{
|
||||||
|
struct minimal_symbol *msym;
|
||||||
|
|
||||||
|
ALL_OBJFILE_MSYMBOLS (objfile, msym)
|
||||||
|
{
|
||||||
|
if (SYMBOL_NAME (msym)
|
||||||
|
&& STREQ (SYMBOL_NAME (msym), name))
|
||||||
|
{
|
||||||
|
*objfile_p = objfile;
|
||||||
|
return msym;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static CORE_ADDR
|
||||||
|
skip_hurd_resolver (CORE_ADDR pc)
|
||||||
|
{
|
||||||
|
/* The HURD dynamic linker is part of the GNU C library, so many
|
||||||
|
GNU/Linux distributions use it. (All ELF versions, as far as I
|
||||||
|
know.) An unresolved PLT entry points to "_dl_runtime_resolve",
|
||||||
|
which calls "fixup" to patch the PLT, and then passes control to
|
||||||
|
the function.
|
||||||
|
|
||||||
|
We look for the symbol `_dl_runtime_resolve', and find `fixup' in
|
||||||
|
the same objfile. If we are at the entry point of `fixup', then
|
||||||
|
we set a breakpoint at the return address (at the top of the
|
||||||
|
stack), and continue.
|
||||||
|
|
||||||
|
It's kind of gross to do all these checks every time we're
|
||||||
|
called, since they don't change once the executable has gotten
|
||||||
|
started. But this is only a temporary hack --- upcoming versions
|
||||||
|
of Linux will provide a portable, efficient interface for
|
||||||
|
debugging programs that use shared libraries. */
|
||||||
|
|
||||||
|
struct objfile *objfile;
|
||||||
|
struct minimal_symbol *resolver
|
||||||
|
= find_minsym_and_objfile ("_dl_runtime_resolve", &objfile);
|
||||||
|
|
||||||
|
if (resolver)
|
||||||
|
{
|
||||||
|
struct minimal_symbol *fixup
|
||||||
|
= lookup_minimal_symbol ("fixup", 0, objfile);
|
||||||
|
|
||||||
|
if (fixup && SYMBOL_VALUE_ADDRESS (fixup) == pc)
|
||||||
|
return (SAVED_PC_AFTER_CALL (get_current_frame ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* See the comments for SKIP_SOLIB_RESOLVER at the top of infrun.c.
|
||||||
|
This function:
|
||||||
|
1) decides whether a PLT has sent us into the linker to resolve
|
||||||
|
a function reference, and
|
||||||
|
2) if so, tells us where to set a temporary breakpoint that will
|
||||||
|
trigger when the dynamic linker is done. */
|
||||||
|
|
||||||
|
CORE_ADDR
|
||||||
|
i386_linux_skip_solib_resolver (CORE_ADDR pc)
|
||||||
|
{
|
||||||
|
CORE_ADDR result;
|
||||||
|
|
||||||
|
/* Plug in functions for other kinds of resolvers here. */
|
||||||
|
result = skip_hurd_resolver (pc);
|
||||||
|
if (result)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -43,7 +43,6 @@
|
||||||
* It should use the same privilege level it runs at. It should
|
* It should use the same privilege level it runs at. It should
|
||||||
* install it as an interrupt gate so that interrupts are masked
|
* install it as an interrupt gate so that interrupts are masked
|
||||||
* while the handler runs.
|
* while the handler runs.
|
||||||
* Also, need to assign exceptionHook and oldExceptionHook.
|
|
||||||
*
|
*
|
||||||
* Because gdb will sometimes write to the stack area to execute function
|
* Because gdb will sometimes write to the stack area to execute function
|
||||||
* calls, this program cannot rely on using the supervisor stack so it
|
* calls, this program cannot rely on using the supervisor stack so it
|
||||||
|
@ -97,14 +96,10 @@
|
||||||
*
|
*
|
||||||
* external low-level support routines
|
* external low-level support routines
|
||||||
*/
|
*/
|
||||||
typedef void (*ExceptionHook)(int); /* pointer to function with int parm */
|
|
||||||
typedef void (*Function)(); /* pointer to a function */
|
|
||||||
|
|
||||||
extern void putDebugChar(); /* write a single character */
|
extern void putDebugChar(); /* write a single character */
|
||||||
extern int getDebugChar(); /* read and return a single char */
|
extern int getDebugChar(); /* read and return a single char */
|
||||||
|
extern void exceptionHandler(); /* assign an exception handler */
|
||||||
extern Function exceptionHandler(); /* assign an exception handler */
|
|
||||||
extern ExceptionHook exceptionHook; /* hook variable for errors/exceptions */
|
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/
|
/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/
|
||||||
|
@ -138,14 +133,6 @@ int registers[NUMREGS];
|
||||||
int remcomStack[STACKSIZE/sizeof(int)];
|
int remcomStack[STACKSIZE/sizeof(int)];
|
||||||
static int* stackPtr = &remcomStack[STACKSIZE/sizeof(int) - 1];
|
static int* stackPtr = &remcomStack[STACKSIZE/sizeof(int) - 1];
|
||||||
|
|
||||||
/*
|
|
||||||
* In many cases, the system will want to continue exception processing
|
|
||||||
* when a continue command is given.
|
|
||||||
* oldExceptionHook is a function to invoke in this case.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static ExceptionHook oldExceptionHook;
|
|
||||||
|
|
||||||
/*************************** ASSEMBLY CODE MACROS *************************/
|
/*************************** ASSEMBLY CODE MACROS *************************/
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
|
@ -456,12 +443,15 @@ char ch;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char remcomInBuffer[BUFMAX];
|
||||||
|
static char remcomOutBuffer[BUFMAX];
|
||||||
|
|
||||||
/* scan for the sequence $<data>#<checksum> */
|
/* scan for the sequence $<data>#<checksum> */
|
||||||
|
|
||||||
unsigned char *
|
unsigned char *
|
||||||
getpacket (buffer)
|
getpacket ()
|
||||||
unsigned char *buffer;
|
|
||||||
{
|
{
|
||||||
|
unsigned char *buffer = &remcomInBuffer[0];
|
||||||
unsigned char checksum;
|
unsigned char checksum;
|
||||||
unsigned char xmitcsum;
|
unsigned char xmitcsum;
|
||||||
int count;
|
int count;
|
||||||
|
@ -557,11 +547,6 @@ void putpacket(buffer)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char remcomInBuffer[BUFMAX];
|
|
||||||
char remcomOutBuffer[BUFMAX];
|
|
||||||
static short error;
|
|
||||||
|
|
||||||
|
|
||||||
void debug_error(format, parm)
|
void debug_error(format, parm)
|
||||||
char * format;
|
char * format;
|
||||||
char * parm;
|
char * parm;
|
||||||
|
@ -739,9 +724,8 @@ void handle_exception(int exceptionVector)
|
||||||
stepping = 0;
|
stepping = 0;
|
||||||
|
|
||||||
while (1==1) {
|
while (1==1) {
|
||||||
error = 0;
|
|
||||||
remcomOutBuffer[0] = 0;
|
remcomOutBuffer[0] = 0;
|
||||||
ptr = getpacket(remcomInBuffer);
|
ptr = getpacket();
|
||||||
|
|
||||||
switch (*ptr++) {
|
switch (*ptr++) {
|
||||||
case '?' : remcomOutBuffer[0] = 'S';
|
case '?' : remcomOutBuffer[0] = 'S';
|
||||||
|
@ -839,25 +823,7 @@ void handle_exception(int exceptionVector)
|
||||||
/* set the trace bit if we're stepping */
|
/* set the trace bit if we're stepping */
|
||||||
if (stepping) registers[ PS ] |= 0x100;
|
if (stepping) registers[ PS ] |= 0x100;
|
||||||
|
|
||||||
/*
|
|
||||||
* If we found a match for the PC AND we are not returning
|
|
||||||
* as a result of a breakpoint (33),
|
|
||||||
* trace exception (9), nmi (31), jmp to
|
|
||||||
* the old exception handler as if this code never ran.
|
|
||||||
*/
|
|
||||||
#if 0
|
|
||||||
/* Don't really think we need this, except maybe for protection
|
|
||||||
exceptions. */
|
|
||||||
/*
|
|
||||||
* invoke the previous handler.
|
|
||||||
*/
|
|
||||||
if (oldExceptionHook)
|
|
||||||
(*oldExceptionHook) (frame->exceptionVector);
|
|
||||||
newPC = registers[ PC ]; /* pc may have changed */
|
|
||||||
#endif /* 0 */
|
|
||||||
|
|
||||||
_returnFromException(); /* this is a jump */
|
_returnFromException(); /* this is a jump */
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* kill the program */
|
/* kill the program */
|
||||||
|
@ -900,12 +866,6 @@ int exception;
|
||||||
exceptionHandler (14, _catchException14);
|
exceptionHandler (14, _catchException14);
|
||||||
exceptionHandler (16, _catchException16);
|
exceptionHandler (16, _catchException16);
|
||||||
|
|
||||||
if (exceptionHook != remcomHandler)
|
|
||||||
{
|
|
||||||
oldExceptionHook = exceptionHook;
|
|
||||||
exceptionHook = remcomHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
initialized = 1;
|
initialized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,9 +58,11 @@ static char *valid_flavors[] =
|
||||||
};
|
};
|
||||||
static char *disassembly_flavor = att_flavor;
|
static char *disassembly_flavor = att_flavor;
|
||||||
|
|
||||||
|
static void i386_print_register PARAMS ((char *, int, int));
|
||||||
|
|
||||||
/* This is used to keep the bfd arch_info in sync with the disassembly flavor. */
|
/* This is used to keep the bfd arch_info in sync with the disassembly flavor. */
|
||||||
static void set_disassembly_flavor_sfunc PARAMS ((char *, int, struct cmd_list_element *));
|
static void set_disassembly_flavor_sfunc PARAMS ((char *, int, struct cmd_list_element *));
|
||||||
static void set_disassembly_flavor ();
|
static void set_disassembly_flavor PARAMS ((void));
|
||||||
|
|
||||||
/* Stdio style buffering was used to minimize calls to ptrace, but this
|
/* Stdio style buffering was used to minimize calls to ptrace, but this
|
||||||
buffering did not take into account that the code section being accessed
|
buffering did not take into account that the code section being accessed
|
||||||
|
@ -674,21 +676,38 @@ i386_extract_return_value (type, regbuf, valbuf)
|
||||||
char regbuf[REGISTER_BYTES];
|
char regbuf[REGISTER_BYTES];
|
||||||
char *valbuf;
|
char *valbuf;
|
||||||
{
|
{
|
||||||
/* On AIX, floating point values are returned in floating point registers. */
|
/* On AIX and i386 GNU/Linux, floating point values are returned in
|
||||||
#ifdef I386_AIX_TARGET
|
floating point registers. */
|
||||||
|
#if defined(I386_AIX_TARGET) || defined(I386_GNULINUX_TARGET)
|
||||||
if (TYPE_CODE_FLT == TYPE_CODE (type))
|
if (TYPE_CODE_FLT == TYPE_CODE (type))
|
||||||
{
|
{
|
||||||
double d;
|
double d;
|
||||||
/* 387 %st(0), gcc uses this */
|
/* 387 %st(0), gcc uses this */
|
||||||
floatformat_to_double (&floatformat_i387_ext,
|
floatformat_to_double (&floatformat_i387_ext,
|
||||||
®buf[REGISTER_BYTE (FP0_REGNUM)],
|
®buf[REGISTER_BYTE(FPDATA_REGNUM)],
|
||||||
&d);
|
&d);
|
||||||
store_floating (valbuf, TYPE_LENGTH (type), d);
|
store_floating (valbuf, TYPE_LENGTH (type), d);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* I386_AIX_TARGET */
|
#endif /* I386_AIX_TARGET || I386_GNULINUX_TARGET*/
|
||||||
{
|
{
|
||||||
memcpy (valbuf, regbuf, TYPE_LENGTH (type));
|
int len = TYPE_LENGTH (type);
|
||||||
|
int low_size = REGISTER_RAW_SIZE (LOW_RETURN_REGNUM);
|
||||||
|
int high_size = REGISTER_RAW_SIZE (HIGH_RETURN_REGNUM);
|
||||||
|
|
||||||
|
if (len <= low_size)
|
||||||
|
memcpy (valbuf, regbuf + REGISTER_BYTE (LOW_RETURN_REGNUM), len);
|
||||||
|
else if (len <= (low_size + high_size))
|
||||||
|
{
|
||||||
|
memcpy (valbuf,
|
||||||
|
regbuf + REGISTER_BYTE (LOW_RETURN_REGNUM),
|
||||||
|
low_size);
|
||||||
|
memcpy (valbuf + low_size,
|
||||||
|
regbuf + REGISTER_BYTE (HIGH_RETURN_REGNUM),
|
||||||
|
len - low_size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
error ("GDB bug: i386-tdep.c (i386_extract_return_value): Don't know how to find a return value %d bytes long", len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -942,6 +961,51 @@ set_disassembly_flavor ()
|
||||||
set_architecture_from_arch_mach (bfd_arch_i386, bfd_mach_i386_i386_intel_syntax);
|
set_architecture_from_arch_mach (bfd_arch_i386, bfd_mach_i386_i386_intel_syntax);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Print the register regnum, or all registers if regnum is -1 */
|
||||||
|
|
||||||
|
void
|
||||||
|
i386_do_registers_info (regnum, fpregs)
|
||||||
|
int regnum;
|
||||||
|
int fpregs;
|
||||||
|
{
|
||||||
|
char raw_regs [REGISTER_BYTES];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_REGS; i++)
|
||||||
|
read_relative_register_raw_bytes (i, raw_regs + REGISTER_BYTE (i));
|
||||||
|
|
||||||
|
if (regnum < FPSTART_REGNUM)
|
||||||
|
i386_print_register (raw_regs, regnum, fpregs);
|
||||||
|
else
|
||||||
|
i387_print_register (raw_regs, regnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
i386_print_register (raw_regs, regnum, fpregs)
|
||||||
|
char *raw_regs;
|
||||||
|
int regnum;
|
||||||
|
int fpregs;
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
long val;
|
||||||
|
char string[12];
|
||||||
|
|
||||||
|
for (i = 0; i < FPSTART_REGNUM; i++)
|
||||||
|
{
|
||||||
|
if ((regnum != -1) && (i != regnum))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
val = extract_signed_integer (raw_regs + REGISTER_BYTE (i), 4);
|
||||||
|
|
||||||
|
sprintf(string, "0x%x", val);
|
||||||
|
printf_filtered ("%8.8s: %10.10s %11d\n", REGISTER_NAME(i), string, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((regnum == -1) && fpregs)
|
||||||
|
for (i = FPSTART_REGNUM; i < FPEND_REGNUM; i++)
|
||||||
|
i387_print_register (raw_regs, i);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_initialize_i386_tdep ()
|
_initialize_i386_tdep ()
|
||||||
{
|
{
|
||||||
|
|
289
gdb/i387-tdep.c
289
gdb/i387-tdep.c
|
@ -22,13 +22,16 @@
|
||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
#include "inferior.h"
|
#include "inferior.h"
|
||||||
#include "language.h"
|
#include "language.h"
|
||||||
|
#include "value.h"
|
||||||
#include "gdbcore.h"
|
#include "gdbcore.h"
|
||||||
#include "floatformat.h"
|
#include "floatformat.h"
|
||||||
|
|
||||||
void i387_to_double PARAMS ((char *, char *));
|
void i387_to_double PARAMS ((char *, char *));
|
||||||
|
|
||||||
void double_to_i387 PARAMS ((char *, char *));
|
void double_to_i387 PARAMS ((char *, char *));
|
||||||
|
|
||||||
|
static void print_387_control_bits PARAMS ((unsigned int control));
|
||||||
|
static void print_387_status_bits PARAMS ((unsigned int status));
|
||||||
|
|
||||||
/* FIXME: Eliminate these routines when we have the time to change all
|
/* FIXME: Eliminate these routines when we have the time to change all
|
||||||
the callers. */
|
the callers. */
|
||||||
|
|
||||||
|
@ -48,95 +51,281 @@ double_to_i387 (from, to)
|
||||||
floatformat_from_double (&floatformat_i387_ext, (double *) from, to);
|
floatformat_from_double (&floatformat_i387_ext, (double *) from, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
print_387_control_word (control)
|
print_387_control_bits (control)
|
||||||
unsigned int control;
|
unsigned int control;
|
||||||
{
|
{
|
||||||
printf_unfiltered ("control %s: ", local_hex_string (control));
|
|
||||||
printf_unfiltered ("compute to ");
|
|
||||||
switch ((control >> 8) & 3)
|
switch ((control >> 8) & 3)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
printf_unfiltered ("24 bits; ");
|
puts_unfiltered (" 24 bit; ");
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
printf_unfiltered ("(bad); ");
|
puts_unfiltered (" (bad); ");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
printf_unfiltered ("53 bits; ");
|
puts_unfiltered (" 53 bit; ");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
printf_unfiltered ("64 bits; ");
|
puts_unfiltered (" 64 bit; ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printf_unfiltered ("round ");
|
|
||||||
switch ((control >> 10) & 3)
|
switch ((control >> 10) & 3)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
printf_unfiltered ("NEAREST; ");
|
puts_unfiltered ("NEAR; ");
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
printf_unfiltered ("DOWN; ");
|
puts_unfiltered ("DOWN; ");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
printf_unfiltered ("UP; ");
|
puts_unfiltered ("UP; ");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
printf_unfiltered ("CHOP; ");
|
puts_unfiltered ("CHOP; ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (control & 0x3f)
|
if (control & 0x3f)
|
||||||
{
|
{
|
||||||
printf_unfiltered ("mask:");
|
puts_unfiltered ("mask");
|
||||||
if (control & 0x0001)
|
if (control & 0x0001)
|
||||||
printf_unfiltered (" INVALID");
|
puts_unfiltered (" INVAL");
|
||||||
if (control & 0x0002)
|
if (control & 0x0002)
|
||||||
printf_unfiltered (" DENORM");
|
puts_unfiltered (" DENOR");
|
||||||
if (control & 0x0004)
|
if (control & 0x0004)
|
||||||
printf_unfiltered (" DIVZ");
|
puts_unfiltered (" DIVZ");
|
||||||
if (control & 0x0008)
|
if (control & 0x0008)
|
||||||
printf_unfiltered (" OVERF");
|
puts_unfiltered (" OVERF");
|
||||||
if (control & 0x0010)
|
if (control & 0x0010)
|
||||||
printf_unfiltered (" UNDERF");
|
puts_unfiltered (" UNDER");
|
||||||
if (control & 0x0020)
|
if (control & 0x0020)
|
||||||
printf_unfiltered (" LOS");
|
puts_unfiltered (" LOS");
|
||||||
printf_unfiltered (";");
|
puts_unfiltered (";");
|
||||||
}
|
}
|
||||||
printf_unfiltered ("\n");
|
printf_unfiltered ("\n");
|
||||||
if (control & 0xe080)
|
if (control & 0xe080)
|
||||||
warning ("reserved bits on: %s\n",
|
warning ("\nreserved bits on: %s",
|
||||||
local_hex_string (control & 0xe080));
|
local_hex_string (control & 0xe080));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
print_387_control_word (control)
|
||||||
|
unsigned int control;
|
||||||
|
{
|
||||||
|
printf_filtered ("control %s:", local_hex_string(control & 0xffff));
|
||||||
|
print_387_control_bits (control);
|
||||||
|
puts_unfiltered ("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_387_status_bits (status)
|
||||||
|
unsigned int status;
|
||||||
|
{
|
||||||
|
printf_unfiltered (" flags %d%d%d%d; ",
|
||||||
|
(status & 0x4000) != 0,
|
||||||
|
(status & 0x0400) != 0,
|
||||||
|
(status & 0x0200) != 0,
|
||||||
|
(status & 0x0100) != 0);
|
||||||
|
printf_unfiltered ("top %d; ", (status >> 11) & 7);
|
||||||
|
if (status & 0xff)
|
||||||
|
{
|
||||||
|
puts_unfiltered ("excep");
|
||||||
|
if (status & 0x0001) puts_unfiltered (" INVAL");
|
||||||
|
if (status & 0x0002) puts_unfiltered (" DENOR");
|
||||||
|
if (status & 0x0004) puts_unfiltered (" DIVZ");
|
||||||
|
if (status & 0x0008) puts_unfiltered (" OVERF");
|
||||||
|
if (status & 0x0010) puts_unfiltered (" UNDER");
|
||||||
|
if (status & 0x0020) puts_unfiltered (" LOS");
|
||||||
|
if (status & 0x0040) puts_unfiltered (" STACK");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
print_387_status_word (status)
|
print_387_status_word (status)
|
||||||
unsigned int status;
|
unsigned int status;
|
||||||
{
|
{
|
||||||
printf_unfiltered ("status %s: ", local_hex_string (status));
|
printf_filtered ("status %s:", local_hex_string (status & 0xffff));
|
||||||
if (status & 0xff)
|
print_387_status_bits (status);
|
||||||
{
|
puts_unfiltered ("\n");
|
||||||
printf_unfiltered ("exceptions:");
|
|
||||||
if (status & 0x0001)
|
|
||||||
printf_unfiltered (" INVALID");
|
|
||||||
if (status & 0x0002)
|
|
||||||
printf_unfiltered (" DENORM");
|
|
||||||
if (status & 0x0004)
|
|
||||||
printf_unfiltered (" DIVZ");
|
|
||||||
if (status & 0x0008)
|
|
||||||
printf_unfiltered (" OVERF");
|
|
||||||
if (status & 0x0010)
|
|
||||||
printf_unfiltered (" UNDERF");
|
|
||||||
if (status & 0x0020)
|
|
||||||
printf_unfiltered (" LOS");
|
|
||||||
if (status & 0x0040)
|
|
||||||
printf_unfiltered (" FPSTACK");
|
|
||||||
printf_unfiltered ("; ");
|
|
||||||
}
|
|
||||||
printf_unfiltered ("flags: %d%d%d%d; ",
|
|
||||||
(status & 0x4000) != 0,
|
|
||||||
(status & 0x0400) != 0,
|
|
||||||
(status & 0x0200) != 0,
|
|
||||||
(status & 0x0100) != 0);
|
|
||||||
|
|
||||||
printf_unfiltered ("top %d\n", (status >> 11) & 7);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
i387_print_register (raw_regs, regnum)
|
||||||
|
char *raw_regs;
|
||||||
|
int regnum;
|
||||||
|
{
|
||||||
|
unsigned char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
|
||||||
|
unsigned long val;
|
||||||
|
int j, sign, special;
|
||||||
|
unsigned swd, tags, expon, top, norm, ls, ms;
|
||||||
|
char string[12];
|
||||||
|
|
||||||
|
#if (FPREG_RAW_SIZE != 10)
|
||||||
|
#error "Bad FPREG_RAW_SIZE"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
printf_filtered ("%8.8s: ", REGISTER_NAME (regnum));
|
||||||
|
if (regnum < FPDATA_REGNUM)
|
||||||
|
{
|
||||||
|
val = extract_unsigned_integer (raw_regs + REGISTER_BYTE (regnum), 4);
|
||||||
|
if ( (regnum < FPSTART_REGNUM + 3) ||
|
||||||
|
(regnum == FPSTART_REGNUM + 6) )
|
||||||
|
/* Don't print the un-modifiable bytes. */
|
||||||
|
sprintf(string, "0x%04x", val & 0xffff);
|
||||||
|
else
|
||||||
|
sprintf(string, "0x%08x", val);
|
||||||
|
|
||||||
|
printf_unfiltered ("%10.10s", string);
|
||||||
|
|
||||||
|
if (regnum == FPCONTROL_REGNUM)
|
||||||
|
print_387_control_bits (val);
|
||||||
|
else if (regnum == FPSTATUS_REGNUM)
|
||||||
|
print_387_status_bits (val);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* An FPU stack register. */
|
||||||
|
if ( REGISTER_RAW_SIZE (regnum) != FPREG_RAW_SIZE )
|
||||||
|
error ("GDB bug: i387-tdep.c (i387_print_register): wrong size for FPU stack register");
|
||||||
|
|
||||||
|
/* Put the data in the buffer. No conversions are ever necessary. */
|
||||||
|
memcpy (virtual_buffer, raw_regs + REGISTER_BYTE (regnum),
|
||||||
|
FPREG_RAW_SIZE);
|
||||||
|
|
||||||
|
swd = extract_signed_integer (raw_regs + REGISTER_BYTE (FPSTATUS_REGNUM),
|
||||||
|
4);
|
||||||
|
top = (swd >> 11) & 7;
|
||||||
|
tags = extract_signed_integer (raw_regs + REGISTER_BYTE (FPTAG_REGNUM),
|
||||||
|
4);
|
||||||
|
|
||||||
|
puts_unfiltered ("0x");
|
||||||
|
for (j = 0; j < FPREG_RAW_SIZE; j++)
|
||||||
|
printf_unfiltered ("%02x",
|
||||||
|
(unsigned char)raw_regs[REGISTER_BYTE (regnum)
|
||||||
|
+ FPREG_RAW_SIZE - 1 - j]);
|
||||||
|
|
||||||
|
puts_unfiltered (" ");
|
||||||
|
special = 0;
|
||||||
|
switch ((tags >> (((regnum - FPDATA_REGNUM + top) & 7) * 2)) & 3)
|
||||||
|
{
|
||||||
|
case 0: puts_unfiltered ("Valid "); break;
|
||||||
|
case 1: puts_unfiltered ("Zero "); break;
|
||||||
|
case 2: puts_unfiltered ("Spec ");
|
||||||
|
special = 1;
|
||||||
|
break;
|
||||||
|
case 3: puts_unfiltered ("Empty "); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
expon = extract_unsigned_integer (raw_regs + REGISTER_BYTE (regnum)
|
||||||
|
+ FPREG_RAW_SIZE - 2, 2);
|
||||||
|
sign = expon & 0x8000;
|
||||||
|
expon &= 0x7fff;
|
||||||
|
ms = extract_unsigned_integer (raw_regs + REGISTER_BYTE (regnum) + 4, 4);
|
||||||
|
ls = extract_signed_integer (raw_regs + REGISTER_BYTE (regnum), 4);
|
||||||
|
norm = ms & 0x80000000;
|
||||||
|
|
||||||
|
if ( expon == 0 )
|
||||||
|
{
|
||||||
|
if ( ms | ls )
|
||||||
|
{
|
||||||
|
/* Denormal or Pseudodenormal. */
|
||||||
|
if ( norm )
|
||||||
|
puts_unfiltered ("Pseudo ");
|
||||||
|
else
|
||||||
|
puts_unfiltered ("Denorm ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Zero. */
|
||||||
|
puts_unfiltered ("Zero ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( expon == 0x7fff )
|
||||||
|
{
|
||||||
|
/* Infinity, NaN or unsupported. */
|
||||||
|
if ( (ms == 0x80000000) &&
|
||||||
|
(ls == 0) )
|
||||||
|
{
|
||||||
|
puts_unfiltered ("Infty ");
|
||||||
|
}
|
||||||
|
else if ( norm )
|
||||||
|
{
|
||||||
|
if ( ms & 0x40000000 )
|
||||||
|
puts_unfiltered ("QNaN ");
|
||||||
|
else
|
||||||
|
puts_unfiltered ("SNaN ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
puts_unfiltered ("Unsupp ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Normal or unsupported. */
|
||||||
|
if ( norm )
|
||||||
|
puts_unfiltered ("Normal ");
|
||||||
|
else
|
||||||
|
puts_unfiltered ("Unsupp ");
|
||||||
|
}
|
||||||
|
|
||||||
|
val_print (REGISTER_VIRTUAL_TYPE (regnum), virtual_buffer, 0, 0,
|
||||||
|
gdb_stdout, 0,
|
||||||
|
1, 0, Val_pretty_default);
|
||||||
|
}
|
||||||
|
puts_filtered ("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void i387_float_info(void)
|
||||||
|
{
|
||||||
|
char raw_regs [REGISTER_BYTES];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = FPSTART_REGNUM; i <= FPEND_REGNUM; i++)
|
||||||
|
read_relative_register_raw_bytes (i, raw_regs + REGISTER_BYTE (i));
|
||||||
|
|
||||||
|
for (i = FPSTART_REGNUM; i <= FPEND_REGNUM; i++)
|
||||||
|
i387_print_register (raw_regs, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef LD_I387
|
||||||
|
int
|
||||||
|
i387_extract_floating (PTR addr, int len, DOUBLEST *dretptr)
|
||||||
|
{
|
||||||
|
if (len == TARGET_LONG_DOUBLE_BIT / 8)
|
||||||
|
{
|
||||||
|
if (HOST_LONG_DOUBLE_FORMAT == TARGET_LONG_DOUBLE_FORMAT)
|
||||||
|
{
|
||||||
|
DOUBLEST retval;
|
||||||
|
|
||||||
|
memcpy (dretptr, addr, sizeof (retval));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
floatformat_to_doublest (TARGET_LONG_DOUBLE_FORMAT, addr, dretptr);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
i387_store_floating (PTR addr, int len, DOUBLEST val)
|
||||||
|
{
|
||||||
|
if (len == TARGET_LONG_DOUBLE_BIT / 8)
|
||||||
|
{
|
||||||
|
/* This `if' may be totally stupid. I just put it in here to be
|
||||||
|
absolutely sure I'm preserving the semantics of the code I'm
|
||||||
|
frobbing, while I try to maintain portability boundaries; I
|
||||||
|
don't actually know exactly what it's doing. -JimB, May 1999 */
|
||||||
|
if (HOST_LONG_DOUBLE_FORMAT == TARGET_LONG_DOUBLE_FORMAT)
|
||||||
|
memcpy (addr, &val, sizeof (val));
|
||||||
|
else
|
||||||
|
floatformat_from_doublest (TARGET_LONG_DOUBLE_FORMAT, &val, addr);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* LD_I387 */
|
||||||
|
|
|
@ -567,7 +567,7 @@ saved_pc_after_call (frame)
|
||||||
restoring all saved registers. */
|
restoring all saved registers. */
|
||||||
|
|
||||||
void
|
void
|
||||||
pop_frame ()
|
i960_pop_frame (void)
|
||||||
{
|
{
|
||||||
register struct frame_info *current_fi, *prev_fi;
|
register struct frame_info *current_fi, *prev_fi;
|
||||||
register int i;
|
register int i;
|
||||||
|
|
|
@ -258,6 +258,12 @@ extern int signal_print_state PARAMS ((int));
|
||||||
|
|
||||||
extern int signal_pass_state PARAMS ((int));
|
extern int signal_pass_state PARAMS ((int));
|
||||||
|
|
||||||
|
extern int signal_stop_update PARAMS ((int, int));
|
||||||
|
|
||||||
|
extern int signal_print_update PARAMS ((int, int));
|
||||||
|
|
||||||
|
extern int signal_pass_update PARAMS ((int, int));
|
||||||
|
|
||||||
/* From infcmd.c */
|
/* From infcmd.c */
|
||||||
|
|
||||||
extern void tty_command PARAMS ((char *, int));
|
extern void tty_command PARAMS ((char *, int));
|
||||||
|
|
451
gdb/infrun.c
451
gdb/infrun.c
|
@ -176,15 +176,53 @@ static int use_thread_step_needed = USE_THREAD_STEP_NEEDED;
|
||||||
#define DYNAMIC_TRAMPOLINE_NEXTPC(pc) 0
|
#define DYNAMIC_TRAMPOLINE_NEXTPC(pc) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* On SVR4 based systems, determining the callee's address is exceedingly
|
/* If the program uses ELF-style shared libraries, then calls to
|
||||||
difficult and depends on the implementation of the run time loader.
|
functions in shared libraries go through stubs, which live in a
|
||||||
If we are stepping at the source level, we single step until we exit
|
table called the PLT (Procedure Linkage Table). The first time the
|
||||||
the run time loader code and reach the callee's address. */
|
function is called, the stub sends control to the dynamic linker,
|
||||||
|
which looks up the function's real address, patches the stub so
|
||||||
|
that future calls will go directly to the function, and then passes
|
||||||
|
control to the function.
|
||||||
|
|
||||||
|
If we are stepping at the source level, we don't want to see any of
|
||||||
|
this --- we just want to skip over the stub and the dynamic linker.
|
||||||
|
The simple approach is to single-step until control leaves the
|
||||||
|
dynamic linker.
|
||||||
|
|
||||||
|
However, on some systems (e.g., Red Hat Linux 5.2) the dynamic
|
||||||
|
linker calls functions in the shared C library, so you can't tell
|
||||||
|
from the PC alone whether the dynamic linker is still running. In
|
||||||
|
this case, we use a step-resume breakpoint to get us past the
|
||||||
|
dynamic linker, as if we were using "next" to step over a function
|
||||||
|
call.
|
||||||
|
|
||||||
|
IN_SOLIB_DYNSYM_RESOLVE_CODE says whether we're in the dynamic
|
||||||
|
linker code or not. Normally, this means we single-step. However,
|
||||||
|
if SKIP_SOLIB_RESOLVER then returns non-zero, then its value is an
|
||||||
|
address where we can place a step-resume breakpoint to get past the
|
||||||
|
linker's symbol resolution function.
|
||||||
|
|
||||||
|
IN_SOLIB_DYNSYM_RESOLVE_CODE can generally be implemented in a
|
||||||
|
pretty portable way, by comparing the PC against the address ranges
|
||||||
|
of the dynamic linker's sections.
|
||||||
|
|
||||||
|
SKIP_SOLIB_RESOLVER is generally going to be system-specific, since
|
||||||
|
it depends on internal details of the dynamic linker. It's usually
|
||||||
|
not too hard to figure out where to put a breakpoint, but it
|
||||||
|
certainly isn't portable. SKIP_SOLIB_RESOLVER should do plenty of
|
||||||
|
sanity checking. If it can't figure things out, returning zero and
|
||||||
|
getting the (possibly confusing) stepping behavior is better than
|
||||||
|
signalling an error, which will obscure the change in the
|
||||||
|
inferior's state. */
|
||||||
|
|
||||||
#ifndef IN_SOLIB_DYNSYM_RESOLVE_CODE
|
#ifndef IN_SOLIB_DYNSYM_RESOLVE_CODE
|
||||||
#define IN_SOLIB_DYNSYM_RESOLVE_CODE(pc) 0
|
#define IN_SOLIB_DYNSYM_RESOLVE_CODE(pc) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef SKIP_SOLIB_RESOLVER
|
||||||
|
#define SKIP_SOLIB_RESOLVER(pc) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* For SVR4 shared libraries, each call goes through a small piece of
|
/* For SVR4 shared libraries, each call goes through a small piece of
|
||||||
trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE evaluates
|
trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE evaluates
|
||||||
to nonzero if we are current stopped in one of these. */
|
to nonzero if we are current stopped in one of these. */
|
||||||
|
@ -1137,8 +1175,10 @@ void init_execution_control_state (struct execution_control_state * ecs);
|
||||||
void handle_inferior_event (struct execution_control_state * ecs);
|
void handle_inferior_event (struct execution_control_state * ecs);
|
||||||
|
|
||||||
static void check_sigtramp2 (struct execution_control_state *ecs);
|
static void check_sigtramp2 (struct execution_control_state *ecs);
|
||||||
|
static void step_over_function (struct execution_control_state *ecs);
|
||||||
static void stop_stepping (struct execution_control_state *ecs);
|
static void stop_stepping (struct execution_control_state *ecs);
|
||||||
static void prepare_to_wait (struct execution_control_state *ecs);
|
static void prepare_to_wait (struct execution_control_state *ecs);
|
||||||
|
static void keep_going (struct execution_control_state *ecs);
|
||||||
|
|
||||||
/* Wait for control to return from inferior to debugger.
|
/* Wait for control to return from inferior to debugger.
|
||||||
If inferior gets a signal, we may decide to start it up again
|
If inferior gets a signal, we may decide to start it up again
|
||||||
|
@ -2108,15 +2148,17 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
{
|
{
|
||||||
trap_expected = 1;
|
trap_expected = 1;
|
||||||
stop_signal = TARGET_SIGNAL_0;
|
stop_signal = TARGET_SIGNAL_0;
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ecs->ws.kind == TARGET_WAITKIND_VFORKED)
|
else if (ecs->ws.kind == TARGET_WAITKIND_VFORKED)
|
||||||
{
|
{
|
||||||
if (ecs->random_signal) /* I.e., no catchpoint triggered for this. */
|
if (ecs->random_signal) /* I.e., no catchpoint triggered for this. */
|
||||||
{
|
{
|
||||||
stop_signal = TARGET_SIGNAL_0;
|
stop_signal = TARGET_SIGNAL_0;
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ecs->ws.kind == TARGET_WAITKIND_EXECD)
|
else if (ecs->ws.kind == TARGET_WAITKIND_EXECD)
|
||||||
|
@ -2126,7 +2168,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
{
|
{
|
||||||
trap_expected = 1;
|
trap_expected = 1;
|
||||||
stop_signal = TARGET_SIGNAL_0;
|
stop_signal = TARGET_SIGNAL_0;
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2182,7 +2225,7 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
that case, when we reach this point, there is already a
|
that case, when we reach this point, there is already a
|
||||||
step-resume breakpoint established, right where it should be:
|
step-resume breakpoint established, right where it should be:
|
||||||
immediately after the function call the user is "next"-ing
|
immediately after the function call the user is "next"-ing
|
||||||
over. If we jump to step_over_function now, two bad things
|
over. If we call step_over_function now, two bad things
|
||||||
happen:
|
happen:
|
||||||
|
|
||||||
- we'll create a new breakpoint, at wherever the current
|
- we'll create a new breakpoint, at wherever the current
|
||||||
|
@ -2230,7 +2273,10 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
remove_breakpoints ();
|
remove_breakpoints ();
|
||||||
breakpoints_inserted = 0;
|
breakpoints_inserted = 0;
|
||||||
if (!GET_LONGJMP_TARGET (&jmp_buf_pc))
|
if (!GET_LONGJMP_TARGET (&jmp_buf_pc))
|
||||||
goto keep_going;
|
{
|
||||||
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Need to blow away step-resume breakpoint, as it
|
/* Need to blow away step-resume breakpoint, as it
|
||||||
interferes with us */
|
interferes with us */
|
||||||
|
@ -2256,7 +2302,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
#endif /* 0 */
|
#endif /* 0 */
|
||||||
set_longjmp_resume_breakpoint (jmp_buf_pc, NULL);
|
set_longjmp_resume_breakpoint (jmp_buf_pc, NULL);
|
||||||
ecs->handling_longjmp = 1; /* FIXME */
|
ecs->handling_longjmp = 1; /* FIXME */
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
|
|
||||||
case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME:
|
case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME:
|
||||||
case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE:
|
case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE:
|
||||||
|
@ -2269,7 +2316,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
step_frame_address)))
|
step_frame_address)))
|
||||||
{
|
{
|
||||||
ecs->another_trap = 1;
|
ecs->another_trap = 1;
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
#endif /* 0 */
|
#endif /* 0 */
|
||||||
disable_longjmp_breakpoint ();
|
disable_longjmp_breakpoint ();
|
||||||
|
@ -2452,7 +2500,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
if (SOLIB_IN_DYNAMIC_LINKER (ecs->pid, stop_pc))
|
if (SOLIB_IN_DYNAMIC_LINKER (ecs->pid, stop_pc))
|
||||||
{
|
{
|
||||||
ecs->another_trap = 1;
|
ecs->another_trap = 1;
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* Else, stop and report the catchpoint(s) whose triggering
|
/* Else, stop and report the catchpoint(s) whose triggering
|
||||||
|
@ -2499,7 +2548,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
/* I'm not sure whether this needs to be check_sigtramp2 or
|
/* I'm not sure whether this needs to be check_sigtramp2 or
|
||||||
whether it could/should be keep_going. */
|
whether it could/should be keep_going. */
|
||||||
check_sigtramp2 (ecs);
|
check_sigtramp2 (ecs);
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (step_range_end == 0)
|
if (step_range_end == 0)
|
||||||
|
@ -2508,7 +2558,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
/* I'm not sure whether this needs to be check_sigtramp2 or
|
/* I'm not sure whether this needs to be check_sigtramp2 or
|
||||||
whether it could/should be keep_going. */
|
whether it could/should be keep_going. */
|
||||||
check_sigtramp2 (ecs);
|
check_sigtramp2 (ecs);
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If stepping through a line, keep going if still within it.
|
/* If stepping through a line, keep going if still within it.
|
||||||
|
@ -2522,7 +2573,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
/* We might be doing a BPSTAT_WHAT_SINGLE and getting a signal.
|
/* We might be doing a BPSTAT_WHAT_SINGLE and getting a signal.
|
||||||
So definately need to check for sigtramp here. */
|
So definately need to check for sigtramp here. */
|
||||||
check_sigtramp2 (ecs);
|
check_sigtramp2 (ecs);
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We stepped out of the stepping range. */
|
/* We stepped out of the stepping range. */
|
||||||
|
@ -2532,7 +2584,27 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
until we exit the run time loader code and reach the callee's
|
until we exit the run time loader code and reach the callee's
|
||||||
address. */
|
address. */
|
||||||
if (step_over_calls < 0 && IN_SOLIB_DYNSYM_RESOLVE_CODE (stop_pc))
|
if (step_over_calls < 0 && IN_SOLIB_DYNSYM_RESOLVE_CODE (stop_pc))
|
||||||
goto keep_going;
|
{
|
||||||
|
CORE_ADDR pc_after_resolver = SKIP_SOLIB_RESOLVER (stop_pc);
|
||||||
|
|
||||||
|
if (pc_after_resolver)
|
||||||
|
{
|
||||||
|
/* Set up a step-resume breakpoint at the address
|
||||||
|
indicated by SKIP_SOLIB_RESOLVER. */
|
||||||
|
struct symtab_and_line sr_sal;
|
||||||
|
INIT_SAL (&sr_sal);
|
||||||
|
sr_sal.pc = pc_after_resolver;
|
||||||
|
|
||||||
|
check_for_old_step_resume_breakpoint ();
|
||||||
|
step_resume_breakpoint =
|
||||||
|
set_momentary_breakpoint (sr_sal, NULL, bp_step_resume);
|
||||||
|
if (breakpoints_inserted)
|
||||||
|
insert_breakpoints ();
|
||||||
|
}
|
||||||
|
|
||||||
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* We can't update step_sp every time through the loop, because
|
/* We can't update step_sp every time through the loop, because
|
||||||
reading the stack pointer would slow down stepping too much.
|
reading the stack pointer would slow down stepping too much.
|
||||||
|
@ -2591,7 +2663,7 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
/* We just stepped out of a signal handler and into
|
/* We just stepped out of a signal handler and into
|
||||||
its calling trampoline.
|
its calling trampoline.
|
||||||
|
|
||||||
Normally, we'd jump to step_over_function from
|
Normally, we'd call step_over_function from
|
||||||
here, but for some reason GDB can't unwind the
|
here, but for some reason GDB can't unwind the
|
||||||
stack correctly to find the real PC for the point
|
stack correctly to find the real PC for the point
|
||||||
user code where the signal trampoline will return
|
user code where the signal trampoline will return
|
||||||
|
@ -2620,7 +2692,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
step_range_end = (step_range_start = prev_pc) + 1;
|
step_range_end = (step_range_start = prev_pc) + 1;
|
||||||
|
|
||||||
ecs->remove_breakpoints_on_following_step = 1;
|
ecs->remove_breakpoints_on_following_step = 1;
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stop_pc == ecs->stop_func_start /* Quick test */
|
if (stop_pc == ecs->stop_func_start /* Quick test */
|
||||||
|
@ -2642,8 +2715,12 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (step_over_calls > 0 || IGNORE_HELPER_CALL (stop_pc))
|
if (step_over_calls > 0 || IGNORE_HELPER_CALL (stop_pc))
|
||||||
/* We're doing a "next". */
|
{
|
||||||
goto step_over_function;
|
/* We're doing a "next". */
|
||||||
|
step_over_function (ecs);
|
||||||
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* If we are in a function call trampoline (a stub between
|
/* If we are in a function call trampoline (a stub between
|
||||||
the calling routine and the real function), locate the real
|
the calling routine and the real function), locate the real
|
||||||
|
@ -2668,7 +2745,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
step_resume_breakpoint =
|
step_resume_breakpoint =
|
||||||
set_momentary_breakpoint (xxx, NULL, bp_step_resume);
|
set_momentary_breakpoint (xxx, NULL, bp_step_resume);
|
||||||
insert_breakpoints ();
|
insert_breakpoints ();
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2685,40 +2763,9 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
if (tmp_sal.line != 0)
|
if (tmp_sal.line != 0)
|
||||||
goto step_into_function;
|
goto step_into_function;
|
||||||
}
|
}
|
||||||
|
step_over_function (ecs);
|
||||||
step_over_function:
|
keep_going (ecs);
|
||||||
/* A subroutine call has happened. */
|
return;
|
||||||
{
|
|
||||||
/* We've just entered a callee, and we wish to resume until it
|
|
||||||
returns to the caller. Setting a step_resume breakpoint on
|
|
||||||
the return address will catch a return from the callee.
|
|
||||||
|
|
||||||
However, if the callee is recursing, we want to be careful
|
|
||||||
not to catch returns of those recursive calls, but only of
|
|
||||||
THIS instance of the call.
|
|
||||||
|
|
||||||
To do this, we set the step_resume bp's frame to our current
|
|
||||||
caller's frame (step_frame_address, which is set by the "next"
|
|
||||||
or "until" command, before execution begins). */
|
|
||||||
struct symtab_and_line sr_sal;
|
|
||||||
|
|
||||||
INIT_SAL (&sr_sal); /* initialize to zeros */
|
|
||||||
sr_sal.pc =
|
|
||||||
ADDR_BITS_REMOVE (SAVED_PC_AFTER_CALL (get_current_frame ()));
|
|
||||||
sr_sal.section = find_pc_overlay (sr_sal.pc);
|
|
||||||
|
|
||||||
check_for_old_step_resume_breakpoint ();
|
|
||||||
step_resume_breakpoint =
|
|
||||||
set_momentary_breakpoint (sr_sal, get_current_frame (),
|
|
||||||
bp_step_resume);
|
|
||||||
|
|
||||||
if (!IN_SOLIB_DYNSYM_RESOLVE_CODE (sr_sal.pc))
|
|
||||||
step_resume_breakpoint->frame = step_frame_address;
|
|
||||||
|
|
||||||
if (breakpoints_inserted)
|
|
||||||
insert_breakpoints ();
|
|
||||||
}
|
|
||||||
goto keep_going;
|
|
||||||
|
|
||||||
step_into_function:
|
step_into_function:
|
||||||
/* Subroutine call with source code we should not step over.
|
/* Subroutine call with source code we should not step over.
|
||||||
|
@ -2772,7 +2819,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
/* And make sure stepping stops right away then. */
|
/* And make sure stepping stops right away then. */
|
||||||
step_range_end = step_range_start;
|
step_range_end = step_range_start;
|
||||||
}
|
}
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We've wandered out of the step range. */
|
/* We've wandered out of the step range. */
|
||||||
|
@ -2817,7 +2865,8 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
|
|
||||||
/* Restart without fiddling with the step ranges or
|
/* Restart without fiddling with the step ranges or
|
||||||
other state. */
|
other state. */
|
||||||
goto keep_going;
|
keep_going (ecs);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2877,121 +2926,9 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
step_frame_address = current_frame;
|
step_frame_address = current_frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
keep_going:
|
keep_going (ecs);
|
||||||
/* Come to this label when you need to resume the inferior.
|
|
||||||
It's really much cleaner to do a goto than a maze of if-else
|
|
||||||
conditions. */
|
|
||||||
|
|
||||||
/* ??rehrauer: ttrace on HP-UX theoretically allows one to debug
|
|
||||||
a vforked child beetween its creation and subsequent exit or
|
|
||||||
call to exec(). However, I had big problems in this rather
|
|
||||||
creaky exec engine, getting that to work. The fundamental
|
|
||||||
problem is that I'm trying to debug two processes via an
|
|
||||||
engine that only understands a single process with possibly
|
|
||||||
multiple threads.
|
|
||||||
|
|
||||||
Hence, this spot is known to have problems when
|
|
||||||
target_can_follow_vfork_prior_to_exec returns 1. */
|
|
||||||
|
|
||||||
/* Save the pc before execution, to compare with pc after stop. */
|
|
||||||
prev_pc = read_pc (); /* Might have been DECR_AFTER_BREAK */
|
|
||||||
prev_func_start = ecs->stop_func_start; /* Ok, since if DECR_PC_AFTER
|
|
||||||
BREAK is defined, the
|
|
||||||
original pc would not have
|
|
||||||
been at the start of a
|
|
||||||
function. */
|
|
||||||
prev_func_name = ecs->stop_func_name;
|
|
||||||
|
|
||||||
if (ecs->update_step_sp)
|
|
||||||
step_sp = read_sp ();
|
|
||||||
ecs->update_step_sp = 0;
|
|
||||||
|
|
||||||
/* If we did not do break;, it means we should keep
|
|
||||||
running the inferior and not return to debugger. */
|
|
||||||
|
|
||||||
if (trap_expected && stop_signal != TARGET_SIGNAL_TRAP)
|
|
||||||
{
|
|
||||||
/* We took a signal (which we are supposed to pass through to
|
|
||||||
the inferior, else we'd have done a break above) and we
|
|
||||||
haven't yet gotten our trap. Simply continue. */
|
|
||||||
resume (currently_stepping (ecs), stop_signal);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Either the trap was not expected, but we are continuing
|
|
||||||
anyway (the user asked that this signal be passed to the
|
|
||||||
child)
|
|
||||||
-- or --
|
|
||||||
The signal was SIGTRAP, e.g. it was our signal, but we
|
|
||||||
decided we should resume from it.
|
|
||||||
|
|
||||||
We're going to run this baby now!
|
|
||||||
|
|
||||||
Insert breakpoints now, unless we are trying
|
|
||||||
to one-proceed past a breakpoint. */
|
|
||||||
/* If we've just finished a special step resume and we don't
|
|
||||||
want to hit a breakpoint, pull em out. */
|
|
||||||
if (step_resume_breakpoint == NULL
|
|
||||||
&& through_sigtramp_breakpoint == NULL
|
|
||||||
&& ecs->remove_breakpoints_on_following_step)
|
|
||||||
{
|
|
||||||
ecs->remove_breakpoints_on_following_step = 0;
|
|
||||||
remove_breakpoints ();
|
|
||||||
breakpoints_inserted = 0;
|
|
||||||
}
|
|
||||||
else if (!breakpoints_inserted &&
|
|
||||||
(through_sigtramp_breakpoint != NULL || !ecs->another_trap))
|
|
||||||
{
|
|
||||||
breakpoints_failed = insert_breakpoints ();
|
|
||||||
if (breakpoints_failed)
|
|
||||||
{
|
|
||||||
stop_stepping (ecs);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
breakpoints_inserted = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
trap_expected = ecs->another_trap;
|
|
||||||
|
|
||||||
/* Do not deliver SIGNAL_TRAP (except when the user
|
|
||||||
explicitly specifies that such a signal should be
|
|
||||||
delivered to the target program).
|
|
||||||
|
|
||||||
Typically, this would occure when a user is debugging a
|
|
||||||
target monitor on a simulator: the target monitor sets a
|
|
||||||
breakpoint; the simulator encounters this break-point and
|
|
||||||
halts the simulation handing control to GDB; GDB, noteing
|
|
||||||
that the break-point isn't valid, returns control back to
|
|
||||||
the simulator; the simulator then delivers the hardware
|
|
||||||
equivalent of a SIGNAL_TRAP to the program being
|
|
||||||
debugged. */
|
|
||||||
|
|
||||||
if (stop_signal == TARGET_SIGNAL_TRAP
|
|
||||||
&& !signal_program[stop_signal])
|
|
||||||
stop_signal = TARGET_SIGNAL_0;
|
|
||||||
|
|
||||||
#ifdef SHIFT_INST_REGS
|
|
||||||
/* I'm not sure when this following segment applies. I do know,
|
|
||||||
now, that we shouldn't rewrite the regs when we were stopped
|
|
||||||
by a random signal from the inferior process. */
|
|
||||||
/* FIXME: Shouldn't this be based on the valid bit of the SXIP?
|
|
||||||
(this is only used on the 88k). */
|
|
||||||
|
|
||||||
if (!bpstat_explains_signal (stop_bpstat)
|
|
||||||
&& (stop_signal != TARGET_SIGNAL_CHLD)
|
|
||||||
&& !stopped_by_random_signal)
|
|
||||||
SHIFT_INST_REGS ();
|
|
||||||
#endif /* SHIFT_INST_REGS */
|
|
||||||
|
|
||||||
resume (currently_stepping (ecs), stop_signal);
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_to_wait (ecs);
|
|
||||||
return;
|
|
||||||
|
|
||||||
} /* extra brace, to preserve old indentation */
|
} /* extra brace, to preserve old indentation */
|
||||||
|
|
||||||
stop_stepping (ecs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Are we in the middle of stepping? */
|
/* Are we in the middle of stepping? */
|
||||||
|
@ -3043,6 +2980,39 @@ check_sigtramp2 (struct execution_control_state *ecs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* We've just entered a callee, and we wish to resume until it returns
|
||||||
|
to the caller. Setting a step_resume breakpoint on the return
|
||||||
|
address will catch a return from the callee.
|
||||||
|
|
||||||
|
However, if the callee is recursing, we want to be careful not to
|
||||||
|
catch returns of those recursive calls, but only of THIS instance
|
||||||
|
of the call.
|
||||||
|
|
||||||
|
To do this, we set the step_resume bp's frame to our current
|
||||||
|
caller's frame (step_frame_address, which is set by the "next" or
|
||||||
|
"until" command, before execution begins). */
|
||||||
|
|
||||||
|
static void
|
||||||
|
step_over_function (struct execution_control_state *ecs)
|
||||||
|
{
|
||||||
|
struct symtab_and_line sr_sal;
|
||||||
|
|
||||||
|
INIT_SAL (&sr_sal); /* initialize to zeros */
|
||||||
|
sr_sal.pc = ADDR_BITS_REMOVE (SAVED_PC_AFTER_CALL (get_current_frame ()));
|
||||||
|
sr_sal.section = find_pc_overlay (sr_sal.pc);
|
||||||
|
|
||||||
|
check_for_old_step_resume_breakpoint ();
|
||||||
|
step_resume_breakpoint =
|
||||||
|
set_momentary_breakpoint (sr_sal, get_current_frame (), bp_step_resume);
|
||||||
|
|
||||||
|
if (!IN_SOLIB_DYNSYM_RESOLVE_CODE (sr_sal.pc))
|
||||||
|
step_resume_breakpoint->frame = step_frame_address;
|
||||||
|
|
||||||
|
if (breakpoints_inserted)
|
||||||
|
insert_breakpoints ();
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
stop_stepping (struct execution_control_state *ecs)
|
stop_stepping (struct execution_control_state *ecs)
|
||||||
{
|
{
|
||||||
|
@ -3084,6 +3054,118 @@ stop_stepping (struct execution_control_state *ecs)
|
||||||
ecs->wait_some_more = 0;
|
ecs->wait_some_more = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This function handles various cases where we need to continue
|
||||||
|
waiting for the inferior. */
|
||||||
|
/* (Used to be the keep_going: label in the old wait_for_inferior) */
|
||||||
|
|
||||||
|
static void
|
||||||
|
keep_going (struct execution_control_state *ecs)
|
||||||
|
{
|
||||||
|
/* ??rehrauer: ttrace on HP-UX theoretically allows one to debug a
|
||||||
|
vforked child between its creation and subsequent exit or call to
|
||||||
|
exec(). However, I had big problems in this rather creaky exec
|
||||||
|
engine, getting that to work. The fundamental problem is that
|
||||||
|
I'm trying to debug two processes via an engine that only
|
||||||
|
understands a single process with possibly multiple threads.
|
||||||
|
|
||||||
|
Hence, this spot is known to have problems when
|
||||||
|
target_can_follow_vfork_prior_to_exec returns 1. */
|
||||||
|
|
||||||
|
/* Save the pc before execution, to compare with pc after stop. */
|
||||||
|
prev_pc = read_pc (); /* Might have been DECR_AFTER_BREAK */
|
||||||
|
prev_func_start = ecs->stop_func_start; /* Ok, since if DECR_PC_AFTER
|
||||||
|
BREAK is defined, the
|
||||||
|
original pc would not have
|
||||||
|
been at the start of a
|
||||||
|
function. */
|
||||||
|
prev_func_name = ecs->stop_func_name;
|
||||||
|
|
||||||
|
if (ecs->update_step_sp)
|
||||||
|
step_sp = read_sp ();
|
||||||
|
ecs->update_step_sp = 0;
|
||||||
|
|
||||||
|
/* If we did not do break;, it means we should keep running the
|
||||||
|
inferior and not return to debugger. */
|
||||||
|
|
||||||
|
if (trap_expected && stop_signal != TARGET_SIGNAL_TRAP)
|
||||||
|
{
|
||||||
|
/* We took a signal (which we are supposed to pass through to
|
||||||
|
the inferior, else we'd have done a break above) and we
|
||||||
|
haven't yet gotten our trap. Simply continue. */
|
||||||
|
resume (currently_stepping (ecs), stop_signal);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Either the trap was not expected, but we are continuing
|
||||||
|
anyway (the user asked that this signal be passed to the
|
||||||
|
child)
|
||||||
|
-- or --
|
||||||
|
The signal was SIGTRAP, e.g. it was our signal, but we
|
||||||
|
decided we should resume from it.
|
||||||
|
|
||||||
|
We're going to run this baby now!
|
||||||
|
|
||||||
|
Insert breakpoints now, unless we are trying to one-proceed
|
||||||
|
past a breakpoint. */
|
||||||
|
/* If we've just finished a special step resume and we don't
|
||||||
|
want to hit a breakpoint, pull em out. */
|
||||||
|
if (step_resume_breakpoint == NULL
|
||||||
|
&& through_sigtramp_breakpoint == NULL
|
||||||
|
&& ecs->remove_breakpoints_on_following_step)
|
||||||
|
{
|
||||||
|
ecs->remove_breakpoints_on_following_step = 0;
|
||||||
|
remove_breakpoints ();
|
||||||
|
breakpoints_inserted = 0;
|
||||||
|
}
|
||||||
|
else if (!breakpoints_inserted &&
|
||||||
|
(through_sigtramp_breakpoint != NULL || !ecs->another_trap))
|
||||||
|
{
|
||||||
|
breakpoints_failed = insert_breakpoints ();
|
||||||
|
if (breakpoints_failed)
|
||||||
|
{
|
||||||
|
stop_stepping (ecs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
breakpoints_inserted = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_expected = ecs->another_trap;
|
||||||
|
|
||||||
|
/* Do not deliver SIGNAL_TRAP (except when the user explicitly
|
||||||
|
specifies that such a signal should be delivered to the
|
||||||
|
target program).
|
||||||
|
|
||||||
|
Typically, this would occure when a user is debugging a
|
||||||
|
target monitor on a simulator: the target monitor sets a
|
||||||
|
breakpoint; the simulator encounters this break-point and
|
||||||
|
halts the simulation handing control to GDB; GDB, noteing
|
||||||
|
that the break-point isn't valid, returns control back to the
|
||||||
|
simulator; the simulator then delivers the hardware
|
||||||
|
equivalent of a SIGNAL_TRAP to the program being debugged. */
|
||||||
|
|
||||||
|
if (stop_signal == TARGET_SIGNAL_TRAP
|
||||||
|
&& !signal_program[stop_signal])
|
||||||
|
stop_signal = TARGET_SIGNAL_0;
|
||||||
|
|
||||||
|
#ifdef SHIFT_INST_REGS
|
||||||
|
/* I'm not sure when this following segment applies. I do know,
|
||||||
|
now, that we shouldn't rewrite the regs when we were stopped
|
||||||
|
by a random signal from the inferior process. */
|
||||||
|
/* FIXME: Shouldn't this be based on the valid bit of the SXIP?
|
||||||
|
(this is only used on the 88k). */
|
||||||
|
|
||||||
|
if (!bpstat_explains_signal (stop_bpstat)
|
||||||
|
&& (stop_signal != TARGET_SIGNAL_CHLD)
|
||||||
|
&& !stopped_by_random_signal)
|
||||||
|
SHIFT_INST_REGS ();
|
||||||
|
#endif /* SHIFT_INST_REGS */
|
||||||
|
|
||||||
|
resume (currently_stepping (ecs), stop_signal);
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_to_wait (ecs);
|
||||||
|
}
|
||||||
|
|
||||||
/* This function normally comes after a resume, before
|
/* This function normally comes after a resume, before
|
||||||
handle_inferior_event exits. It takes care of any last bits of
|
handle_inferior_event exits. It takes care of any last bits of
|
||||||
housekeeping, and sets the all-important wait_some_more flag. */
|
housekeeping, and sets the all-important wait_some_more flag. */
|
||||||
|
@ -3365,6 +3447,33 @@ signal_pass_state (int signo)
|
||||||
return signal_program[signo];
|
return signal_program[signo];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int signal_stop_update (signo, state)
|
||||||
|
int signo;
|
||||||
|
int state;
|
||||||
|
{
|
||||||
|
int ret = signal_stop[signo];
|
||||||
|
signal_stop[signo] = state;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int signal_print_update (signo, state)
|
||||||
|
int signo;
|
||||||
|
int state;
|
||||||
|
{
|
||||||
|
int ret = signal_print[signo];
|
||||||
|
signal_print[signo] = state;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int signal_pass_update (signo, state)
|
||||||
|
int signo;
|
||||||
|
int state;
|
||||||
|
{
|
||||||
|
int ret = signal_program[signo];
|
||||||
|
signal_program[signo] = state;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sig_print_header (void)
|
sig_print_header (void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -126,7 +126,7 @@ java_value_print (val, stream, format, pretty)
|
||||||
if (element == 0)
|
if (element == 0)
|
||||||
fprintf_filtered (stream, "null");
|
fprintf_filtered (stream, "null");
|
||||||
else
|
else
|
||||||
fprintf_filtered (stream, "@%x", element);
|
fprintf_filtered (stream, "@%s", paddr_nz (element));
|
||||||
|
|
||||||
things_printed++;
|
things_printed++;
|
||||||
i += reps;
|
i += reps;
|
||||||
|
|
1637
gdb/linux-thread.c
Normal file
1637
gdb/linux-thread.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -35,7 +35,8 @@
|
||||||
#include <time.h> /* for time_t */
|
#include <time.h> /* for time_t */
|
||||||
#include "gdb_string.h"
|
#include "gdb_string.h"
|
||||||
#include "objfiles.h" /* for ALL_OBJFILES etc. */
|
#include "objfiles.h" /* for ALL_OBJFILES etc. */
|
||||||
|
#include "inferior.h" /* for write_pc() */
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
extern void report_transfer_performance PARAMS ((unsigned long, time_t, time_t));
|
extern void report_transfer_performance PARAMS ((unsigned long, time_t, time_t));
|
||||||
|
|
||||||
|
@ -79,7 +80,7 @@ m32r_load_section (abfd, s, data_count)
|
||||||
print_address_numeric (section_base, 1, gdb_stdout);
|
print_address_numeric (section_base, 1, gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
gdb_flush (gdb_stdout);
|
gdb_flush (gdb_stdout);
|
||||||
monitor_printf ("%x mw\r", section_base);
|
monitor_printf ("%s mw\r", paddr_nz (section_base));
|
||||||
for (i = 0; i < section_size; i += 4)
|
for (i = 0; i < section_size; i += 4)
|
||||||
{
|
{
|
||||||
QUIT;
|
QUIT;
|
||||||
|
|
|
@ -179,7 +179,7 @@ extern void breakpoint(void);
|
||||||
|
|
||||||
static int computeSignal(int);
|
static int computeSignal(int);
|
||||||
static void putpacket(unsigned char *);
|
static void putpacket(unsigned char *);
|
||||||
static unsigned char *getpacket(unsigned char *);
|
static unsigned char *getpacket(void);
|
||||||
|
|
||||||
static unsigned char *mem2hex(unsigned char *, unsigned char *, int, int);
|
static unsigned char *mem2hex(unsigned char *, unsigned char *, int, int);
|
||||||
static unsigned char *hex2mem(unsigned char *, unsigned char *, int, int);
|
static unsigned char *hex2mem(unsigned char *, unsigned char *, int, int);
|
||||||
|
@ -310,7 +310,7 @@ handle_exception(int exceptionVector)
|
||||||
|
|
||||||
while (1==1) {
|
while (1==1) {
|
||||||
remcomOutBuffer[0] = 0;
|
remcomOutBuffer[0] = 0;
|
||||||
ptr = getpacket(remcomInBuffer);
|
ptr = getpacket();
|
||||||
binary = 0;
|
binary = 0;
|
||||||
switch (*ptr++) {
|
switch (*ptr++) {
|
||||||
default: /* Unknown code. Return an empty reply message. */
|
default: /* Unknown code. Return an empty reply message. */
|
||||||
|
@ -575,9 +575,9 @@ hex(ch)
|
||||||
/* scan for the sequence $<data>#<checksum> */
|
/* scan for the sequence $<data>#<checksum> */
|
||||||
|
|
||||||
unsigned char *
|
unsigned char *
|
||||||
getpacket (buffer)
|
getpacket ()
|
||||||
unsigned char *buffer;
|
|
||||||
{
|
{
|
||||||
|
unsigned char *buffer = &remcomInBuffer[0];
|
||||||
unsigned char checksum;
|
unsigned char checksum;
|
||||||
unsigned char xmitcsum;
|
unsigned char xmitcsum;
|
||||||
int count;
|
int count;
|
||||||
|
|
|
@ -514,9 +514,9 @@ m32r_frame_chain (fi)
|
||||||
return 0; /* in _start fn, don't chain further */
|
return 0; /* in _start fn, don't chain further */
|
||||||
if (fi->framesize == 0)
|
if (fi->framesize == 0)
|
||||||
{
|
{
|
||||||
printf_filtered ("cannot determine frame size @ %08x , pc(%08x)\n",
|
printf_filtered ("cannot determine frame size @ %s , pc(%s)\n",
|
||||||
(unsigned long) fi->frame,
|
paddr (fi->frame),
|
||||||
(unsigned long) fi->pc);
|
paddr (fi->pc));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
insn_debug (("m32rx frame %08x\n", fi->frame + fi->framesize));
|
insn_debug (("m32rx frame %08x\n", fi->frame + fi->framesize));
|
||||||
|
|
|
@ -522,10 +522,15 @@ char ch;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char remcomInBuffer[BUFMAX];
|
||||||
|
static char remcomOutBuffer[BUFMAX];
|
||||||
|
|
||||||
|
/* scan for the sequence $<data>#<checksum> */
|
||||||
|
|
||||||
unsigned char *
|
unsigned char *
|
||||||
getpacket (unsigned char *buffer)
|
getpacket ()
|
||||||
{
|
{
|
||||||
|
unsigned char *buffer = &remcomInBuffer[0];
|
||||||
unsigned char checksum;
|
unsigned char checksum;
|
||||||
unsigned char xmitcsum;
|
unsigned char xmitcsum;
|
||||||
int count;
|
int count;
|
||||||
|
@ -622,11 +627,6 @@ char * buffer;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char remcomInBuffer[BUFMAX];
|
|
||||||
char remcomOutBuffer[BUFMAX];
|
|
||||||
static short error;
|
|
||||||
|
|
||||||
|
|
||||||
void debug_error(format, parm)
|
void debug_error(format, parm)
|
||||||
char * format;
|
char * format;
|
||||||
char * parm;
|
char * parm;
|
||||||
|
@ -777,9 +777,8 @@ void handle_exception(int exceptionVector)
|
||||||
stepping = 0;
|
stepping = 0;
|
||||||
|
|
||||||
while (1==1) {
|
while (1==1) {
|
||||||
error = 0;
|
|
||||||
remcomOutBuffer[0] = 0;
|
remcomOutBuffer[0] = 0;
|
||||||
ptr = getpacket(remcomInBuffer);
|
ptr = getpacket();
|
||||||
switch (*ptr++) {
|
switch (*ptr++) {
|
||||||
case '?' : remcomOutBuffer[0] = 'S';
|
case '?' : remcomOutBuffer[0] = 'S';
|
||||||
remcomOutBuffer[1] = hexchars[sigval >> 4];
|
remcomOutBuffer[1] = hexchars[sigval >> 4];
|
||||||
|
|
|
@ -119,8 +119,6 @@ main (argc, argv)
|
||||||
|
|
||||||
long time_at_startup = get_run_time ();
|
long time_at_startup = get_run_time ();
|
||||||
|
|
||||||
int gdb_file_size;
|
|
||||||
|
|
||||||
START_PROGRESS (argv[0], 0);
|
START_PROGRESS (argv[0], 0);
|
||||||
|
|
||||||
#ifdef MPW
|
#ifdef MPW
|
||||||
|
|
|
@ -347,13 +347,13 @@ maintenance_translate_address (arg, from_tty)
|
||||||
sym = lookup_minimal_symbol_by_pc (address);
|
sym = lookup_minimal_symbol_by_pc (address);
|
||||||
|
|
||||||
if (sym)
|
if (sym)
|
||||||
printf_filtered ("%s+%u\n",
|
printf_filtered ("%s+%s\n",
|
||||||
SYMBOL_SOURCE_NAME (sym),
|
SYMBOL_SOURCE_NAME (sym),
|
||||||
address - SYMBOL_VALUE_ADDRESS (sym));
|
paddr_u (address - SYMBOL_VALUE_ADDRESS (sym)));
|
||||||
else if (sect)
|
else if (sect)
|
||||||
printf_filtered ("no symbol at %s:0x%08x\n", sect->name, address);
|
printf_filtered ("no symbol at %s:0x%s\n", sect->name, paddr (address));
|
||||||
else
|
else
|
||||||
printf_filtered ("no symbol at 0x%08x\n", address);
|
printf_filtered ("no symbol at 0x%s\n", paddr (address));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -353,8 +353,7 @@ static int
|
||||||
upgrade_type PARAMS ((int, struct type **, int, union aux_ext *, int, char *));
|
upgrade_type PARAMS ((int, struct type **, int, union aux_ext *, int, char *));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
parse_partial_symbols PARAMS ((struct objfile *,
|
parse_partial_symbols PARAMS ((struct objfile *));
|
||||||
struct section_offsets *));
|
|
||||||
|
|
||||||
static FDR
|
static FDR
|
||||||
* get_rfd PARAMS ((int, int));
|
* get_rfd PARAMS ((int, int));
|
||||||
|
@ -407,7 +406,7 @@ static int
|
||||||
compare_blocks PARAMS ((const void *, const void *));
|
compare_blocks PARAMS ((const void *, const void *));
|
||||||
|
|
||||||
static struct partial_symtab *
|
static struct partial_symtab *
|
||||||
new_psymtab PARAMS ((char *, struct objfile *, struct section_offsets *));
|
new_psymtab PARAMS ((char *, struct objfile *));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
psymtab_to_symtab_1 PARAMS ((struct partial_symtab *, char *));
|
psymtab_to_symtab_1 PARAMS ((struct partial_symtab *, char *));
|
||||||
|
@ -520,11 +519,10 @@ fdr_name (f)
|
||||||
different sections are relocated via the SECTION_OFFSETS. */
|
different sections are relocated via the SECTION_OFFSETS. */
|
||||||
|
|
||||||
void
|
void
|
||||||
mdebug_build_psymtabs (objfile, swap, info, section_offsets)
|
mdebug_build_psymtabs (objfile, swap, info)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
const struct ecoff_debug_swap *swap;
|
const struct ecoff_debug_swap *swap;
|
||||||
struct ecoff_debug_info *info;
|
struct ecoff_debug_info *info;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
{
|
{
|
||||||
cur_bfd = objfile->obfd;
|
cur_bfd = objfile->obfd;
|
||||||
debug_swap = swap;
|
debug_swap = swap;
|
||||||
|
@ -548,7 +546,7 @@ mdebug_build_psymtabs (objfile, swap, info, section_offsets)
|
||||||
(*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr);
|
(*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
parse_partial_symbols (objfile, section_offsets);
|
parse_partial_symbols (objfile);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Check to make sure file was compiled with -g. If not, warn the
|
/* Check to make sure file was compiled with -g. If not, warn the
|
||||||
|
@ -2274,9 +2272,8 @@ parse_lines (fh, pr, lt, maxlines, pst, lowest_pdr_addr)
|
||||||
into a partial_symtab. */
|
into a partial_symtab. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
parse_partial_symbols (objfile, section_offsets)
|
parse_partial_symbols (objfile)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
{
|
{
|
||||||
const bfd_size_type external_sym_size = debug_swap->external_sym_size;
|
const bfd_size_type external_sym_size = debug_swap->external_sym_size;
|
||||||
const bfd_size_type external_rfd_size = debug_swap->external_rfd_size;
|
const bfd_size_type external_rfd_size = debug_swap->external_rfd_size;
|
||||||
|
@ -2363,7 +2360,7 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
old_chain = make_cleanup (free, fdr_to_pst);
|
old_chain = make_cleanup (free, fdr_to_pst);
|
||||||
fdr_to_pst++;
|
fdr_to_pst++;
|
||||||
{
|
{
|
||||||
struct partial_symtab *pst = new_psymtab ("", objfile, section_offsets);
|
struct partial_symtab *pst = new_psymtab ("", objfile);
|
||||||
fdr_to_pst[-1].pst = pst;
|
fdr_to_pst[-1].pst = pst;
|
||||||
FDR_IDX (pst) = -1;
|
FDR_IDX (pst) = -1;
|
||||||
}
|
}
|
||||||
|
@ -2477,12 +2474,12 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
{
|
{
|
||||||
case stProc:
|
case stProc:
|
||||||
/* Beginnning of Procedure */
|
/* Beginnning of Procedure */
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
break;
|
break;
|
||||||
case stStaticProc:
|
case stStaticProc:
|
||||||
/* Load time only static procs */
|
/* Load time only static procs */
|
||||||
ms_type = mst_file_text;
|
ms_type = mst_file_text;
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
break;
|
break;
|
||||||
case stGlobal:
|
case stGlobal:
|
||||||
/* External symbol */
|
/* External symbol */
|
||||||
|
@ -2495,12 +2492,12 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
else if (SC_IS_DATA (ext_in->asym.sc))
|
else if (SC_IS_DATA (ext_in->asym.sc))
|
||||||
{
|
{
|
||||||
ms_type = mst_data;
|
ms_type = mst_data;
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA);
|
||||||
}
|
}
|
||||||
else if (SC_IS_BSS (ext_in->asym.sc))
|
else if (SC_IS_BSS (ext_in->asym.sc))
|
||||||
{
|
{
|
||||||
ms_type = mst_bss;
|
ms_type = mst_bss;
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ms_type = mst_abs;
|
ms_type = mst_abs;
|
||||||
|
@ -2510,17 +2507,17 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
if (SC_IS_TEXT (ext_in->asym.sc))
|
if (SC_IS_TEXT (ext_in->asym.sc))
|
||||||
{
|
{
|
||||||
ms_type = mst_file_text;
|
ms_type = mst_file_text;
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
}
|
}
|
||||||
else if (SC_IS_DATA (ext_in->asym.sc))
|
else if (SC_IS_DATA (ext_in->asym.sc))
|
||||||
{
|
{
|
||||||
ms_type = mst_file_data;
|
ms_type = mst_file_data;
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA);
|
||||||
}
|
}
|
||||||
else if (SC_IS_BSS (ext_in->asym.sc))
|
else if (SC_IS_BSS (ext_in->asym.sc))
|
||||||
{
|
{
|
||||||
ms_type = mst_file_bss;
|
ms_type = mst_file_bss;
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ms_type = mst_abs;
|
ms_type = mst_abs;
|
||||||
|
@ -2564,11 +2561,11 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
{
|
{
|
||||||
textlow = fh->adr;
|
textlow = fh->adr;
|
||||||
if (relocatable || textlow != 0)
|
if (relocatable || textlow != 0)
|
||||||
textlow += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
textlow += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
textlow = 0;
|
textlow = 0;
|
||||||
pst = start_psymtab_common (objfile, section_offsets,
|
pst = start_psymtab_common (objfile, objfile->section_offsets,
|
||||||
fdr_name (fh),
|
fdr_name (fh),
|
||||||
textlow,
|
textlow,
|
||||||
objfile->global_psymbols.next,
|
objfile->global_psymbols.next,
|
||||||
|
@ -2652,7 +2649,7 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
CORE_ADDR procaddr;
|
CORE_ADDR procaddr;
|
||||||
long isym;
|
long isym;
|
||||||
|
|
||||||
sh.value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
if (sh.st == stStaticProc)
|
if (sh.st == stStaticProc)
|
||||||
{
|
{
|
||||||
namestring = debug_info->ss + fh->issBase + sh.iss;
|
namestring = debug_info->ss + fh->issBase + sh.iss;
|
||||||
|
@ -2703,7 +2700,7 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
case scPData:
|
case scPData:
|
||||||
case scXData:
|
case scXData:
|
||||||
namestring = debug_info->ss + fh->issBase + sh.iss;
|
namestring = debug_info->ss + fh->issBase + sh.iss;
|
||||||
sh.value += ANOFFSET (section_offsets, SECT_OFF_DATA);
|
sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA);
|
||||||
prim_record_minimal_symbol_and_info (namestring,
|
prim_record_minimal_symbol_and_info (namestring,
|
||||||
sh.value,
|
sh.value,
|
||||||
mst_file_data,
|
mst_file_data,
|
||||||
|
@ -2717,7 +2714,7 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
/* FIXME! Shouldn't this use cases for bss,
|
/* FIXME! Shouldn't this use cases for bss,
|
||||||
then have the default be abs? */
|
then have the default be abs? */
|
||||||
namestring = debug_info->ss + fh->issBase + sh.iss;
|
namestring = debug_info->ss + fh->issBase + sh.iss;
|
||||||
sh.value += ANOFFSET (section_offsets, SECT_OFF_BSS);
|
sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS);
|
||||||
prim_record_minimal_symbol_and_info (namestring,
|
prim_record_minimal_symbol_and_info (namestring,
|
||||||
sh.value,
|
sh.value,
|
||||||
mst_file_bss,
|
mst_file_bss,
|
||||||
|
@ -2769,7 +2766,7 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
namestring = stabstring
|
namestring = stabstring
|
||||||
#define CUR_SYMBOL_TYPE type_code
|
#define CUR_SYMBOL_TYPE type_code
|
||||||
#define CUR_SYMBOL_VALUE sh.value
|
#define CUR_SYMBOL_VALUE sh.value
|
||||||
#define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
|
#define START_PSYMTAB(ofile,fname,low,symoff,global_syms,static_syms)\
|
||||||
pst = save_pst
|
pst = save_pst
|
||||||
#define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set) (void)0
|
#define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set) (void)0
|
||||||
#define HANDLE_RBRAC(val) \
|
#define HANDLE_RBRAC(val) \
|
||||||
|
@ -2821,18 +2818,18 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
/* The value of a stEnd symbol is the displacement from the
|
/* The value of a stEnd symbol is the displacement from the
|
||||||
corresponding start symbol value, do not relocate it. */
|
corresponding start symbol value, do not relocate it. */
|
||||||
if (sh.st != stEnd)
|
if (sh.st != stEnd)
|
||||||
sh.value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
break;
|
break;
|
||||||
case scData:
|
case scData:
|
||||||
case scSData:
|
case scSData:
|
||||||
case scRData:
|
case scRData:
|
||||||
case scPData:
|
case scPData:
|
||||||
case scXData:
|
case scXData:
|
||||||
sh.value += ANOFFSET (section_offsets, SECT_OFF_DATA);
|
sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA);
|
||||||
break;
|
break;
|
||||||
case scBss:
|
case scBss:
|
||||||
case scSBss:
|
case scSBss:
|
||||||
sh.value += ANOFFSET (section_offsets, SECT_OFF_BSS);
|
sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3029,18 +3026,18 @@ parse_partial_symbols (objfile, section_offsets)
|
||||||
{
|
{
|
||||||
case scText:
|
case scText:
|
||||||
case scRConst:
|
case scRConst:
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
break;
|
break;
|
||||||
case scData:
|
case scData:
|
||||||
case scSData:
|
case scSData:
|
||||||
case scRData:
|
case scRData:
|
||||||
case scPData:
|
case scPData:
|
||||||
case scXData:
|
case scXData:
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA);
|
||||||
break;
|
break;
|
||||||
case scBss:
|
case scBss:
|
||||||
case scSBss:
|
case scSBss:
|
||||||
svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
|
svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3564,7 +3561,7 @@ psymtab_to_symtab_1 (pst, filename)
|
||||||
(*swap_sym_in) (cur_bfd, sym_ptr, &sh);
|
(*swap_sym_in) (cur_bfd, sym_ptr, &sh);
|
||||||
c = parse_symbol (&sh,
|
c = parse_symbol (&sh,
|
||||||
debug_info->external_aux + fh->iauxBase,
|
debug_info->external_aux + fh->iauxBase,
|
||||||
sym_ptr, fh->fBigendian, pst->section_offsets);
|
sym_ptr, fh->fBigendian, pst->section_offsets);
|
||||||
sym_ptr += c * external_sym_size;
|
sym_ptr += c * external_sym_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4131,15 +4128,14 @@ new_symtab (name, maxsyms, maxlines, objfile)
|
||||||
/* Allocate a new partial_symtab NAME */
|
/* Allocate a new partial_symtab NAME */
|
||||||
|
|
||||||
static struct partial_symtab *
|
static struct partial_symtab *
|
||||||
new_psymtab (name, objfile, section_offsets)
|
new_psymtab (name, objfile)
|
||||||
char *name;
|
char *name;
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
{
|
{
|
||||||
struct partial_symtab *psymtab;
|
struct partial_symtab *psymtab;
|
||||||
|
|
||||||
psymtab = allocate_psymtab (name, objfile);
|
psymtab = allocate_psymtab (name, objfile);
|
||||||
psymtab->section_offsets = section_offsets;
|
psymtab->section_offsets = objfile->section_offsets;
|
||||||
|
|
||||||
/* Keep a backpointer to the file's symbols */
|
/* Keep a backpointer to the file's symbols */
|
||||||
|
|
||||||
|
@ -4288,11 +4284,10 @@ new_type (name)
|
||||||
it as normal. */
|
it as normal. */
|
||||||
|
|
||||||
void
|
void
|
||||||
elfmdebug_build_psymtabs (objfile, swap, sec, section_offsets)
|
elfmdebug_build_psymtabs (objfile, swap, sec)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
const struct ecoff_debug_swap *swap;
|
const struct ecoff_debug_swap *swap;
|
||||||
asection *sec;
|
asection *sec;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
{
|
{
|
||||||
bfd *abfd = objfile->obfd;
|
bfd *abfd = objfile->obfd;
|
||||||
struct ecoff_debug_info *info;
|
struct ecoff_debug_info *info;
|
||||||
|
@ -4305,7 +4300,7 @@ elfmdebug_build_psymtabs (objfile, swap, sec, section_offsets)
|
||||||
error ("Error reading ECOFF debugging information: %s",
|
error ("Error reading ECOFF debugging information: %s",
|
||||||
bfd_errmsg (bfd_get_error ()));
|
bfd_errmsg (bfd_get_error ()));
|
||||||
|
|
||||||
mdebug_build_psymtabs (objfile, swap, info, section_offsets);
|
mdebug_build_psymtabs (objfile, swap, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -87,8 +87,6 @@ static CORE_ADDR heuristic_proc_start PARAMS ((CORE_ADDR));
|
||||||
|
|
||||||
static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int));
|
static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int));
|
||||||
|
|
||||||
void mips_set_processor_type_command PARAMS ((char *, int));
|
|
||||||
|
|
||||||
int mips_set_processor_type PARAMS ((char *));
|
int mips_set_processor_type PARAMS ((char *));
|
||||||
|
|
||||||
static void mips_show_processor_type_command PARAMS ((char *, int));
|
static void mips_show_processor_type_command PARAMS ((char *, int));
|
||||||
|
@ -247,9 +245,9 @@ mips_print_extra_frame_info (fi)
|
||||||
&& fi->extra_info
|
&& fi->extra_info
|
||||||
&& fi->extra_info->proc_desc
|
&& fi->extra_info->proc_desc
|
||||||
&& fi->extra_info->proc_desc->pdr.framereg < NUM_REGS)
|
&& fi->extra_info->proc_desc->pdr.framereg < NUM_REGS)
|
||||||
printf_filtered (" frame pointer is at %s+%d\n",
|
printf_filtered (" frame pointer is at %s+%s\n",
|
||||||
REGISTER_NAME (fi->extra_info->proc_desc->pdr.framereg),
|
REGISTER_NAME (fi->extra_info->proc_desc->pdr.framereg),
|
||||||
fi->extra_info->proc_desc->pdr.frameoffset);
|
paddr_d (fi->extra_info->proc_desc->pdr.frameoffset));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert between RAW and VIRTUAL registers. The RAW register size
|
/* Convert between RAW and VIRTUAL registers. The RAW register size
|
||||||
|
@ -689,8 +687,8 @@ static void
|
||||||
print_unpack (char *comment,
|
print_unpack (char *comment,
|
||||||
struct upk_mips16 *u)
|
struct upk_mips16 *u)
|
||||||
{
|
{
|
||||||
printf ("%s %04x ,f(%d) off(%08x) (x(%x) y(%x)\n",
|
printf ("%s %04x ,f(%d) off(%s) (x(%x) y(%x)\n",
|
||||||
comment, u->inst, u->fmt, u->offset, u->regx, u->regy);
|
comment, u->inst, u->fmt, paddr (u->offset), u->regx, u->regy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The EXT-I, EXT-ri nad EXT-I8 instructions all have the same
|
/* The EXT-I, EXT-ri nad EXT-I8 instructions all have the same
|
||||||
|
|
|
@ -104,7 +104,7 @@ mipscoff_symfile_read (objfile, mainline)
|
||||||
error ("Error reading symbol table: %s", bfd_errmsg (bfd_get_error ()));
|
error ("Error reading symbol table: %s", bfd_errmsg (bfd_get_error ()));
|
||||||
|
|
||||||
mdebug_build_psymtabs (objfile, &ecoff_backend (abfd)->debug_swap,
|
mdebug_build_psymtabs (objfile, &ecoff_backend (abfd)->debug_swap,
|
||||||
&ecoff_data (abfd)->debug_info, objfile->section_offsets);
|
&ecoff_data (abfd)->debug_info);
|
||||||
|
|
||||||
/* Add alpha coff dynamic symbols. */
|
/* Add alpha coff dynamic symbols. */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include "xmodem.h"
|
#include "xmodem.h"
|
||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
#include "symfile.h" /* for generic_load */
|
#include "symfile.h" /* for generic_load */
|
||||||
|
#include "inferior.h" /* for write_pc() */
|
||||||
|
|
||||||
#define USE_GENERIC_LOAD
|
#define USE_GENERIC_LOAD
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,8 @@ static DCACHE *remote_dcache;
|
||||||
static int first_time = 0; /* is this the first time we're executing after
|
static int first_time = 0; /* is this the first time we're executing after
|
||||||
gaving created the child proccess? */
|
gaving created the child proccess? */
|
||||||
|
|
||||||
|
#define TARGET_BUF_SIZE 2048
|
||||||
|
|
||||||
/* Convert a string into a printable representation, Return # byte in the
|
/* Convert a string into a printable representation, Return # byte in the
|
||||||
new string. */
|
new string. */
|
||||||
|
|
||||||
|
@ -217,8 +219,7 @@ monitor_error (format, memaddr, len, string, final_char)
|
||||||
{
|
{
|
||||||
int real_len = (len == 0 && string != (char *) 0) ? strlen (string) : len;
|
int real_len = (len == 0 && string != (char *) 0) ? strlen (string) : len;
|
||||||
char *safe_string = alloca ((real_len * 4) + 1);
|
char *safe_string = alloca ((real_len * 4) + 1);
|
||||||
char *p, *q;
|
char *p;
|
||||||
int ch;
|
|
||||||
int safe_len = monitor_printable_string (safe_string, string);
|
int safe_len = monitor_printable_string (safe_string, string);
|
||||||
|
|
||||||
if (final_char)
|
if (final_char)
|
||||||
|
@ -451,7 +452,6 @@ readchar (timeout)
|
||||||
if (c >= 0)
|
if (c >= 0)
|
||||||
{
|
{
|
||||||
c &= 0x7f;
|
c &= 0x7f;
|
||||||
#if 0
|
|
||||||
/* This seems to interfere with proper function of the
|
/* This seems to interfere with proper function of the
|
||||||
input stream */
|
input stream */
|
||||||
if (remote_debug > 0)
|
if (remote_debug > 0)
|
||||||
|
@ -462,7 +462,6 @@ readchar (timeout)
|
||||||
puts_debug ("read -->", buf, "<--");
|
puts_debug ("read -->", buf, "<--");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Canonicialize \n\r combinations into one \r */
|
/* Canonicialize \n\r combinations into one \r */
|
||||||
|
@ -634,8 +633,8 @@ monitor_expect_regexp (pat, buf, buflen)
|
||||||
mybuf = buf;
|
mybuf = buf;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mybuf = alloca (1024);
|
mybuf = alloca (TARGET_BUF_SIZE);
|
||||||
buflen = 1024;
|
buflen = TARGET_BUF_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = mybuf;
|
p = mybuf;
|
||||||
|
@ -905,14 +904,35 @@ monitor_supply_register (regno, valstr)
|
||||||
int regno;
|
int regno;
|
||||||
char *valstr;
|
char *valstr;
|
||||||
{
|
{
|
||||||
unsigned int val;
|
ULONGEST val;
|
||||||
unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
|
unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
val = strtoul (valstr, &p, 16);
|
p = valstr;
|
||||||
|
while (p && *p != '\0')
|
||||||
|
{
|
||||||
|
if (*p == '\r' || *p == '\n')
|
||||||
|
{
|
||||||
|
while (*p != '\0')
|
||||||
|
p++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (isspace (*p))
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!isxdigit (*p) && *p != 'x')
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
val <<= 4;
|
||||||
|
val += fromhex (*p++);
|
||||||
|
}
|
||||||
RDEBUG (("Supplying Register %d %s\n", regno, valstr));
|
RDEBUG (("Supplying Register %d %s\n", regno, valstr));
|
||||||
|
|
||||||
if (val == 0 && valstr == p)
|
if (*p != '\0')
|
||||||
error ("monitor_supply_register (%d): bad value from monitor: %s.",
|
error ("monitor_supply_register (%d): bad value from monitor: %s.",
|
||||||
regno, valstr);
|
regno, valstr);
|
||||||
|
|
||||||
|
@ -1098,7 +1118,7 @@ monitor_wait (pid, status)
|
||||||
struct target_waitstatus *status;
|
struct target_waitstatus *status;
|
||||||
{
|
{
|
||||||
int old_timeout = timeout;
|
int old_timeout = timeout;
|
||||||
char buf[1024];
|
char buf[TARGET_BUF_SIZE];
|
||||||
int resp_len;
|
int resp_len;
|
||||||
struct cleanup *old_chain;
|
struct cleanup *old_chain;
|
||||||
|
|
||||||
|
@ -1282,7 +1302,7 @@ monitor_fetch_register (regno)
|
||||||
int
|
int
|
||||||
monitor_dump_reg_block (char *block_cmd)
|
monitor_dump_reg_block (char *block_cmd)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[TARGET_BUF_SIZE];
|
||||||
int resp_len;
|
int resp_len;
|
||||||
monitor_printf (block_cmd);
|
monitor_printf (block_cmd);
|
||||||
resp_len = monitor_expect_prompt (buf, sizeof (buf));
|
resp_len = monitor_expect_prompt (buf, sizeof (buf));
|
||||||
|
@ -1297,7 +1317,7 @@ monitor_dump_reg_block (char *block_cmd)
|
||||||
static void
|
static void
|
||||||
monitor_dump_regs ()
|
monitor_dump_regs ()
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[TARGET_BUF_SIZE];
|
||||||
int resp_len;
|
int resp_len;
|
||||||
if (current_monitor->dumpregs)
|
if (current_monitor->dumpregs)
|
||||||
(*(current_monitor->dumpregs)) (); /* call supplied function */
|
(*(current_monitor->dumpregs)) (); /* call supplied function */
|
||||||
|
@ -1340,7 +1360,7 @@ monitor_store_register (regno)
|
||||||
int regno;
|
int regno;
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
unsigned int val;
|
ULONGEST val;
|
||||||
|
|
||||||
name = current_monitor->regnames[regno];
|
name = current_monitor->regnames[regno];
|
||||||
if (!name || (*name == '\0'))
|
if (!name || (*name == '\0'))
|
||||||
|
@ -1350,7 +1370,7 @@ monitor_store_register (regno)
|
||||||
}
|
}
|
||||||
|
|
||||||
val = read_register (regno);
|
val = read_register (regno);
|
||||||
RDEBUG (("MON storeg %d %08x\n", regno, (unsigned int) val))
|
RDEBUG (("MON storeg %d %08lx\n", regno, (ULONGEST) val))
|
||||||
|
|
||||||
/* send the register deposit command */
|
/* send the register deposit command */
|
||||||
|
|
||||||
|
@ -1366,7 +1386,7 @@ monitor_store_register (regno)
|
||||||
RDEBUG (("EXP setreg.term\n"))
|
RDEBUG (("EXP setreg.term\n"))
|
||||||
monitor_expect (current_monitor->setreg.term, NULL, 0);
|
monitor_expect (current_monitor->setreg.term, NULL, 0);
|
||||||
if (current_monitor->flags & MO_SETREG_INTERACTIVE)
|
if (current_monitor->flags & MO_SETREG_INTERACTIVE)
|
||||||
monitor_printf ("%x\r", val);
|
monitor_printf ("%A\r", val);
|
||||||
monitor_expect_prompt (NULL, 0);
|
monitor_expect_prompt (NULL, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2148,7 +2168,7 @@ monitor_remove_breakpoint (addr, shadow)
|
||||||
static int
|
static int
|
||||||
monitor_wait_srec_ack ()
|
monitor_wait_srec_ack ()
|
||||||
{
|
{
|
||||||
int i, ch;
|
int ch;
|
||||||
|
|
||||||
if (current_monitor->flags & MO_SREC_ACK_PLUS)
|
if (current_monitor->flags & MO_SREC_ACK_PLUS)
|
||||||
{
|
{
|
||||||
|
|
|
@ -521,9 +521,8 @@ objfile_relocate (objfile, new_offsets)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *new_offsets;
|
struct section_offsets *new_offsets;
|
||||||
{
|
{
|
||||||
struct section_offsets *delta = (struct section_offsets *)
|
struct section_offsets *delta =
|
||||||
alloca (sizeof (struct section_offsets)
|
(struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
|
||||||
+ objfile->num_sections * sizeof (delta->offsets));
|
|
||||||
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -289,7 +289,6 @@ ocd_open (name, from_tty, target_type, ops)
|
||||||
struct target_ops *ops;
|
struct target_ops *ops;
|
||||||
{
|
{
|
||||||
unsigned char buf[10], *p;
|
unsigned char buf[10], *p;
|
||||||
int status;
|
|
||||||
int pktlen;
|
int pktlen;
|
||||||
|
|
||||||
if (name == 0)
|
if (name == 0)
|
||||||
|
@ -1066,7 +1065,6 @@ ocd_get_packet (cmd, lenp, timeout)
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
int len;
|
int len;
|
||||||
int i;
|
|
||||||
static unsigned char packet[512];
|
static unsigned char packet[512];
|
||||||
unsigned char *packet_ptr;
|
unsigned char *packet_ptr;
|
||||||
unsigned char checksum;
|
unsigned char checksum;
|
||||||
|
@ -1411,7 +1409,7 @@ bdm_update_flash_command (args, from_tty)
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
int status, pktlen;
|
int status, pktlen;
|
||||||
struct cleanup *old_chain;
|
struct cleanup *old_chain;
|
||||||
void (*store_registers_tmp) PARAMS ((int));
|
void (*store_registers_tmp) PARAMS ((int));
|
||||||
|
|
||||||
if (!ocd_desc)
|
if (!ocd_desc)
|
||||||
|
|
|
@ -127,7 +127,7 @@ static struct complaint lbrac_mismatch_complaint =
|
||||||
/* Local function prototypes */
|
/* Local function prototypes */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_minimal_symbols PARAMS ((struct objfile *, struct section_offsets *));
|
read_minimal_symbols PARAMS ((struct objfile *));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
os9k_read_ofile_symtab PARAMS ((struct partial_symtab *));
|
os9k_read_ofile_symtab PARAMS ((struct partial_symtab *));
|
||||||
|
@ -139,8 +139,7 @@ static void
|
||||||
os9k_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
|
os9k_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_os9k_psymtab PARAMS ((struct section_offsets *, struct objfile *,
|
read_os9k_psymtab PARAMS ((struct objfile *, CORE_ADDR, int));
|
||||||
CORE_ADDR, int));
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
fill_sym PARAMS ((FILE *, bfd *));
|
fill_sym PARAMS ((FILE *, bfd *));
|
||||||
|
@ -162,7 +161,7 @@ os9k_process_one_symbol PARAMS ((int, int, CORE_ADDR, char *,
|
||||||
struct section_offsets *, struct objfile *));
|
struct section_offsets *, struct objfile *));
|
||||||
|
|
||||||
static struct partial_symtab *
|
static struct partial_symtab *
|
||||||
os9k_start_psymtab PARAMS ((struct objfile *, struct section_offsets *, char *,
|
os9k_start_psymtab PARAMS ((struct objfile *, char *,
|
||||||
CORE_ADDR, int, int, struct partial_symbol **,
|
CORE_ADDR, int, int, struct partial_symbol **,
|
||||||
struct partial_symbol **));
|
struct partial_symbol **));
|
||||||
|
|
||||||
|
@ -171,8 +170,7 @@ static struct partial_symtab *
|
||||||
struct partial_symtab **, int));
|
struct partial_symtab **, int));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *,
|
record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *));
|
||||||
struct section_offsets *));
|
|
||||||
|
|
||||||
#define HANDLE_RBRAC(val) \
|
#define HANDLE_RBRAC(val) \
|
||||||
if ((val) > pst->texthigh) pst->texthigh = (val);
|
if ((val) > pst->texthigh) pst->texthigh = (val);
|
||||||
|
@ -198,12 +196,11 @@ record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *,
|
||||||
#define N_ABS 6
|
#define N_ABS 6
|
||||||
|
|
||||||
static void
|
static void
|
||||||
record_minimal_symbol (name, address, type, objfile, section_offsets)
|
record_minimal_symbol (name, address, type, objfile)
|
||||||
char *name;
|
char *name;
|
||||||
CORE_ADDR address;
|
CORE_ADDR address;
|
||||||
int type;
|
int type;
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
{
|
{
|
||||||
enum minimal_symbol_type ms_type;
|
enum minimal_symbol_type ms_type;
|
||||||
|
|
||||||
|
@ -211,7 +208,7 @@ record_minimal_symbol (name, address, type, objfile, section_offsets)
|
||||||
{
|
{
|
||||||
case N_TEXT:
|
case N_TEXT:
|
||||||
ms_type = mst_text;
|
ms_type = mst_text;
|
||||||
address += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
address += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
break;
|
break;
|
||||||
case N_DATA:
|
case N_DATA:
|
||||||
ms_type = mst_data;
|
ms_type = mst_data;
|
||||||
|
@ -257,9 +254,8 @@ struct stbsymbol
|
||||||
#define STBSYMSIZE 10
|
#define STBSYMSIZE 10
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_minimal_symbols (objfile, section_offsets)
|
read_minimal_symbols (objfile)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
|
@ -314,7 +310,7 @@ read_minimal_symbols (objfile, section_offsets)
|
||||||
break;
|
break;
|
||||||
ch = getc (fp);
|
ch = getc (fp);
|
||||||
};
|
};
|
||||||
record_minimal_symbol (buf1, sym.value, sym.type & 7, objfile, section_offsets);
|
record_minimal_symbol (buf1, sym.value, sym.type & 7, objfile);
|
||||||
off += STBSYMSIZE;
|
off += STBSYMSIZE;
|
||||||
};
|
};
|
||||||
install_minimal_symbols (objfile);
|
install_minimal_symbols (objfile);
|
||||||
|
@ -326,8 +322,6 @@ read_minimal_symbols (objfile, section_offsets)
|
||||||
put all the relevant info into a "struct os9k_symfile_info",
|
put all the relevant info into a "struct os9k_symfile_info",
|
||||||
hung off the objfile structure.
|
hung off the objfile structure.
|
||||||
|
|
||||||
SECTION_OFFSETS contains offsets relative to which the symbols in the
|
|
||||||
various sections are (depending where the sections were actually loaded).
|
|
||||||
MAINLINE is true if we are reading the main symbol
|
MAINLINE is true if we are reading the main symbol
|
||||||
table (as opposed to a shared lib or dynamically loaded file). */
|
table (as opposed to a shared lib or dynamically loaded file). */
|
||||||
|
|
||||||
|
@ -349,11 +343,11 @@ os9k_symfile_read (objfile, mainline)
|
||||||
back_to = make_cleanup (really_free_pendings, 0);
|
back_to = make_cleanup (really_free_pendings, 0);
|
||||||
|
|
||||||
make_cleanup ((make_cleanup_func) discard_minimal_symbols, 0);
|
make_cleanup ((make_cleanup_func) discard_minimal_symbols, 0);
|
||||||
read_minimal_symbols (objfile, objfile->section_offsets);
|
read_minimal_symbols (objfile);
|
||||||
|
|
||||||
/* Now that the symbol table data of the executable file are all in core,
|
/* Now that the symbol table data of the executable file are all in core,
|
||||||
process them and define symbols accordingly. */
|
process them and define symbols accordingly. */
|
||||||
read_os9k_psymtab (objfile->section_offsets, objfile,
|
read_os9k_psymtab (objfile,
|
||||||
DBX_TEXT_ADDR (objfile),
|
DBX_TEXT_ADDR (objfile),
|
||||||
DBX_TEXT_SIZE (objfile));
|
DBX_TEXT_SIZE (objfile));
|
||||||
|
|
||||||
|
@ -565,13 +559,10 @@ fill_sym (dbg_file, abfd)
|
||||||
/* Given pointers to an a.out symbol table in core containing dbx
|
/* Given pointers to an a.out symbol table in core containing dbx
|
||||||
style data, setup partial_symtab's describing each source file for
|
style data, setup partial_symtab's describing each source file for
|
||||||
which debugging information is available.
|
which debugging information is available.
|
||||||
SYMFILE_NAME is the name of the file we are reading from
|
SYMFILE_NAME is the name of the file we are reading from. */
|
||||||
and SECTION_OFFSETS is the set of offsets for the various sections
|
|
||||||
of the file (a set of zeros if the mainline program). */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
read_os9k_psymtab (objfile, text_addr, text_size)
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
CORE_ADDR text_addr;
|
CORE_ADDR text_addr;
|
||||||
int text_size;
|
int text_size;
|
||||||
|
@ -617,7 +608,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
||||||
#ifdef END_OF_TEXT_DEFAULT
|
#ifdef END_OF_TEXT_DEFAULT
|
||||||
end_of_text_addr = END_OF_TEXT_DEFAULT;
|
end_of_text_addr = END_OF_TEXT_DEFAULT;
|
||||||
#else
|
#else
|
||||||
end_of_text_addr = text_addr + section_offsets->offsets[SECT_OFF_TEXT]
|
end_of_text_addr = text_addr + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT)
|
||||||
+ text_size; /* Relocate */
|
+ text_size; /* Relocate */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -664,7 +655,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case N_SYM_SE:
|
case N_SYM_SE:
|
||||||
CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
if (psymfile_depth == 1 && pst)
|
if (psymfile_depth == 1 && pst)
|
||||||
{
|
{
|
||||||
os9k_end_psymtab (pst, psymtab_include_list, includes_used,
|
os9k_end_psymtab (pst, psymtab_include_list, includes_used,
|
||||||
|
@ -701,7 +692,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
||||||
|
|
||||||
valu = CUR_SYMBOL_VALUE;
|
valu = CUR_SYMBOL_VALUE;
|
||||||
if (valu)
|
if (valu)
|
||||||
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
valu += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
past_first_source_file = 1;
|
past_first_source_file = 1;
|
||||||
|
|
||||||
p = strchr (namestring, ':');
|
p = strchr (namestring, ':');
|
||||||
|
@ -716,7 +707,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
||||||
if (psymfile_depth == 0)
|
if (psymfile_depth == 0)
|
||||||
{
|
{
|
||||||
if (!pst)
|
if (!pst)
|
||||||
pst = os9k_start_psymtab (objfile, section_offsets,
|
pst = os9k_start_psymtab (objfile,
|
||||||
str, valu,
|
str, valu,
|
||||||
cursymoffset,
|
cursymoffset,
|
||||||
symnum - 1,
|
symnum - 1,
|
||||||
|
@ -893,7 +884,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case 'f':
|
case 'f':
|
||||||
CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
if (pst && pst->textlow == 0)
|
if (pst && pst->textlow == 0)
|
||||||
pst->textlow = CUR_SYMBOL_VALUE;
|
pst->textlow = CUR_SYMBOL_VALUE;
|
||||||
|
|
||||||
|
@ -904,7 +895,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case 'F':
|
case 'F':
|
||||||
CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
if (pst && pst->textlow == 0)
|
if (pst && pst->textlow == 0)
|
||||||
pst->textlow = CUR_SYMBOL_VALUE;
|
pst->textlow = CUR_SYMBOL_VALUE;
|
||||||
|
|
||||||
|
@ -942,7 +933,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
case N_SYM_RBRAC:
|
case N_SYM_RBRAC:
|
||||||
CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
|
||||||
#ifdef HANDLE_RBRAC
|
#ifdef HANDLE_RBRAC
|
||||||
HANDLE_RBRAC (CUR_SYMBOL_VALUE);
|
HANDLE_RBRAC (CUR_SYMBOL_VALUE);
|
||||||
continue;
|
continue;
|
||||||
|
@ -992,10 +983,9 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
|
||||||
|
|
||||||
|
|
||||||
static struct partial_symtab *
|
static struct partial_symtab *
|
||||||
os9k_start_psymtab (objfile, section_offsets,
|
os9k_start_psymtab (objfile,
|
||||||
filename, textlow, ldsymoff, ldsymcnt, global_syms, static_syms)
|
filename, textlow, ldsymoff, ldsymcnt, global_syms, static_syms)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
char *filename;
|
char *filename;
|
||||||
CORE_ADDR textlow;
|
CORE_ADDR textlow;
|
||||||
int ldsymoff;
|
int ldsymoff;
|
||||||
|
@ -1004,7 +994,7 @@ os9k_start_psymtab (objfile, section_offsets,
|
||||||
struct partial_symbol **static_syms;
|
struct partial_symbol **static_syms;
|
||||||
{
|
{
|
||||||
struct partial_symtab *result =
|
struct partial_symtab *result =
|
||||||
start_psymtab_common (objfile, section_offsets,
|
start_psymtab_common (objfile, objfile->section_offsets,
|
||||||
filename, textlow, global_syms, static_syms);
|
filename, textlow, global_syms, static_syms);
|
||||||
|
|
||||||
result->read_symtab_private = (char *)
|
result->read_symtab_private = (char *)
|
||||||
|
@ -1313,7 +1303,6 @@ os9k_read_ofile_symtab (pst)
|
||||||
int sym_offset; /* Offset to start of symbols to read */
|
int sym_offset; /* Offset to start of symbols to read */
|
||||||
CORE_ADDR text_offset; /* Start of text segment for symbols */
|
CORE_ADDR text_offset; /* Start of text segment for symbols */
|
||||||
int text_size; /* Size of text segment for symbols */
|
int text_size; /* Size of text segment for symbols */
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
FILE *dbg_file;
|
FILE *dbg_file;
|
||||||
|
|
||||||
objfile = pst->objfile;
|
objfile = pst->objfile;
|
||||||
|
@ -1321,7 +1310,6 @@ os9k_read_ofile_symtab (pst)
|
||||||
max_symnum = LDSYMCNT (pst);
|
max_symnum = LDSYMCNT (pst);
|
||||||
text_offset = pst->textlow;
|
text_offset = pst->textlow;
|
||||||
text_size = pst->texthigh - pst->textlow;
|
text_size = pst->texthigh - pst->textlow;
|
||||||
section_offsets = pst->section_offsets;
|
|
||||||
|
|
||||||
current_objfile = objfile;
|
current_objfile = objfile;
|
||||||
subfile_stack = NULL;
|
subfile_stack = NULL;
|
||||||
|
@ -1386,7 +1374,7 @@ os9k_read_ofile_symtab (pst)
|
||||||
type = bufp->n_type;
|
type = bufp->n_type;
|
||||||
|
|
||||||
os9k_process_one_symbol ((int) type, (int) bufp->n_desc,
|
os9k_process_one_symbol ((int) type, (int) bufp->n_desc,
|
||||||
(CORE_ADDR) bufp->n_value, bufp->n_strx, section_offsets, objfile);
|
(CORE_ADDR) bufp->n_value, bufp->n_strx, pst->section_offsets, objfile);
|
||||||
|
|
||||||
/* We skip checking for a new .o or -l file; that should never
|
/* We skip checking for a new .o or -l file; that should never
|
||||||
happen in this routine. */
|
happen in this routine. */
|
||||||
|
|
|
@ -602,8 +602,6 @@ parse_nested_classes_for_hpacc (name, len, token, class_prefix, argptr)
|
||||||
struct symbol *sym_class = NULL;
|
struct symbol *sym_class = NULL;
|
||||||
struct symbol *sym_var = NULL;
|
struct symbol *sym_var = NULL;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
register int i;
|
|
||||||
int colons_found = 0;
|
|
||||||
int prefix_len = 0;
|
int prefix_len = 0;
|
||||||
int done = 0;
|
int done = 0;
|
||||||
char *q;
|
char *q;
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
CUR_SYMBOL_TYPE --Type code of current symbol.
|
CUR_SYMBOL_TYPE --Type code of current symbol.
|
||||||
CUR_SYMBOL_VALUE --Value field of current symbol. May be adjusted here.
|
CUR_SYMBOL_VALUE --Value field of current symbol. May be adjusted here.
|
||||||
namestring - variable pointing to the name of the stab.
|
namestring - variable pointing to the name of the stab.
|
||||||
section_offsets - variable pointing to the section offsets.
|
|
||||||
pst - the partial symbol table being built.
|
pst - the partial symbol table being built.
|
||||||
|
|
||||||
psymtab_include_list, includes_used, includes_allocated - list of include
|
psymtab_include_list, includes_used, includes_allocated - list of include
|
||||||
|
@ -266,7 +265,7 @@ switch (CUR_SYMBOL_TYPE)
|
||||||
immediately follow the first. */
|
immediately follow the first. */
|
||||||
|
|
||||||
if (!pst)
|
if (!pst)
|
||||||
pst = START_PSYMTAB (objfile, objfile->section_offsets,
|
pst = START_PSYMTAB (objfile,
|
||||||
namestring, valu,
|
namestring, valu,
|
||||||
first_so_symnum * symbol_size,
|
first_so_symnum * symbol_size,
|
||||||
objfile->global_psymbols.next,
|
objfile->global_psymbols.next,
|
||||||
|
|
|
@ -27,8 +27,6 @@
|
||||||
#include "monitor.h"
|
#include "monitor.h"
|
||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
|
|
||||||
static void ppcbug_open PARAMS ((char *args, int from_tty));
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ppcbug_supply_register (regname, regnamelen, val, vallen)
|
ppcbug_supply_register (regname, regnamelen, val, vallen)
|
||||||
char *regname;
|
char *regname;
|
||||||
|
@ -36,7 +34,7 @@ ppcbug_supply_register (regname, regnamelen, val, vallen)
|
||||||
char *val;
|
char *val;
|
||||||
int vallen;
|
int vallen;
|
||||||
{
|
{
|
||||||
int regno = 0, base = 0;
|
int regno = 0;
|
||||||
|
|
||||||
if (regnamelen < 2 || regnamelen > 4)
|
if (regnamelen < 2 || regnamelen > 4)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
#include "monitor.h"
|
#include "monitor.h"
|
||||||
#include "remote-utils.h"
|
#include "remote-utils.h"
|
||||||
|
#include "inferior.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
extern int baud_rate;
|
extern int baud_rate;
|
||||||
|
|
||||||
|
@ -88,8 +90,6 @@ static int array_get_packet ();
|
||||||
static unsigned long ascii2hexword ();
|
static unsigned long ascii2hexword ();
|
||||||
static void hexword2ascii ();
|
static void hexword2ascii ();
|
||||||
|
|
||||||
extern char *version;
|
|
||||||
|
|
||||||
#define LOG_FILE "monitor.log"
|
#define LOG_FILE "monitor.log"
|
||||||
#if defined (LOG_FILE)
|
#if defined (LOG_FILE)
|
||||||
FILE *log_file;
|
FILE *log_file;
|
||||||
|
@ -625,7 +625,7 @@ array_open (args, name, from_tty)
|
||||||
log_file = fopen (LOG_FILE, "w");
|
log_file = fopen (LOG_FILE, "w");
|
||||||
if (log_file == NULL)
|
if (log_file == NULL)
|
||||||
perror_with_name (LOG_FILE);
|
perror_with_name (LOG_FILE);
|
||||||
fprintf (log_file, "GDB %s (%s", version);
|
fprintf (log_file, "GDB %s (%s", version, host_name);
|
||||||
fprintf (log_file, " --target %s)\n", array_ops.to_shortname);
|
fprintf (log_file, " --target %s)\n", array_ops.to_shortname);
|
||||||
fprintf (log_file, "Remote target %s connected to %s\n\n", array_ops.to_shortname, dev_name);
|
fprintf (log_file, "Remote target %s connected to %s\n\n", array_ops.to_shortname, dev_name);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1025,7 +1025,7 @@ array_read_inferior_memory (memaddr, myaddr, len)
|
||||||
/* Fetch the bytes */
|
/* Fetch the bytes */
|
||||||
debuglogs (3, "read %d bytes from inferior address %x", len_this_pass,
|
debuglogs (3, "read %d bytes from inferior address %x", len_this_pass,
|
||||||
startaddr);
|
startaddr);
|
||||||
sprintf (buf, "m%08x,%04x", startaddr, len_this_pass);
|
sprintf (buf, "m%08lx,%04x", startaddr, len_this_pass);
|
||||||
make_gdb_packet (packet, buf);
|
make_gdb_packet (packet, buf);
|
||||||
if (array_send_packet (packet) == 0)
|
if (array_send_packet (packet) == 0)
|
||||||
{
|
{
|
||||||
|
@ -1112,7 +1112,7 @@ array_insert_breakpoint (addr, shadow)
|
||||||
{
|
{
|
||||||
breakaddr[i] = addr;
|
breakaddr[i] = addr;
|
||||||
if (sr_get_debug () > 4)
|
if (sr_get_debug () > 4)
|
||||||
printf ("Breakpoint at %x\n", addr);
|
printf ("Breakpoint at %s\n", paddr_nz (addr));
|
||||||
array_read_inferior_memory (bp_addr, shadow, bp_size);
|
array_read_inferior_memory (bp_addr, shadow, bp_size);
|
||||||
printf_monitor ("b 0x%x\n", addr);
|
printf_monitor ("b 0x%x\n", addr);
|
||||||
expect_prompt (1);
|
expect_prompt (1);
|
||||||
|
@ -1147,7 +1147,8 @@ array_remove_breakpoint (addr, shadow)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf (stderr, "Can't find breakpoint associated with 0x%x\n", addr);
|
fprintf (stderr, "Can't find breakpoint associated with 0x%s\n",
|
||||||
|
paddr_nz (addr));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
#define S_IROTH S_IREAD
|
#define S_IROTH S_IREAD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void mips_set_processor_type_command PARAMS ((char *, int));
|
|
||||||
|
|
||||||
|
|
||||||
/* Breakpoint types. Values 0, 1, and 2 must agree with the watch
|
/* Breakpoint types. Values 0, 1, and 2 must agree with the watch
|
||||||
|
@ -394,7 +393,7 @@ static int interrupt_count;
|
||||||
static int mips_wait_flag = 0;
|
static int mips_wait_flag = 0;
|
||||||
|
|
||||||
/* If non-zero, monitor supports breakpoint commands. */
|
/* If non-zero, monitor supports breakpoint commands. */
|
||||||
static monitor_supports_breakpoints = 0;
|
static int monitor_supports_breakpoints = 0;
|
||||||
|
|
||||||
/* Data cache header. */
|
/* Data cache header. */
|
||||||
|
|
||||||
|
@ -2545,7 +2544,7 @@ remote_mips_remove_watchpoint (addr, len, type)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
remote_mips_stopped_by_watchpoint ()
|
remote_mips_stopped_by_watchpoint (void)
|
||||||
{
|
{
|
||||||
return hit_watchpoint;
|
return hit_watchpoint;
|
||||||
}
|
}
|
||||||
|
@ -2864,7 +2863,7 @@ send_srec (srec, len, addr)
|
||||||
case 0x6: /* ACK */
|
case 0x6: /* ACK */
|
||||||
return;
|
return;
|
||||||
case 0x15: /* NACK */
|
case 0x15: /* NACK */
|
||||||
fprintf_unfiltered (gdb_stderr, "Download got a NACK at byte %d! Retrying.\n", addr);
|
fprintf_unfiltered (gdb_stderr, "Download got a NACK at byte %s! Retrying.\n", paddr_u (addr));
|
||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
error ("Download got unexpected ack char: 0x%x, retrying.\n", ch);
|
error ("Download got unexpected ack char: 0x%x, retrying.\n", ch);
|
||||||
|
@ -2910,9 +2909,10 @@ mips_load_srec (args)
|
||||||
{
|
{
|
||||||
unsigned int numbytes;
|
unsigned int numbytes;
|
||||||
|
|
||||||
/* FIXME! vma too small?? */
|
/* FIXME! vma too small????? */
|
||||||
printf_filtered ("%s\t: 0x%4x .. 0x%4x ", s->name, s->vma,
|
printf_filtered ("%s\t: 0x%4lx .. 0x%4lx ", s->name,
|
||||||
s->vma + s->_raw_size);
|
(long) s->vma,
|
||||||
|
(long) (s->vma + s->_raw_size));
|
||||||
gdb_flush (gdb_stdout);
|
gdb_flush (gdb_stdout);
|
||||||
|
|
||||||
for (i = 0; i < s->_raw_size; i += numbytes)
|
for (i = 0; i < s->_raw_size; i += numbytes)
|
||||||
|
|
|
@ -512,12 +512,8 @@ rombug_wait (pid, status)
|
||||||
{
|
{
|
||||||
if (obj_sec->objfile != symfile_objfile)
|
if (obj_sec->objfile != symfile_objfile)
|
||||||
new_symfile_objfile (obj_sec->objfile, 1, 0);
|
new_symfile_objfile (obj_sec->objfile, 1, 0);
|
||||||
offs = ((struct section_offsets *)
|
offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
|
||||||
alloca (sizeof (struct section_offsets)
|
memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
|
||||||
+ (symfile_objfile->num_sections * sizeof (offs->offsets))));
|
|
||||||
memcpy (offs, symfile_objfile->section_offsets,
|
|
||||||
(sizeof (struct section_offsets) +
|
|
||||||
(symfile_objfile->num_sections * sizeof (offs->offsets))));
|
|
||||||
ANOFFSET (offs, SECT_OFF_DATA) = addr;
|
ANOFFSET (offs, SECT_OFF_DATA) = addr;
|
||||||
ANOFFSET (offs, SECT_OFF_BSS) = addr;
|
ANOFFSET (offs, SECT_OFF_BSS) = addr;
|
||||||
|
|
||||||
|
|
|
@ -373,7 +373,7 @@ arm_rdi_create_inferior (exec_file, args, env)
|
||||||
/* Set up memory limit */
|
/* Set up memory limit */
|
||||||
top_of_memory = strtoul (*env + sizeof ("MEMSIZE=") - 1,
|
top_of_memory = strtoul (*env + sizeof ("MEMSIZE=") - 1,
|
||||||
&end_of_num, 0);
|
&end_of_num, 0);
|
||||||
printf_filtered ("Setting top-of-memory to 0x%x\n",
|
printf_filtered ("Setting top-of-memory to 0x%lx\n",
|
||||||
top_of_memory);
|
top_of_memory);
|
||||||
|
|
||||||
rslt = angel_RDI_info (RDIInfo_SetTopMem, &top_of_memory, &arg2);
|
rslt = angel_RDI_info (RDIInfo_SetTopMem, &top_of_memory, &arg2);
|
||||||
|
|
|
@ -498,7 +498,6 @@ sds_fetch_registers (regno)
|
||||||
{
|
{
|
||||||
unsigned char buf[PBUFSIZ];
|
unsigned char buf[PBUFSIZ];
|
||||||
int i, retlen;
|
int i, retlen;
|
||||||
char *p;
|
|
||||||
char regs[REGISTER_BYTES];
|
char regs[REGISTER_BYTES];
|
||||||
|
|
||||||
/* Unimplemented registers read as all bits zero. */
|
/* Unimplemented registers read as all bits zero. */
|
||||||
|
@ -780,8 +779,6 @@ putmessage (buf, len)
|
||||||
unsigned char csum = 0;
|
unsigned char csum = 0;
|
||||||
char buf2[PBUFSIZ], buf3[PBUFSIZ];
|
char buf2[PBUFSIZ], buf3[PBUFSIZ];
|
||||||
unsigned char header[3];
|
unsigned char header[3];
|
||||||
int ch;
|
|
||||||
int tcount = 0;
|
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
/* Copy the packet into buffer BUF2, encapsulating it
|
/* Copy the packet into buffer BUF2, encapsulating it
|
||||||
|
@ -831,8 +828,6 @@ putmessage (buf, len)
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
int started_error_output = 0;
|
|
||||||
|
|
||||||
if (remote_debug)
|
if (remote_debug)
|
||||||
{
|
{
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
@ -846,9 +841,7 @@ putmessage (buf, len)
|
||||||
perror_with_name ("putmessage: write failed");
|
perror_with_name ("putmessage: write failed");
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Come here after finding the start of the frame. Collect the rest
|
/* Come here after finding the start of the frame. Collect the rest
|
||||||
|
|
|
@ -131,7 +131,7 @@ dump_mem (buf, len)
|
||||||
{
|
{
|
||||||
long l[2];
|
long l[2];
|
||||||
memcpy (l, buf, len);
|
memcpy (l, buf, len);
|
||||||
printf_filtered ("\t0x%x", l[0]);
|
printf_filtered ("\t0x%lx", l[0]);
|
||||||
printf_filtered (len == 8 ? " 0x%x\n" : "\n", l[1]);
|
printf_filtered (len == 8 ? " 0x%x\n" : "\n", l[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -290,6 +290,10 @@ gdb_os_error (host_callback * p, const char *format,...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef REGISTER_SIM_REGNO
|
||||||
|
#define REGISTER_SIM_REGNO(N) (N)
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdbsim_fetch_register (regno)
|
gdbsim_fetch_register (regno)
|
||||||
int regno;
|
int regno;
|
||||||
|
@ -300,19 +304,28 @@ gdbsim_fetch_register (regno)
|
||||||
for (regno = 0; regno < NUM_REGS; regno++)
|
for (regno = 0; regno < NUM_REGS; regno++)
|
||||||
gdbsim_fetch_register (regno);
|
gdbsim_fetch_register (regno);
|
||||||
}
|
}
|
||||||
else if (REGISTER_NAME (regno) != NULL && *REGISTER_NAME (regno) != '\0')
|
else if (REGISTER_NAME (regno) != NULL
|
||||||
|
&& *REGISTER_NAME (regno) != '\0')
|
||||||
{
|
{
|
||||||
char buf[MAX_REGISTER_RAW_SIZE];
|
char buf[MAX_REGISTER_RAW_SIZE];
|
||||||
int nr_bytes = sim_fetch_register (gdbsim_desc, regno, buf, REGISTER_RAW_SIZE (regno));
|
int nr_bytes;
|
||||||
|
if (REGISTER_SIM_REGNO (regno) >= 0)
|
||||||
|
nr_bytes = sim_fetch_register (gdbsim_desc,
|
||||||
|
REGISTER_SIM_REGNO (regno),
|
||||||
|
buf, REGISTER_RAW_SIZE (regno));
|
||||||
|
else
|
||||||
|
nr_bytes = 0;
|
||||||
if (nr_bytes == 0)
|
if (nr_bytes == 0)
|
||||||
/* register not applicable, supply zero's */
|
/* register not applicable, supply zero's */
|
||||||
memset (buf, 0, MAX_REGISTER_RAW_SIZE);
|
memset (buf, 0, MAX_REGISTER_RAW_SIZE);
|
||||||
else if (nr_bytes > 0 && nr_bytes != REGISTER_RAW_SIZE (regno)
|
else if (nr_bytes > 0 && nr_bytes != REGISTER_RAW_SIZE (regno)
|
||||||
&& warn_user)
|
&& warn_user)
|
||||||
{
|
{
|
||||||
printf_unfiltered ("Size of register %s (%d) incorrect (%d instead of %d))",
|
fprintf_unfiltered (gdb_stderr,
|
||||||
REGISTER_NAME (regno), regno,
|
"Size of register %s (%d/%d) incorrect (%d instead of %d))",
|
||||||
nr_bytes, REGISTER_RAW_SIZE (regno));
|
REGISTER_NAME (regno),
|
||||||
|
regno, REGISTER_SIM_REGNO (regno),
|
||||||
|
nr_bytes, REGISTER_RAW_SIZE (regno));
|
||||||
warn_user = 0;
|
warn_user = 0;
|
||||||
}
|
}
|
||||||
supply_register (regno, buf);
|
supply_register (regno, buf);
|
||||||
|
@ -335,12 +348,16 @@ gdbsim_store_register (regno)
|
||||||
for (regno = 0; regno < NUM_REGS; regno++)
|
for (regno = 0; regno < NUM_REGS; regno++)
|
||||||
gdbsim_store_register (regno);
|
gdbsim_store_register (regno);
|
||||||
}
|
}
|
||||||
else if (REGISTER_NAME (regno) != NULL && *REGISTER_NAME (regno) != '\0')
|
else if (REGISTER_NAME (regno) != NULL
|
||||||
|
&& *REGISTER_NAME (regno) != '\0'
|
||||||
|
&& REGISTER_SIM_REGNO (regno) >= 0)
|
||||||
{
|
{
|
||||||
char tmp[MAX_REGISTER_RAW_SIZE];
|
char tmp[MAX_REGISTER_RAW_SIZE];
|
||||||
int nr_bytes;
|
int nr_bytes;
|
||||||
read_register_gen (regno, tmp);
|
read_register_gen (regno, tmp);
|
||||||
nr_bytes = sim_store_register (gdbsim_desc, regno, tmp, REGISTER_RAW_SIZE (regno));
|
nr_bytes = sim_store_register (gdbsim_desc,
|
||||||
|
REGISTER_SIM_REGNO (regno),
|
||||||
|
tmp, REGISTER_RAW_SIZE (regno));
|
||||||
if (nr_bytes > 0 && nr_bytes != REGISTER_RAW_SIZE (regno))
|
if (nr_bytes > 0 && nr_bytes != REGISTER_RAW_SIZE (regno))
|
||||||
internal_error ("Register size different to expected");
|
internal_error ("Register size different to expected");
|
||||||
if (sr_get_debug ())
|
if (sr_get_debug ())
|
||||||
|
@ -743,8 +760,11 @@ gdbsim_xfer_inferior_memory (memaddr, myaddr, len, write, target)
|
||||||
|
|
||||||
if (sr_get_debug ())
|
if (sr_get_debug ())
|
||||||
{
|
{
|
||||||
printf_filtered ("gdbsim_xfer_inferior_memory: myaddr 0x%x, memaddr 0x%x, len %d, write %d\n",
|
/* FIXME: Send to something other than STDOUT? */
|
||||||
myaddr, memaddr, len, write);
|
printf_filtered ("gdbsim_xfer_inferior_memory: myaddr 0x");
|
||||||
|
gdb_print_host_address (myaddr, gdb_stdout);
|
||||||
|
printf_filtered (", memaddr 0x%s, len %d, write %d\n",
|
||||||
|
paddr_nz (memaddr), len, write);
|
||||||
if (sr_get_debug () && write)
|
if (sr_get_debug () && write)
|
||||||
dump_mem (myaddr, len);
|
dump_mem (myaddr, len);
|
||||||
}
|
}
|
||||||
|
|
|
@ -708,12 +708,8 @@ vx_add_symbols (name, from_tty, text_addr, data_addr, bss_addr)
|
||||||
free_objfile it. */
|
free_objfile it. */
|
||||||
objfile_to_front (objfile);
|
objfile_to_front (objfile);
|
||||||
|
|
||||||
offs = (struct section_offsets *)
|
offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
|
||||||
alloca (sizeof (struct section_offsets)
|
memcpy (offs, objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
|
||||||
+ objfile->num_sections * sizeof (offs->offsets));
|
|
||||||
memcpy (offs, objfile->section_offsets,
|
|
||||||
sizeof (struct section_offsets)
|
|
||||||
+ objfile->num_sections * sizeof (offs->offsets));
|
|
||||||
|
|
||||||
ss.text_start = 0;
|
ss.text_start = 0;
|
||||||
ss.data_start = 0;
|
ss.data_start = 0;
|
||||||
|
|
41
gdb/remote.c
41
gdb/remote.c
|
@ -1499,13 +1499,8 @@ get_offsets ()
|
||||||
if (symfile_objfile == NULL)
|
if (symfile_objfile == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
offs = alloca (sizeof (struct section_offsets)
|
offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
|
||||||
+ symfile_objfile->num_sections
|
memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
|
||||||
* sizeof (offs->offsets));
|
|
||||||
memcpy (offs, symfile_objfile->section_offsets,
|
|
||||||
sizeof (struct section_offsets)
|
|
||||||
+ symfile_objfile->num_sections
|
|
||||||
* sizeof (offs->offsets));
|
|
||||||
|
|
||||||
ANOFFSET (offs, SECT_OFF_TEXT) = text_addr;
|
ANOFFSET (offs, SECT_OFF_TEXT) = text_addr;
|
||||||
|
|
||||||
|
@ -1592,8 +1587,10 @@ remote_cisco_section_offsets (text_addr, data_addr, bss_addr,
|
||||||
sprintf_vma (tmp + strlen (tmp), bss_addr);
|
sprintf_vma (tmp + strlen (tmp), bss_addr);
|
||||||
fprintf_filtered (gdb_stdlog, tmp);
|
fprintf_filtered (gdb_stdlog, tmp);
|
||||||
fprintf_filtered (gdb_stdlog,
|
fprintf_filtered (gdb_stdlog,
|
||||||
"Reloc offset: text = 0x%x data = 0x%x bss = 0x%x\n",
|
"Reloc offset: text = 0x%s data = 0x%s bss = 0x%s\n",
|
||||||
(long) *text_offs, (long) *data_offs, (long) *bss_offs);
|
paddr_nz (*text_offs),
|
||||||
|
paddr_nz (*data_offs),
|
||||||
|
paddr_nz (*bss_offs));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1619,15 +1616,8 @@ remote_cisco_objfile_relocate (text_off, data_off, bss_off)
|
||||||
broken for xcoff, dwarf, sdb-coff, etc. But there is no
|
broken for xcoff, dwarf, sdb-coff, etc. But there is no
|
||||||
simple canonical representation for this stuff. */
|
simple canonical representation for this stuff. */
|
||||||
|
|
||||||
offs = ((struct section_offsets *)
|
offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
|
||||||
alloca (sizeof (struct section_offsets)
|
memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
|
||||||
+ (symfile_objfile->num_sections
|
|
||||||
* sizeof (offs->offsets))));
|
|
||||||
|
|
||||||
memcpy (offs, symfile_objfile->section_offsets,
|
|
||||||
(sizeof (struct section_offsets)
|
|
||||||
+ (symfile_objfile->num_sections
|
|
||||||
* sizeof (offs->offsets))));
|
|
||||||
|
|
||||||
ANOFFSET (offs, SECT_OFF_TEXT) = text_off;
|
ANOFFSET (offs, SECT_OFF_TEXT) = text_off;
|
||||||
ANOFFSET (offs, SECT_OFF_DATA) = data_off;
|
ANOFFSET (offs, SECT_OFF_DATA) = data_off;
|
||||||
|
@ -2389,7 +2379,7 @@ Packet: '%s'\n",
|
||||||
|
|
||||||
if (symfile_objfile == NULL)
|
if (symfile_objfile == NULL)
|
||||||
{
|
{
|
||||||
warning ("Relocation packet recieved with no symbol file. \
|
warning ("Relocation packet received with no symbol file. \
|
||||||
Packet Dropped");
|
Packet Dropped");
|
||||||
goto got_status;
|
goto got_status;
|
||||||
}
|
}
|
||||||
|
@ -3453,7 +3443,7 @@ putpkt_binary (buf, cnt)
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
|
fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
|
||||||
fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
|
fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
|
||||||
fprintf_unfiltered (gdb_stdlog, "...", buf2);
|
fprintf_unfiltered (gdb_stdlog, "...");
|
||||||
gdb_flush (gdb_stdlog);
|
gdb_flush (gdb_stdlog);
|
||||||
}
|
}
|
||||||
if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
|
if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
|
||||||
|
@ -3994,7 +3984,6 @@ remote_remove_breakpoint (addr, contents_cache)
|
||||||
CORE_ADDR addr;
|
CORE_ADDR addr;
|
||||||
char *contents_cache;
|
char *contents_cache;
|
||||||
{
|
{
|
||||||
char buf[PBUFSIZ];
|
|
||||||
int bp_size;
|
int bp_size;
|
||||||
|
|
||||||
if ((remote_protocol_Z.support == PACKET_ENABLE)
|
if ((remote_protocol_Z.support == PACKET_ENABLE)
|
||||||
|
@ -4040,7 +4029,7 @@ remote_insert_watchpoint (addr, len, type)
|
||||||
p = strchr (buf, '\0');
|
p = strchr (buf, '\0');
|
||||||
addr = remote_address_masked (addr);
|
addr = remote_address_masked (addr);
|
||||||
p += hexnumstr (p, (ULONGEST) addr);
|
p += hexnumstr (p, (ULONGEST) addr);
|
||||||
sprintf (p, ",%lx", len);
|
sprintf (p, ",%x", len);
|
||||||
|
|
||||||
putpkt (buf);
|
putpkt (buf);
|
||||||
getpkt (buf, 0);
|
getpkt (buf, 0);
|
||||||
|
@ -4063,7 +4052,7 @@ remote_remove_watchpoint (addr, len, type)
|
||||||
p = strchr (buf, '\0');
|
p = strchr (buf, '\0');
|
||||||
addr = remote_address_masked (addr);
|
addr = remote_address_masked (addr);
|
||||||
p += hexnumstr (p, (ULONGEST) addr);
|
p += hexnumstr (p, (ULONGEST) addr);
|
||||||
sprintf (p, ",%lx", len);
|
sprintf (p, ",%x", len);
|
||||||
putpkt (buf);
|
putpkt (buf);
|
||||||
getpkt (buf, 0);
|
getpkt (buf, 0);
|
||||||
|
|
||||||
|
@ -4258,8 +4247,8 @@ compare_sections_command (args, from_tty)
|
||||||
for (target_crc = 0, tmp = &buf[1]; *tmp; tmp++)
|
for (target_crc = 0, tmp = &buf[1]; *tmp; tmp++)
|
||||||
target_crc = target_crc * 16 + fromhex (*tmp);
|
target_crc = target_crc * 16 + fromhex (*tmp);
|
||||||
|
|
||||||
printf_filtered ("Section %s, range 0x%08x -- 0x%08x: ",
|
printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
|
||||||
sectname, lma, lma + size);
|
sectname, paddr (lma), paddr (lma + size));
|
||||||
if (host_crc == target_crc)
|
if (host_crc == target_crc)
|
||||||
printf_filtered ("matched.\n");
|
printf_filtered ("matched.\n");
|
||||||
else
|
else
|
||||||
|
@ -4287,7 +4276,6 @@ remote_query (query_type, buf, outbuf, bufsiz)
|
||||||
int i;
|
int i;
|
||||||
char *buf2 = alloca (PBUFSIZ);
|
char *buf2 = alloca (PBUFSIZ);
|
||||||
char *p2 = &buf2[0];
|
char *p2 = &buf2[0];
|
||||||
char *p = buf;
|
|
||||||
|
|
||||||
if (!bufsiz)
|
if (!bufsiz)
|
||||||
error ("null pointer to remote bufer size specified");
|
error ("null pointer to remote bufer size specified");
|
||||||
|
@ -4877,7 +4865,6 @@ readsocket ()
|
||||||
static int
|
static int
|
||||||
readtty ()
|
readtty ()
|
||||||
{
|
{
|
||||||
int status;
|
|
||||||
int tty_bytecount;
|
int tty_bytecount;
|
||||||
|
|
||||||
/* First, read a buffer full from the terminal */
|
/* First, read a buffer full from the terminal */
|
||||||
|
|
|
@ -343,9 +343,7 @@ vmap_symtab (vp)
|
||||||
objfile = symfile_objfile;
|
objfile = symfile_objfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
new_offsets = alloca
|
new_offsets = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
|
||||||
(sizeof (struct section_offsets)
|
|
||||||
+ sizeof (new_offsets->offsets) * objfile->num_sections);
|
|
||||||
|
|
||||||
for (i = 0; i < objfile->num_sections; ++i)
|
for (i = 0; i < objfile->num_sections; ++i)
|
||||||
ANOFFSET (new_offsets, i) = ANOFFSET (objfile->section_offsets, i);
|
ANOFFSET (new_offsets, i) = ANOFFSET (objfile->section_offsets, i);
|
||||||
|
|
|
@ -1281,7 +1281,6 @@ frame_get_saved_regs (fi, fdatap)
|
||||||
struct frame_info *fi;
|
struct frame_info *fi;
|
||||||
struct rs6000_framedata *fdatap;
|
struct rs6000_framedata *fdatap;
|
||||||
{
|
{
|
||||||
int ii;
|
|
||||||
CORE_ADDR frame_addr;
|
CORE_ADDR frame_addr;
|
||||||
struct rs6000_framedata work_fdata;
|
struct rs6000_framedata work_fdata;
|
||||||
|
|
||||||
|
@ -1806,8 +1805,6 @@ show_current_variant ()
|
||||||
static void
|
static void
|
||||||
set_processor (char *arg, int from_tty)
|
set_processor (char *arg, int from_tty)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!arg || arg[0] == '\0')
|
if (!arg || arg[0] == '\0')
|
||||||
{
|
{
|
||||||
list_variants ();
|
list_variants ();
|
||||||
|
|
|
@ -145,7 +145,7 @@ scm_ipruk (hdr, ptr, stream)
|
||||||
if (SCM_CELLP (ptr))
|
if (SCM_CELLP (ptr))
|
||||||
fprintf_filtered (stream, " (0x%lx . 0x%lx) @",
|
fprintf_filtered (stream, " (0x%lx . 0x%lx) @",
|
||||||
(long) SCM_CAR (ptr), (long) SCM_CDR (ptr));
|
(long) SCM_CAR (ptr), (long) SCM_CDR (ptr));
|
||||||
fprintf_filtered (stream, " 0x%x>", ptr);
|
fprintf_filtered (stream, " 0x%s>", paddr_nz (ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -217,7 +217,7 @@ taloop:
|
||||||
(sizet) LENGTH (name),
|
(sizet) LENGTH (name),
|
||||||
port);
|
port);
|
||||||
#endif
|
#endif
|
||||||
fprintf_filtered (stream, " #X%lX>", svalue);
|
fprintf_filtered (stream, " #X%s>", paddr_nz (svalue));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case scm_tcs_cons_imcar:
|
case scm_tcs_cons_imcar:
|
||||||
|
|
|
@ -274,7 +274,7 @@ pipe_readchar (scb, timeout)
|
||||||
|
|
||||||
else if (timeout == 0)
|
else if (timeout == 0)
|
||||||
{
|
{
|
||||||
status == SERIAL_TIMEOUT;
|
status = SERIAL_TIMEOUT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -281,7 +281,7 @@ tcp_readchar (scb, timeout)
|
||||||
|
|
||||||
else if (timeout == 0)
|
else if (timeout == 0)
|
||||||
{
|
{
|
||||||
status == SERIAL_TIMEOUT;
|
status = SERIAL_TIMEOUT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,7 +199,7 @@ static int hex (char);
|
||||||
static char *mem2hex (char *, char *, int);
|
static char *mem2hex (char *, char *, int);
|
||||||
static char *hex2mem (char *, char *, int);
|
static char *hex2mem (char *, char *, int);
|
||||||
static int hexToInt (char **, int *);
|
static int hexToInt (char **, int *);
|
||||||
static unsigned char *getpacket (unsigned char *);
|
static unsigned char *getpacket (void);
|
||||||
static void putpacket (char *);
|
static void putpacket (char *);
|
||||||
static void handle_buserror (void);
|
static void handle_buserror (void);
|
||||||
static int computeSignal (int exceptionVector);
|
static int computeSignal (int exceptionVector);
|
||||||
|
@ -277,8 +277,8 @@ int registers[NUMREGBYTES / 4];
|
||||||
stepData instrBuffer;
|
stepData instrBuffer;
|
||||||
char stepped;
|
char stepped;
|
||||||
static const char hexchars[] = "0123456789abcdef";
|
static const char hexchars[] = "0123456789abcdef";
|
||||||
char remcomInBuffer[BUFMAX];
|
static char remcomInBuffer[BUFMAX];
|
||||||
char remcomOutBuffer[BUFMAX];
|
static char remcomOutBuffer[BUFMAX];
|
||||||
|
|
||||||
char highhex(int x)
|
char highhex(int x)
|
||||||
{
|
{
|
||||||
|
@ -383,9 +383,9 @@ hexToInt (char **ptr, int *intValue)
|
||||||
/* scan for the sequence $<data>#<checksum> */
|
/* scan for the sequence $<data>#<checksum> */
|
||||||
|
|
||||||
char *
|
char *
|
||||||
getpacket (buffer)
|
getpacket ()
|
||||||
char *buffer;
|
|
||||||
{
|
{
|
||||||
|
unsigned char *buffer = &remcomInBuffer[0];
|
||||||
unsigned char checksum;
|
unsigned char checksum;
|
||||||
unsigned char xmitcsum;
|
unsigned char xmitcsum;
|
||||||
int count;
|
int count;
|
||||||
|
@ -689,7 +689,7 @@ gdb_handle_exception (int exceptionVector)
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
remcomOutBuffer[0] = 0;
|
remcomOutBuffer[0] = 0;
|
||||||
ptr = getpacket (remcomInBuffer);
|
ptr = getpacket ();
|
||||||
|
|
||||||
switch (*ptr++)
|
switch (*ptr++)
|
||||||
{
|
{
|
||||||
|
|
102
gdb/sh-tdep.c
102
gdb/sh-tdep.c
|
@ -640,67 +640,67 @@ sh_show_regs (args, from_tty)
|
||||||
if (cpu == bfd_mach_sh4)
|
if (cpu == bfd_mach_sh4)
|
||||||
cpu = bfd_mach_sh3;
|
cpu = bfd_mach_sh3;
|
||||||
|
|
||||||
printf_filtered ("PC=%08x SR=%08x PR=%08x MACH=%08x MACHL=%08x\n",
|
printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
|
||||||
read_register (PC_REGNUM),
|
paddr (read_register (PC_REGNUM)),
|
||||||
read_register (SR_REGNUM),
|
(long) read_register (SR_REGNUM),
|
||||||
read_register (PR_REGNUM),
|
(long) read_register (PR_REGNUM),
|
||||||
read_register (MACH_REGNUM),
|
(long) read_register (MACH_REGNUM),
|
||||||
read_register (MACL_REGNUM));
|
(long) read_register (MACL_REGNUM));
|
||||||
|
|
||||||
printf_filtered ("GBR=%08x VBR=%08x",
|
printf_filtered ("GBR=%08lx VBR=%08lx",
|
||||||
read_register (GBR_REGNUM),
|
(long) read_register (GBR_REGNUM),
|
||||||
read_register (VBR_REGNUM));
|
(long) read_register (VBR_REGNUM));
|
||||||
if (cpu == bfd_mach_sh3 || cpu == bfd_mach_sh3e)
|
if (cpu == bfd_mach_sh3 || cpu == bfd_mach_sh3e)
|
||||||
{
|
{
|
||||||
printf_filtered (" SSR=%08x SPC=%08x",
|
printf_filtered (" SSR=%08lx SPC=%08lx",
|
||||||
read_register (SSR_REGNUM),
|
(long) read_register (SSR_REGNUM),
|
||||||
read_register (SPC_REGNUM));
|
(long) read_register (SPC_REGNUM));
|
||||||
if (cpu == bfd_mach_sh3e)
|
if (cpu == bfd_mach_sh3e)
|
||||||
{
|
{
|
||||||
printf_filtered (" FPUL=%08x FPSCR=%08x",
|
printf_filtered (" FPUL=%08lx FPSCR=%08lx",
|
||||||
read_register (FPUL_REGNUM),
|
(long) read_register (FPUL_REGNUM),
|
||||||
read_register (FPSCR_REGNUM));
|
(long) read_register (FPSCR_REGNUM));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_filtered ("\nR0-R7 %08x %08x %08x %08x %08x %08x %08x %08x\n",
|
printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
||||||
read_register (0),
|
(long) read_register (0),
|
||||||
read_register (1),
|
(long) read_register (1),
|
||||||
read_register (2),
|
(long) read_register (2),
|
||||||
read_register (3),
|
(long) read_register (3),
|
||||||
read_register (4),
|
(long) read_register (4),
|
||||||
read_register (5),
|
(long) read_register (5),
|
||||||
read_register (6),
|
(long) read_register (6),
|
||||||
read_register (7));
|
(long) read_register (7));
|
||||||
printf_filtered ("R8-R15 %08x %08x %08x %08x %08x %08x %08x %08x\n",
|
printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
||||||
read_register (8),
|
(long) read_register (8),
|
||||||
read_register (9),
|
(long) read_register (9),
|
||||||
read_register (10),
|
(long) read_register (10),
|
||||||
read_register (11),
|
(long) read_register (11),
|
||||||
read_register (12),
|
(long) read_register (12),
|
||||||
read_register (13),
|
(long) read_register (13),
|
||||||
read_register (14),
|
(long) read_register (14),
|
||||||
read_register (15));
|
(long) read_register (15));
|
||||||
if (cpu == bfd_mach_sh3e)
|
if (cpu == bfd_mach_sh3e)
|
||||||
{
|
{
|
||||||
printf_filtered ("FP0-FP7 %08x %08x %08x %08x %08x %08x %08x %08x\n",
|
printf_filtered ("FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
||||||
read_register (FP0_REGNUM + 0),
|
(long) read_register (FP0_REGNUM + 0),
|
||||||
read_register (FP0_REGNUM + 1),
|
(long) read_register (FP0_REGNUM + 1),
|
||||||
read_register (FP0_REGNUM + 2),
|
(long) read_register (FP0_REGNUM + 2),
|
||||||
read_register (FP0_REGNUM + 3),
|
(long) read_register (FP0_REGNUM + 3),
|
||||||
read_register (FP0_REGNUM + 4),
|
(long) read_register (FP0_REGNUM + 4),
|
||||||
read_register (FP0_REGNUM + 5),
|
(long) read_register (FP0_REGNUM + 5),
|
||||||
read_register (FP0_REGNUM + 6),
|
(long) read_register (FP0_REGNUM + 6),
|
||||||
read_register (FP0_REGNUM + 7));
|
(long) read_register (FP0_REGNUM + 7));
|
||||||
printf_filtered ("FP8-FP15 %08x %08x %08x %08x %08x %08x %08x %08x\n",
|
printf_filtered ("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
|
||||||
read_register (FP0_REGNUM + 8),
|
(long) read_register (FP0_REGNUM + 8),
|
||||||
read_register (FP0_REGNUM + 9),
|
(long) read_register (FP0_REGNUM + 9),
|
||||||
read_register (FP0_REGNUM + 10),
|
(long) read_register (FP0_REGNUM + 10),
|
||||||
read_register (FP0_REGNUM + 11),
|
(long) read_register (FP0_REGNUM + 11),
|
||||||
read_register (FP0_REGNUM + 12),
|
(long) read_register (FP0_REGNUM + 12),
|
||||||
read_register (FP0_REGNUM + 13),
|
(long) read_register (FP0_REGNUM + 13),
|
||||||
read_register (FP0_REGNUM + 14),
|
(long) read_register (FP0_REGNUM + 14),
|
||||||
read_register (FP0_REGNUM + 15));
|
(long) read_register (FP0_REGNUM + 15));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,12 +119,16 @@ static void sol_core_close PARAMS ((int quitting));
|
||||||
static void init_sol_thread_ops PARAMS ((void));
|
static void init_sol_thread_ops PARAMS ((void));
|
||||||
static void init_sol_core_ops PARAMS ((void));
|
static void init_sol_core_ops PARAMS ((void));
|
||||||
|
|
||||||
#define THREAD_FLAG 0x80000000
|
/* Default definitions: These must be defined in tm.h
|
||||||
#define is_thread(ARG) (((ARG) & THREAD_FLAG) != 0)
|
if they are to be shared with a process module such as procfs. */
|
||||||
#define is_lwp(ARG) (((ARG) & THREAD_FLAG) == 0)
|
|
||||||
#define GET_LWP(LWP_ID) (TIDGET(LWP_ID))
|
#define THREAD_FLAG 0x80000000
|
||||||
#define GET_THREAD(THREAD_ID) (((THREAD_ID) >> 16) & 0x7fff)
|
#define is_thread(ARG) (((ARG) & THREAD_FLAG) != 0)
|
||||||
#define BUILD_LWP(LWP_ID, PID) ((LWP_ID) << 16 | (PID))
|
#define is_lwp(ARG) (((ARG) & THREAD_FLAG) == 0)
|
||||||
|
#define GET_LWP(PID) TIDGET (PID)
|
||||||
|
#define GET_THREAD(PID) (((PID) >> 16) & 0x7fff)
|
||||||
|
#define BUILD_LWP(TID, PID) ((TID) << 16 | (PID))
|
||||||
|
|
||||||
#define BUILD_THREAD(THREAD_ID, PID) (THREAD_FLAG | BUILD_LWP (THREAD_ID, PID))
|
#define BUILD_THREAD(THREAD_ID, PID) (THREAD_FLAG | BUILD_LWP (THREAD_ID, PID))
|
||||||
|
|
||||||
/* Pointers to routines from lithread_db resolved by dlopen() */
|
/* Pointers to routines from lithread_db resolved by dlopen() */
|
||||||
|
@ -492,6 +496,7 @@ sol_thread_detach (args, from_tty)
|
||||||
char *args;
|
char *args;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
|
inferior_pid = PIDGET (main_ph.pid);
|
||||||
unpush_target (&sol_thread_ops);
|
unpush_target (&sol_thread_ops);
|
||||||
procfs_ops.to_detach (args, from_tty);
|
procfs_ops.to_detach (args, from_tty);
|
||||||
}
|
}
|
||||||
|
@ -987,30 +992,40 @@ typedef size_t gdb_ps_size_t;
|
||||||
by the time we call anything in thread_db, these routines need to do
|
by the time we call anything in thread_db, these routines need to do
|
||||||
nothing. */
|
nothing. */
|
||||||
|
|
||||||
|
/* Process stop */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_pstop (gdb_ps_prochandle_t ph)
|
ps_pstop (gdb_ps_prochandle_t ph)
|
||||||
{
|
{
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Process continue */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_pcontinue (gdb_ps_prochandle_t ph)
|
ps_pcontinue (gdb_ps_prochandle_t ph)
|
||||||
{
|
{
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* LWP stop */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_lstop (gdb_ps_prochandle_t ph, lwpid_t lwpid)
|
ps_lstop (gdb_ps_prochandle_t ph, lwpid_t lwpid)
|
||||||
{
|
{
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* LWP continue */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_lcontinue (gdb_ps_prochandle_t ph, lwpid_t lwpid)
|
ps_lcontinue (gdb_ps_prochandle_t ph, lwpid_t lwpid)
|
||||||
{
|
{
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Looks up the symbol LD_SYMBOL_NAME in the debugger's symbol table. */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *ld_object_name,
|
ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *ld_object_name,
|
||||||
const char *ld_symbol_name, paddr_t * ld_symbol_addr)
|
const char *ld_symbol_name, paddr_t * ld_symbol_addr)
|
||||||
|
@ -1071,6 +1086,8 @@ rw_common (int dowrite, const struct ps_prochandle *ph, paddr_t addr,
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Copies SIZE bytes from target process .data segment to debugger memory. */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_pdread (gdb_ps_prochandle_t ph, paddr_t addr,
|
ps_pdread (gdb_ps_prochandle_t ph, paddr_t addr,
|
||||||
gdb_ps_read_buf_t buf, gdb_ps_size_t size)
|
gdb_ps_read_buf_t buf, gdb_ps_size_t size)
|
||||||
|
@ -1078,6 +1095,8 @@ ps_pdread (gdb_ps_prochandle_t ph, paddr_t addr,
|
||||||
return rw_common (0, ph, addr, buf, size);
|
return rw_common (0, ph, addr, buf, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Copies SIZE bytes from debugger memory .data segment to target process. */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_pdwrite (gdb_ps_prochandle_t ph, paddr_t addr,
|
ps_pdwrite (gdb_ps_prochandle_t ph, paddr_t addr,
|
||||||
gdb_ps_write_buf_t buf, gdb_ps_size_t size)
|
gdb_ps_write_buf_t buf, gdb_ps_size_t size)
|
||||||
|
@ -1085,6 +1104,8 @@ ps_pdwrite (gdb_ps_prochandle_t ph, paddr_t addr,
|
||||||
return rw_common (1, ph, addr, (char *) buf, size);
|
return rw_common (1, ph, addr, (char *) buf, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Copies SIZE bytes from target process .text segment to debugger memory. */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_ptread (gdb_ps_prochandle_t ph, paddr_t addr,
|
ps_ptread (gdb_ps_prochandle_t ph, paddr_t addr,
|
||||||
gdb_ps_read_buf_t buf, gdb_ps_size_t size)
|
gdb_ps_read_buf_t buf, gdb_ps_size_t size)
|
||||||
|
@ -1092,6 +1113,8 @@ ps_ptread (gdb_ps_prochandle_t ph, paddr_t addr,
|
||||||
return rw_common (0, ph, addr, buf, size);
|
return rw_common (0, ph, addr, buf, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Copies SIZE bytes from debugger memory .text segment to target process. */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_ptwrite (gdb_ps_prochandle_t ph, paddr_t addr,
|
ps_ptwrite (gdb_ps_prochandle_t ph, paddr_t addr,
|
||||||
gdb_ps_write_buf_t buf, gdb_ps_size_t size)
|
gdb_ps_write_buf_t buf, gdb_ps_size_t size)
|
||||||
|
@ -1099,7 +1122,7 @@ ps_ptwrite (gdb_ps_prochandle_t ph, paddr_t addr,
|
||||||
return rw_common (1, ph, addr, (char *) buf, size);
|
return rw_common (1, ph, addr, (char *) buf, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get integer regs */
|
/* Get integer regs for LWP */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
|
@ -1122,7 +1145,7 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set integer regs */
|
/* Set integer regs for LWP */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
|
@ -1145,6 +1168,8 @@ ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Log a message (sends to gdb_stderr). */
|
||||||
|
|
||||||
void
|
void
|
||||||
ps_plog (const char *fmt,...)
|
ps_plog (const char *fmt,...)
|
||||||
{
|
{
|
||||||
|
@ -1229,7 +1254,7 @@ ps_lsetxregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, caddr_t xregset)
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get floating-point regs. */
|
/* Get floating-point regs for LWP */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
|
@ -1252,7 +1277,7 @@ ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set floating-point regs. */
|
/* Set floating-point regs for LWP */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
|
@ -1286,6 +1311,8 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
static int nldt_allocated = 0;
|
static int nldt_allocated = 0;
|
||||||
static struct ssd *ldt_bufp = NULL;
|
static struct ssd *ldt_bufp = NULL;
|
||||||
|
|
||||||
|
/* Reads the local descriptor table of a LWP. */
|
||||||
|
|
||||||
ps_err_e
|
ps_err_e
|
||||||
ps_lgetLDT (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
ps_lgetLDT (gdb_ps_prochandle_t ph, lwpid_t lwpid,
|
||||||
struct ssd *pldt)
|
struct ssd *pldt)
|
||||||
|
@ -1391,7 +1418,7 @@ sol_find_new_threads_callback (th, ignored)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
sol_find_new_threads ()
|
sol_find_new_threads ()
|
||||||
{
|
{
|
||||||
/* don't do anything if init failed to resolve the libthread_db library */
|
/* don't do anything if init failed to resolve the libthread_db library */
|
||||||
|
|
|
@ -52,13 +52,13 @@ static void
|
||||||
som_symtab_read PARAMS ((bfd *, struct objfile *,
|
som_symtab_read PARAMS ((bfd *, struct objfile *,
|
||||||
struct section_offsets *));
|
struct section_offsets *));
|
||||||
|
|
||||||
static struct section_offsets *
|
static void
|
||||||
som_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR));
|
som_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR));
|
||||||
|
|
||||||
/* FIXME: These should really be in a common header somewhere */
|
/* FIXME: These should really be in a common header somewhere */
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
hpread_build_psymtabs PARAMS ((struct objfile *, struct section_offsets *, int));
|
hpread_build_psymtabs PARAMS ((struct objfile *, int));
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
hpread_symfile_finish PARAMS ((struct objfile *));
|
hpread_symfile_finish PARAMS ((struct objfile *));
|
||||||
|
@ -398,7 +398,7 @@ som_symfile_read (objfile, mainline)
|
||||||
This builds the psymtab. This used to be done via a scan of
|
This builds the psymtab. This used to be done via a scan of
|
||||||
the DNTT, but is now done via the PXDB-built quick-lookup tables
|
the DNTT, but is now done via the PXDB-built quick-lookup tables
|
||||||
together with a scan of the GNTT. See hp-psymtab-read.c. */
|
together with a scan of the GNTT. See hp-psymtab-read.c. */
|
||||||
hpread_build_psymtabs (objfile, objfile->section_offsets, mainline);
|
hpread_build_psymtabs (objfile, mainline);
|
||||||
|
|
||||||
/* Install any minimal symbols that have been collected as the current
|
/* Install any minimal symbols that have been collected as the current
|
||||||
minimal symbols for this objfile.
|
minimal symbols for this objfile.
|
||||||
|
@ -459,27 +459,24 @@ som_symfile_init (objfile)
|
||||||
|
|
||||||
Plain and simple for now. */
|
Plain and simple for now. */
|
||||||
|
|
||||||
static struct section_offsets *
|
static void
|
||||||
som_symfile_offsets (objfile, addr)
|
som_symfile_offsets (objfile, addr)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
CORE_ADDR addr;
|
CORE_ADDR addr;
|
||||||
{
|
{
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
objfile->num_sections = SECT_OFF_MAX;
|
objfile->num_sections = SECT_OFF_MAX;
|
||||||
section_offsets = (struct section_offsets *)
|
objfile->section_offsets = (struct section_offsets *)
|
||||||
obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
|
obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
|
||||||
|
|
||||||
/* First see if we're a shared library. If so, get the section
|
/* First see if we're a shared library. If so, get the section
|
||||||
offsets from the library, else get them from addr. */
|
offsets from the library, else get them from addr. */
|
||||||
if (!som_solib_section_offsets (objfile, section_offsets))
|
if (!som_solib_section_offsets (objfile, objfile->section_offsets))
|
||||||
{
|
{
|
||||||
for (i = 0; i < SECT_OFF_MAX; i++)
|
for (i = 0; i < SECT_OFF_MAX; i++)
|
||||||
ANOFFSET (section_offsets, i) = addr;
|
ANOFFSET (objfile->section_offsets, i) = addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return section_offsets;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read in and initialize the SOM import list which is present
|
/* Read in and initialize the SOM import list which is present
|
||||||
|
|
19
gdb/source.c
19
gdb/source.c
|
@ -1311,19 +1311,12 @@ list_command (arg, from_tty)
|
||||||
error ("No default source file yet. Do \"help list\".");
|
error ("No default source file yet. Do \"help list\".");
|
||||||
else if (no_end)
|
else if (no_end)
|
||||||
{
|
{
|
||||||
if (lines_to_list % 2 == 0)
|
int first_line = sal.line - lines_to_list / 2;
|
||||||
print_source_lines (sal.symtab,
|
|
||||||
max (sal.line - (lines_to_list / 2), 1),
|
if (first_line < 1) first_line = 1;
|
||||||
sal.line + (lines_to_list / 2), 0);
|
|
||||||
else
|
print_source_lines (sal.symtab, first_line, first_line + lines_to_list,
|
||||||
/* If lines_to_list is odd, then we round down in
|
0);
|
||||||
* one of the lines_to_list/2 computations, round up in
|
|
||||||
* the other, so the total window size around the specified
|
|
||||||
* line comes out right.
|
|
||||||
*/
|
|
||||||
print_source_lines (sal.symtab,
|
|
||||||
max (sal.line - (lines_to_list / 2), 1),
|
|
||||||
sal.line + ((1 + lines_to_list) / 2), 0);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
print_source_lines (sal.symtab, sal.line,
|
print_source_lines (sal.symtab, sal.line,
|
||||||
|
|
|
@ -62,9 +62,6 @@
|
||||||
*
|
*
|
||||||
* ? What was the last sigval ? SNN (signal NN)
|
* ? What was the last sigval ? SNN (signal NN)
|
||||||
*
|
*
|
||||||
* bBB..BB Set baud rate to BB..BB OK or BNN, then sets
|
|
||||||
* baud rate
|
|
||||||
*
|
|
||||||
* All commands and responses are sent with a packet which includes a
|
* All commands and responses are sent with a packet which includes a
|
||||||
* checksum. A packet consists of
|
* checksum. A packet consists of
|
||||||
*
|
*
|
||||||
|
@ -284,12 +281,15 @@ hex(ch)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char remcomInBuffer[BUFMAX];
|
||||||
|
static char remcomOutBuffer[BUFMAX];
|
||||||
|
|
||||||
/* scan for the sequence $<data>#<checksum> */
|
/* scan for the sequence $<data>#<checksum> */
|
||||||
|
|
||||||
unsigned char *
|
unsigned char *
|
||||||
getpacket (buffer)
|
getpacket ()
|
||||||
unsigned char *buffer;
|
|
||||||
{
|
{
|
||||||
|
unsigned char *buffer = &remcomInBuffer[0];
|
||||||
unsigned char checksum;
|
unsigned char checksum;
|
||||||
unsigned char xmitcsum;
|
unsigned char xmitcsum;
|
||||||
int count;
|
int count;
|
||||||
|
@ -382,9 +382,6 @@ putpacket(buffer)
|
||||||
while (getDebugChar() != '+');
|
while (getDebugChar() != '+');
|
||||||
}
|
}
|
||||||
|
|
||||||
static char remcomInBuffer[BUFMAX];
|
|
||||||
static char remcomOutBuffer[BUFMAX];
|
|
||||||
|
|
||||||
/* Indicate to caller of mem2hex or hex2mem that there has been an
|
/* Indicate to caller of mem2hex or hex2mem that there has been an
|
||||||
error. */
|
error. */
|
||||||
static volatile int mem_err = 0;
|
static volatile int mem_err = 0;
|
||||||
|
@ -653,7 +650,7 @@ handle_exception (registers)
|
||||||
{
|
{
|
||||||
remcomOutBuffer[0] = 0;
|
remcomOutBuffer[0] = 0;
|
||||||
|
|
||||||
ptr = getpacket(remcomInBuffer);
|
ptr = getpacket();
|
||||||
switch (*ptr++)
|
switch (*ptr++)
|
||||||
{
|
{
|
||||||
case '?':
|
case '?':
|
||||||
|
@ -769,43 +766,6 @@ handle_exception (registers)
|
||||||
asm ("call 0
|
asm ("call 0
|
||||||
nop ");
|
nop ");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if 0
|
|
||||||
Disabled until we can unscrew this properly
|
|
||||||
|
|
||||||
case 'b': /* bBB... Set baud rate to BB... */
|
|
||||||
{
|
|
||||||
int baudrate;
|
|
||||||
extern void set_timer_3();
|
|
||||||
|
|
||||||
if (!hexToInt(&ptr, &baudrate))
|
|
||||||
{
|
|
||||||
strcpy(remcomOutBuffer,"B01");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert baud rate to uart clock divider */
|
|
||||||
switch (baudrate)
|
|
||||||
{
|
|
||||||
case 38400:
|
|
||||||
baudrate = 16;
|
|
||||||
break;
|
|
||||||
case 19200:
|
|
||||||
baudrate = 33;
|
|
||||||
break;
|
|
||||||
case 9600:
|
|
||||||
baudrate = 65;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
strcpy(remcomOutBuffer,"B02");
|
|
||||||
goto x1;
|
|
||||||
}
|
|
||||||
|
|
||||||
putpacket("OK"); /* Ack before changing speed */
|
|
||||||
set_timer_3(baudrate); /* Set it */
|
|
||||||
}
|
|
||||||
x1: break;
|
|
||||||
#endif
|
|
||||||
} /* switch */
|
} /* switch */
|
||||||
|
|
||||||
/* reply to the request */
|
/* reply to the request */
|
||||||
|
|
|
@ -64,9 +64,6 @@
|
||||||
*
|
*
|
||||||
* ? What was the last sigval ? SNN (signal NN)
|
* ? What was the last sigval ? SNN (signal NN)
|
||||||
*
|
*
|
||||||
* bBB..BB Set baud rate to BB..BB OK or BNN, then sets
|
|
||||||
* baud rate
|
|
||||||
*
|
|
||||||
* All commands and responses are sent with a packet which includes a
|
* All commands and responses are sent with a packet which includes a
|
||||||
* checksum. A packet consists of
|
* checksum. A packet consists of
|
||||||
*
|
*
|
||||||
|
@ -380,12 +377,15 @@ hex(ch)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char remcomInBuffer[BUFMAX];
|
||||||
|
static char remcomOutBuffer[BUFMAX];
|
||||||
|
|
||||||
/* scan for the sequence $<data>#<checksum> */
|
/* scan for the sequence $<data>#<checksum> */
|
||||||
|
|
||||||
unsigned char *
|
unsigned char *
|
||||||
getpacket (buffer)
|
getpacket ()
|
||||||
unsigned char *buffer;
|
|
||||||
{
|
{
|
||||||
|
unsigned char *buffer = &remcomInBuffer[0];
|
||||||
unsigned char checksum;
|
unsigned char checksum;
|
||||||
unsigned char xmitcsum;
|
unsigned char xmitcsum;
|
||||||
int count;
|
int count;
|
||||||
|
@ -478,9 +478,6 @@ putpacket(buffer)
|
||||||
while (getDebugChar() != '+');
|
while (getDebugChar() != '+');
|
||||||
}
|
}
|
||||||
|
|
||||||
static char remcomInBuffer[BUFMAX];
|
|
||||||
static char remcomOutBuffer[BUFMAX];
|
|
||||||
|
|
||||||
/* Indicate to caller of mem2hex or hex2mem that there has been an
|
/* Indicate to caller of mem2hex or hex2mem that there has been an
|
||||||
error. */
|
error. */
|
||||||
static volatile int mem_err = 0;
|
static volatile int mem_err = 0;
|
||||||
|
@ -796,7 +793,7 @@ handle_exception (registers)
|
||||||
{
|
{
|
||||||
remcomOutBuffer[0] = 0;
|
remcomOutBuffer[0] = 0;
|
||||||
|
|
||||||
ptr = getpacket(remcomInBuffer);
|
ptr = getpacket();
|
||||||
switch (*ptr++)
|
switch (*ptr++)
|
||||||
{
|
{
|
||||||
case '?':
|
case '?':
|
||||||
|
@ -936,43 +933,6 @@ handle_exception (registers)
|
||||||
asm ("call 0
|
asm ("call 0
|
||||||
nop ");
|
nop ");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if 0
|
|
||||||
Disabled until we can unscrew this properly
|
|
||||||
|
|
||||||
case 'b': /* bBB... Set baud rate to BB... */
|
|
||||||
{
|
|
||||||
int baudrate;
|
|
||||||
extern void set_timer_3();
|
|
||||||
|
|
||||||
if (!hexToInt(&ptr, &baudrate))
|
|
||||||
{
|
|
||||||
strcpy(remcomOutBuffer,"B01");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert baud rate to uart clock divider */
|
|
||||||
switch (baudrate)
|
|
||||||
{
|
|
||||||
case 38400:
|
|
||||||
baudrate = 16;
|
|
||||||
break;
|
|
||||||
case 19200:
|
|
||||||
baudrate = 33;
|
|
||||||
break;
|
|
||||||
case 9600:
|
|
||||||
baudrate = 65;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
strcpy(remcomOutBuffer,"B02");
|
|
||||||
goto x1;
|
|
||||||
}
|
|
||||||
|
|
||||||
putpacket("OK"); /* Ack before changing speed */
|
|
||||||
set_timer_3(baudrate); /* Set it */
|
|
||||||
}
|
|
||||||
x1: break;
|
|
||||||
#endif
|
|
||||||
} /* switch */
|
} /* switch */
|
||||||
|
|
||||||
/* reply to the request */
|
/* reply to the request */
|
||||||
|
|
|
@ -65,9 +65,6 @@
|
||||||
*
|
*
|
||||||
* ? What was the last sigval ? SNN (signal NN)
|
* ? What was the last sigval ? SNN (signal NN)
|
||||||
*
|
*
|
||||||
* bBB..BB Set baud rate to BB..BB OK or BNN, then sets
|
|
||||||
* baud rate
|
|
||||||
*
|
|
||||||
* All commands and responses are sent with a packet which includes a
|
* All commands and responses are sent with a packet which includes a
|
||||||
* checksum. A packet consists of
|
* checksum. A packet consists of
|
||||||
*
|
*
|
||||||
|
@ -450,12 +447,15 @@ hex(ch)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char remcomInBuffer[BUFMAX];
|
||||||
|
static char remcomOutBuffer[BUFMAX];
|
||||||
|
|
||||||
/* scan for the sequence $<data>#<checksum> */
|
/* scan for the sequence $<data>#<checksum> */
|
||||||
|
|
||||||
unsigned char *
|
unsigned char *
|
||||||
getpacket (buffer)
|
getpacket ()
|
||||||
unsigned char *buffer;
|
|
||||||
{
|
{
|
||||||
|
unsigned char *buffer = &remcomInBuffer[0];
|
||||||
unsigned char checksum;
|
unsigned char checksum;
|
||||||
unsigned char xmitcsum;
|
unsigned char xmitcsum;
|
||||||
int count;
|
int count;
|
||||||
|
@ -548,9 +548,6 @@ putpacket(buffer)
|
||||||
while (getDebugChar() != '+');
|
while (getDebugChar() != '+');
|
||||||
}
|
}
|
||||||
|
|
||||||
static char remcomInBuffer[BUFMAX];
|
|
||||||
static char remcomOutBuffer[BUFMAX];
|
|
||||||
|
|
||||||
/* Indicate to caller of mem2hex or hex2mem that there has been an
|
/* Indicate to caller of mem2hex or hex2mem that there has been an
|
||||||
error. */
|
error. */
|
||||||
static volatile int mem_err = 0;
|
static volatile int mem_err = 0;
|
||||||
|
@ -881,7 +878,7 @@ handle_exception (registers)
|
||||||
{
|
{
|
||||||
remcomOutBuffer[0] = 0;
|
remcomOutBuffer[0] = 0;
|
||||||
|
|
||||||
ptr = getpacket(remcomInBuffer);
|
ptr = getpacket();
|
||||||
switch (*ptr++)
|
switch (*ptr++)
|
||||||
{
|
{
|
||||||
case '?':
|
case '?':
|
||||||
|
@ -1039,43 +1036,6 @@ handle_exception (registers)
|
||||||
asm ("call 0
|
asm ("call 0
|
||||||
nop ");
|
nop ");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if 0
|
|
||||||
Disabled until we can unscrew this properly
|
|
||||||
|
|
||||||
case 'b': /* bBB... Set baud rate to BB... */
|
|
||||||
{
|
|
||||||
int baudrate;
|
|
||||||
extern void set_timer_3();
|
|
||||||
|
|
||||||
if (!hexToInt(&ptr, &baudrate))
|
|
||||||
{
|
|
||||||
strcpy(remcomOutBuffer,"B01");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert baud rate to uart clock divider */
|
|
||||||
switch (baudrate)
|
|
||||||
{
|
|
||||||
case 38400:
|
|
||||||
baudrate = 16;
|
|
||||||
break;
|
|
||||||
case 19200:
|
|
||||||
baudrate = 33;
|
|
||||||
break;
|
|
||||||
case 9600:
|
|
||||||
baudrate = 65;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
strcpy(remcomOutBuffer,"B02");
|
|
||||||
goto x1;
|
|
||||||
}
|
|
||||||
|
|
||||||
putpacket("OK"); /* Ack before changing speed */
|
|
||||||
set_timer_3(baudrate); /* Set it */
|
|
||||||
}
|
|
||||||
x1: break;
|
|
||||||
#endif
|
|
||||||
} /* switch */
|
} /* switch */
|
||||||
|
|
||||||
/* reply to the request */
|
/* reply to the request */
|
||||||
|
|
|
@ -187,11 +187,6 @@ struct stab_section_list
|
||||||
/* Functions exported by dbxread.c. These are not in stabsread.c because
|
/* Functions exported by dbxread.c. These are not in stabsread.c because
|
||||||
they are only used by some stabs readers. */
|
they are only used by some stabs readers. */
|
||||||
|
|
||||||
extern struct partial_symtab *
|
|
||||||
start_psymtab PARAMS ((struct objfile *, struct section_offsets *, char *,
|
|
||||||
CORE_ADDR, int, struct partial_symbol **,
|
|
||||||
struct partial_symbol **));
|
|
||||||
|
|
||||||
extern struct partial_symtab *
|
extern struct partial_symtab *
|
||||||
end_psymtab PARAMS ((struct partial_symtab * pst,
|
end_psymtab PARAMS ((struct partial_symtab * pst,
|
||||||
char **include_list,
|
char **include_list,
|
||||||
|
|
|
@ -457,23 +457,20 @@ find_lowest_section (abfd, sect, obj)
|
||||||
don't need to do anything special. It allocates a section_offsets table
|
don't need to do anything special. It allocates a section_offsets table
|
||||||
for the objectfile OBJFILE and stuffs ADDR into all of the offsets. */
|
for the objectfile OBJFILE and stuffs ADDR into all of the offsets. */
|
||||||
|
|
||||||
struct section_offsets *
|
void
|
||||||
default_symfile_offsets (objfile, addr)
|
default_symfile_offsets (objfile, addr)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
CORE_ADDR addr;
|
CORE_ADDR addr;
|
||||||
{
|
{
|
||||||
struct section_offsets *section_offsets;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
objfile->num_sections = SECT_OFF_MAX;
|
objfile->num_sections = SECT_OFF_MAX;
|
||||||
section_offsets = (struct section_offsets *)
|
objfile->section_offsets = (struct section_offsets *)
|
||||||
obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
|
obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
|
||||||
memset (section_offsets, 0, SIZEOF_SECTION_OFFSETS);
|
memset (objfile->section_offsets, 0, SIZEOF_SECTION_OFFSETS);
|
||||||
|
|
||||||
for (i = 0; i < SECT_OFF_MAX; i++)
|
for (i = 0; i < SECT_OFF_MAX; i++)
|
||||||
ANOFFSET (section_offsets, i) = addr;
|
ANOFFSET (objfile->section_offsets, i) = addr;
|
||||||
|
|
||||||
return section_offsets;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -563,8 +560,7 @@ syms_from_objfile (objfile, addr, mainline, verbo)
|
||||||
(*objfile->sf->sym_init) (objfile);
|
(*objfile->sf->sym_init) (objfile);
|
||||||
clear_complaints (1, verbo);
|
clear_complaints (1, verbo);
|
||||||
|
|
||||||
section_offsets = (*objfile->sf->sym_offsets) (objfile, addr);
|
(*objfile->sf->sym_offsets) (objfile, addr);
|
||||||
objfile->section_offsets = section_offsets;
|
|
||||||
|
|
||||||
#ifndef IBM6000_TARGET
|
#ifndef IBM6000_TARGET
|
||||||
/* This is a SVR4/SunOS specific hack, I think. In any event, it
|
/* This is a SVR4/SunOS specific hack, I think. In any event, it
|
||||||
|
@ -1193,7 +1189,7 @@ generic_load (filename, from_tty)
|
||||||
{
|
{
|
||||||
unsigned long entry;
|
unsigned long entry;
|
||||||
entry = bfd_get_start_address (loadfile_bfd);
|
entry = bfd_get_start_address (loadfile_bfd);
|
||||||
printf_filtered ("Start address 0x%lx , load size %d\n", entry, data_count);
|
printf_filtered ("Start address 0x%lx , load size %ld\n", entry, data_count);
|
||||||
/* We were doing this in remote-mips.c, I suspect it is right
|
/* We were doing this in remote-mips.c, I suspect it is right
|
||||||
for other targets too. */
|
for other targets too. */
|
||||||
write_pc (entry);
|
write_pc (entry);
|
||||||
|
@ -1219,10 +1215,10 @@ report_transfer_performance (data_count, start_time, end_time)
|
||||||
{
|
{
|
||||||
printf_filtered ("Transfer rate: ");
|
printf_filtered ("Transfer rate: ");
|
||||||
if (end_time != start_time)
|
if (end_time != start_time)
|
||||||
printf_filtered ("%d bits/sec",
|
printf_filtered ("%ld bits/sec",
|
||||||
(data_count * 8) / (end_time - start_time));
|
(data_count * 8) / (end_time - start_time));
|
||||||
else
|
else
|
||||||
printf_filtered ("%d bits in <1 sec", (data_count * 8));
|
printf_filtered ("%ld bits in <1 sec", (data_count * 8));
|
||||||
printf_filtered (".\n");
|
printf_filtered (".\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1379,7 +1375,6 @@ reread_symbols ()
|
||||||
struct cleanup *old_cleanups;
|
struct cleanup *old_cleanups;
|
||||||
struct section_offsets *offsets;
|
struct section_offsets *offsets;
|
||||||
int num_offsets;
|
int num_offsets;
|
||||||
int section_offsets_size;
|
|
||||||
char *obfd_filename;
|
char *obfd_filename;
|
||||||
|
|
||||||
printf_filtered ("`%s' has changed; re-reading symbols.\n",
|
printf_filtered ("`%s' has changed; re-reading symbols.\n",
|
||||||
|
@ -1418,11 +1413,8 @@ reread_symbols ()
|
||||||
/* Save the offsets, we will nuke them with the rest of the
|
/* Save the offsets, we will nuke them with the rest of the
|
||||||
psymbol_obstack. */
|
psymbol_obstack. */
|
||||||
num_offsets = objfile->num_sections;
|
num_offsets = objfile->num_sections;
|
||||||
section_offsets_size =
|
offsets = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
|
||||||
sizeof (struct section_offsets)
|
memcpy (offsets, objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
|
||||||
+ sizeof (objfile->section_offsets->offsets) * num_offsets;
|
|
||||||
offsets = (struct section_offsets *) alloca (section_offsets_size);
|
|
||||||
memcpy (offsets, objfile->section_offsets, section_offsets_size);
|
|
||||||
|
|
||||||
/* Nuke all the state that we will re-read. Much of the following
|
/* Nuke all the state that we will re-read. Much of the following
|
||||||
code which sets things to NULL really is necessary to tell
|
code which sets things to NULL really is necessary to tell
|
||||||
|
@ -1479,8 +1471,8 @@ reread_symbols ()
|
||||||
/* We use the same section offsets as from last time. I'm not
|
/* We use the same section offsets as from last time. I'm not
|
||||||
sure whether that is always correct for shared libraries. */
|
sure whether that is always correct for shared libraries. */
|
||||||
objfile->section_offsets = (struct section_offsets *)
|
objfile->section_offsets = (struct section_offsets *)
|
||||||
obstack_alloc (&objfile->psymbol_obstack, section_offsets_size);
|
obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
|
||||||
memcpy (objfile->section_offsets, offsets, section_offsets_size);
|
memcpy (objfile->section_offsets, offsets, SIZEOF_SECTION_OFFSETS);
|
||||||
objfile->num_sections = num_offsets;
|
objfile->num_sections = num_offsets;
|
||||||
|
|
||||||
/* What the hell is sym_new_init for, anyway? The concept of
|
/* What the hell is sym_new_init for, anyway? The concept of
|
||||||
|
@ -2037,10 +2029,7 @@ again2:
|
||||||
/* Allocate and partially fill a partial symtab. It will be
|
/* Allocate and partially fill a partial symtab. It will be
|
||||||
completely filled at the end of the symbol list.
|
completely filled at the end of the symbol list.
|
||||||
|
|
||||||
SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
|
FILENAME is the name of the symbol-file we are reading from. */
|
||||||
is the address relative to which its symbols are (incremental) or 0
|
|
||||||
(normal). */
|
|
||||||
|
|
||||||
|
|
||||||
struct partial_symtab *
|
struct partial_symtab *
|
||||||
start_psymtab_common (objfile, section_offsets,
|
start_psymtab_common (objfile, section_offsets,
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue