Add two pointers (saved_regs, extra_info) to struct frame_info.
Introduce new macro FRAME_INIT_SAVED_REGS which replaces
FRAME_FIND_SAVED_REGS.
Document.
Use in mn10300 and rs6000 targets. Fix side effects on ALPHA, MIPS,
Z8K and SPARC targets.
* config/mips/tm-irix5.h: Modify to work better on irix 6, by
making FP registers 8 bytes instead of 4.
REGISTER_BYTES: redefine. REGISTER_BYTE(): redefine.
REGISTER_VIRTUAL_TYPE: redefine. MIPS_LAST_ARG_REGNUM: redefine.
* irix5-nat.c (fetch_core_registers): read 8 bytes per FP register.
* mips-tdep.c (FP_REGISTER_DOUBLE): new macro to distinguish
targets with 8-byte FP registers (don't use TARGET_MIPS64).
(STACK_ARGSIZE): new macro, how much space is taken up on the
stack for each function argument (don't use TARGET_MIPS64).
(mips_push_arguments): modify logic to work better on Irix 6
(n32 ABI).
(mips16_heuristic_proc_desc): Calculate offsets of registers
saved by entry pseudo-op after rest of prologue has been read.
Use set_reg_offset to ignore all but the first save of a given
register.
(mips32_heuristic_proc_desc): Initialize frame adjustment value.
* remote-sim.c (gdbsim_store_register): Don't update registers
that have a null or empty name.
* findvar.c (read_register_bytes): Don't fetch registers
that have a null or empty name.
member for storing offset of MIPS16 frame pointer from SP.
* mips-tdep.c: Use RA_REGNUM instead of hardcoded 31 throughout.
(PROC_FRAME_ADJUST): Define.
(mips16_heuristic_proc_desc): Store frame pointer adjustment value.
(get_frame_pointer): Use frame pointer adjustment value when
calculating frame address.
* remote-sim.c (gdbsim_fetch_register): Don't fetch registers
that have a null or empty name.
start-sanitize-tx19
* config/mips/tm-tx19.h (MIPS_DEFAULT_FPU_TYPE): Define.
(REGISTER_NAMES): Redefine to eliminate FP registers.
* config/mips/tm-tx19l.h: Ditto.
end-sanitize-tx19
(end_psymtab): Use MSYMBOL_SIZE to extract size from minimal symbol.
* elfread.c (elf_symtab_read): If ELF symbol is "special",
such as a MIPS16 function, mark minimal symbol as special too.
* mips-tdep.c (pc_is_mips16): New function to check whether
a function is MIPS16 by looking at the minimal symbol. Use
pc_is_mips16 throughout instead of IS_MIPS16_ADDR macro.
* config/mips/tm-mips.h (SYMBOL_IS_SPECIAL, MAKE_MSYMBOL_SPECIAL,
MSYMBOL_IS_SPECIAL, MSYMBOL_SIZE): New functions for setting/testing
"special" MIPS16 bit in ELF and minimal symbols.
* mdebugread.c (parse_partial_symbols): Don't construct a partial
symbol table for a file that already has one.
start-sanitize-tx19
* configure.tgt: Support TX19.
* config/mips/tm-tx19.h, config/mips/tm-tx19l.h, config/mips/tx19.mt,
config/mips/tx19l.mt: New files for TX19.
end-sanitize-tx19
stepping over an instruction that triggered a watchpoint.
* remote-mips.c: Numerous changes to support hardware breakpoints
and watchpoints on LSI MiniRISC and TinyRISC boards.
* mips-tdep.c: Move MIPS16-related macros to config/mips/tm-mips.h.
(mips_breakpoint_from_pc): Account for different breakpoint
instructions used by PMON and IDT monitor.
* config/mips/tm-embed.h: Enable hardware breakpoints on embedded
MIPS targets.
* config/mips/tm-mips.h: Define breakpoint instructions for
PMON and IDT monitor. Move MIPS16-related macros here from
mips-tdep.c.
copy first two floating point arguments to general registers, so that
MIPS16 functions will receive the arguments correctly.
(mips_print_register): Print double registers correctly on
little-endian hosts.
(mips_extract_return_value): Return double values correctly
on little-endian hosts.
* mdebugread.c (parse_procedure): Adjust address of procedure relative
to address in file descriptor record; this accounts for constant
strings that may precede functions in the text section. Remove
now-useless lowest_pdr_addr from argument list and all calls.
from being sent to 32-bit targets by masking off upper bits.
* mips-tdep.c (heuristic_proc_start): Mask off upper 32 bits
of PC on 32-bit targets.
(mips16_heuristic_proc_desc): Recognize 'addiu s1,sp,n' as a
frame setup instruction.
(mips32_heuristic_proc_desc): Fix warning found by gcc -Wall.
(mips16_skip_prologue): Recognize 'addiu s1,sp,n' as a valid
prologue instruction. Fix warnings and bugs found by gcc -Wall.
* buildsym.c (finish_block): Improve handling of overlapping blocks;
fixes problem on MIPS16 printing function arguments.
sd and sw instructions correctly.
(heuristic_proc_start): Add support for MIPS16.
(mips16_get_imm, mips16_heuristic_proc_desc,
mips32_heuristic_proc_desc): New helper functions for
heuristic_proc_desc.
(heuristic_proc_desc): Rewrite and reorganize to support MIPS16.
(mips_push_arguments): Don't align small arguments in EABI.
(mips32_skip_prologue): Attempt to shrink code size a little.
(mips_find_saved_regs): Replace hardcoded 2's with MIPS16_INSTLEN.
(heuristic_proc_start): Recognize 'entry' pseudo-op as a start
of function on MIPS16.
(mips32_skip_prologue, mips16_skip_prologue): New helper functions
for mips_skip_prologue.
(mips_skip_prologue): Recognize both 16- and 32-bit prologues.
* config/mips/tm-mips.h (MIPS16_BIG_BREAKPOINT,
MIPS16_LITTLE_BREAKPOINT, BREAKPOINT_FROM_PC): Define.
(ABOUT_TO_RETURN): Call new function mips_about_to_return.
(mips_breakpoint_from_pc, mips_about_to_return): Declare.
* mem-break.c (memory_breakpoint_from_pc): New function.
(memory_insert_breakpoint, memory_remove_breakpoint): Use
memory_breakpoint_from_pc to determine breakpoint contents and size.
* target.h (memory_breakpoint_from_pc): Declare.
* monitor.c (monitor_insert_breakpoint): Use memory_breakpoint_from_pc
to determine size of breakpoint instruction.
* mips-tdep.c (mips32_decode_reg_save, mips16_decode_reg_save):
New helper functions for mips_find_saved_regs.
(mips_find_saved_regs): Recognize mips16 prologues.
(mips_addr_bits_remove): Strip off upper 32 bits of address
when target CPU is 32 bits but CORE_ADDR is 64 bits.
(mips_step_skips_delay): No branch delay slot on mips16.
(gdb_print_insn_mips): Disassemble mips16 code.
(mips_breakpoint_from_pc, mips_about_to_return): New functions.
definition in inferior.h is sufficient.
* mips-tdep.c (mips_pc_in_call_dummy): Ditto.
(mips_push_arguments): Make sure that the stack is aligned to a
multiple of 8 after the arguments are pushed.
Structures are always passed by value in the old ABI.
Adjust argument register value on big endian targets when passing
a value whose length is less than the register size.
Write stack arguments with a single write_memory call.
(mips_pop_frame): Use frame_saved_regs instead of proc_desc to
decide which registers have to be restored.
(mips_addr_bits_remove): Declare.
* mips-tdep.c (mips_push_dummy_frame): Fix heuristic-fence-post
errors when hitting breakpoints during inferior function calls
in 64-bit programs.
(fix_sign_extension): Make public, rename to mips_addr_bits_remove.
* utils.c (paddr_nz, preg_nz): New functions, similar to
paddr and preg but don't print leading zeroes.
* defs.h (paddr_nz, preg_nz): Declare.
* remote-mips.c: Use paddr_nz instead of paddr throughout
to reduce packet size.
(pmon_end_download): Improve timeout error handling.
config/mips/tm-mips.h: Add/fix bugs for 64-bit mips support.
* defs.h: Cleanup; add prototypess
* corefile.c: Change FIXME #ifdef
* win32-nat.c: Include windefs instead of windows.h.
* utils.c: Add routines for printing addresses and registers
based on type size.
Do not set saved registers from heuristics for a sigtramp frame.
* dwarfread.c (enum_type): Determine signedness of enum type
from enumerators.
* mips-tdep.c: Include gdb_string.h, gcc -Wall lint.
* rs6000-nat.c (xcoff_relocate_core): Fix typo.
* valops.c (value_repeat): Fix length of memory transfer to
match recent allocate_repeat_value change.
values whose length is less than the register size for big endian
targets.
* alpha-tdep.c (alpha_extract_return_value,
alpha_store_return_value): Use alpha_convert_register_to_*
to handle functions returning "float" correctly.
read_next_frame_reg to alpha_find_saved_regs, handle saved
floating point registers.
* mips-tdep.c: Move sigtramp handling of saved registers from
read_next_frame_reg to mips_find_saved_regs, handle saved
floating point registers.
* config/mips/tm-irix3.h, config/mips/tm-irix5.h,
config/mips/tm-mipsv4.h (SIGFRAME_FPREGSAVE_OFF): Define.
* sparc-tdep.c (sparc_pc_adjust): Fix check for `unimp'
instruction to handle functions returning structures with
large sizes properly.
* mips-tdep.c (mips_processor_type, tmp_mips_processor_type,
mips_generic_reg_names, mips_r3041_reg_names,
mips_r3051_reg_names, mips_r3081_reg_names,
mips_processor_type_table): New globals.
(mips_do_registers_info): Don't display register if name is empty.
(mips_set_processor_type_command): New command.
(mips_show_processor_type_command): New command.
(mips_set_processor_type): New function.
(mips_read_processor_type): New function.
* config/mips/tm-idt.h (DEFAULT_MIPS_TYPE): New macro.
* config/mips/tm-mips.h (DEFAULT_MIPS_TYPE): New macro.
(NUM_REGS): Increase to account for all CP0 registers.
(REGISTER_NAMES): Add empty names for CP0 registers.
(FIRST_EMBED_REGNUM, LAST_EMBED_REGNUM): Adjust.
(PRID_REGNUM): New macro.
print_scalar_formatted rather than duplicating all the
CC_HAS_LONG_LONG and so on.
(mips_push_dummy_frame): Use read_register_gen rather than using
read_register and then putting it back in target format with
store_unsigned_integer. If registers are more than 4 bytes, give
an error rather than have some registers overwrite other
registers.
#if 0 unused include of opcode/mips.h.
alpha and irix. The _sigtramp case has to be handled properly
in the tdep files if we have no ecoff debugging info.
* alpha-tdep.c (alpha_frame_saved_pc, alpha_frame_chain),
mips-tdep.c (mips_frame_saved_pc): Handle signal handler frames
without PC_REGNUM kludge.
* mdebugread.c (fixup_sigtramp), mips-tdep.c (read_next_frame_reg):
Clean up handling of mips sigtramp frames, improve comments.
* configure.in (mips-sgi-irix5*): New host and target. Use irix5
for both.
* config/mips/irix5.mh, config/mips/irix5.mt,
config/mips/xm-irix5.h, config/mips/nm-irix5.h,
config/mips/tm-irix5.h, irix5-nat.c: New files for Irix 5 support.
* mdebugread.c: New file, split out of mipsread.c. Added
elfmdebug_build_psymtabs routine. Added some checks on external
symbols. Changed code to keep ecoff_debug_info and
ecoff_debug_swap structs in the psymtab and in global pointers
rather than retrieving them from the bfd. Also changed to keep
the pending list with the psymtab rather than the objfile (each
psymtab for a single objfile points to the same pending list).
* mipsread.c: Bulk of file moved into mdebugread.c, leaving just
the sym_fns.
* Makefile.in (SFILES): Added mdebugread.c.
(OBS): Added mdebugread.o.
(mdebugread.o): New target.
* symfile.h: Declare mdebug_build_psymtabs and
elfmdebug_build_psymtabs.
* elfread.c (struct elfinfo): Added mdebugsect field.
(elf_locate_sections): Remember location of .mdebug section.
(elf_symfile_read): Call elfmdebug_build_psymtabs on .mdebug
section.
* infrun.c (AT_FUNCTION_START): Set to 0 if not already defined.
(wait_for_inferior): Use AT_FUNCTION_START if it is defined to see
if PC is at the start of a function.
* mips-tdep.c (read_next_frame_reg): Use SIGFRAME_REG_SIZE, and
give it a default definition.
(mips_skip_prologue): Skip instructions which initialize $gp
register.
(in_sigtramp): New procedure, moved in from mipsread.c.
* config/mips/tm-mips.h: Declare in_sigtramp.
registers mentioned in the proc_desc have been saved. This
generalizes mips_in_lenient_prologue in the sense that we keep
searching until we've found saves for all the registers, not just
look for a "lenient prologue" pattern.
* mips-tdep.c: #if 0 lenient prologue code.
* mips-tdep.c (heuristic_proc_desc): Don't assume a host short
is 16 bits.
Change all references to stdout/stderr to gdb_stdout/gdb_stderr.
Replace all calls to stdio output functions with calls to
corresponding _unfiltered functions (`fprintf_unfiltered')
Replaced calls to fopen for output to gdb_fopen.
Added sufficient goo to utils.c and defs.h to make the above work.
The net effect is that stdio output functions are only directly used
in utils.c. Elsewhere, the _unfiltered and _filtered functions and
GDB_FILE type are used.
In the near future, GDB_FILE will stop being equivalant to FILE.
The semantics of some commands has changed in a very subtle way:
called in the right context, they may cause new occurences of
prompt_for_continue() behavior. The testsuite doesn't notice anything
like this, though.
Please respect this change by not reintroducing stdio output
dependencies in the main body of gdb code. All output from commands
should go to a GDB_FILE.
Target-specific code can still use stdio directly to communicate with
targets.
the pushing of the struct return address is already handled in
mips_push_arguments.
* mips-tdep.c (reinit_frame_cache_sfunc): Fix typo in prototype
declaration.
* mipsread.c (parse_symbol, parse_type, upgrade_type): Add more
sanity checks for corrupt symbol entries to avoid core dumps
reported by benson@odi.com. Obviously Ultrix 4.3A cc now has
the same problems as the OSF/1 alpha cc.
* mipsread.c (parse_lines): Iterate over the range of the compressed
line number entries, the old iteration sometimes failed to stop
and wrote past the end of the LINETABLE. Add sanity check to avoid
the same problem in case the line number info is corrupt.
* mipsread.c (parse_procedure): Adjust pdr for alpha __sigtramp.
* mipsread.c (parse_external, parse_partial_symbols): Ignore stNil
symbols that are produced for statics in .o files and stLocal symbols
that are produced for every section in OSF/1 dynamically linked
executables.
* mipsread.c (psymtab_to_symtab_1): Put out `undefined symbols'
warning only under `verbose on' as there are many undefined symbols
in a dynamically linked executable.
restrictions for mips hosts.
* config/mips/{xm-irix3.h, xm-mips.h, xm-news-mips.h, xm-riscos.h}:
Use it.
* mips-tdep.c (init_extra_frame_info): Do not check for
mips_in_lenient_prologue if it is a dummy frame.
Use read_memory_nobpt.
(is_delayed, mips_in_lenient_prologue): New functions.
(init_extra_frame_info): If in the prologue, don't use saved registers.
* config/mips/tm-mips.h: Declare mips_skip_prologue.
({extract,store}_{signed_integer,unsigned_integer,address}):
New routines to replace SWAP_TARGET_AND_HOST.
All over: All uses of SWAP_TARGET_AND_HOST on integers replaced.
inferior_fp_registers by reading them from the inferior before
modifying and writing them back.
Fixes unexplainable inferior FP exceptions after calls to the inferior
or setting of floating point registers.
* mips-tdep.c (mips_skip_prologue): Skip move of argument register
to register which is generated by gcc-2.4.
the necessary bits.
* findvar.c (value_from_register): Fix uninitialized first_addr
which caused problems with assignment of doubles to register variables
on some targets.
* mipsread.c: Remove TM_FILE_OVERRIDE, include tm.h and provide the
missing mips definitions if necessary.
Fix handling of double register variables for mips targets and big
endian hosts. These patches are from Paul Flinders <ptf@delcam.co.uk>.
* config/mips/tm-mips.h: Increase MAX_REGISTER_{RAW,VIRTUAL}_SIZE to
8 bytes for doubles.
* config/mips/tm-mips.h (REGISTER_CONVERT_TO_TYPE): New macro for
conversion of type held in multiple registers to host format.
* config/mips/tm-mips.h (REGISTER_CONVERT_FROM_TYPE): New macro,
companion to REGISTER_CONVERT_TO_TYPE.
* config/mips/tm-mips.h (EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE):
Convert to function calls.
* config/mips/tm-mips.h (FIX_CALL_DUMMY): New code for big endian
mips targets.
* mips-tdep.c (mips_print_register): Raw buffer now needs just
MAX_REGISTER_RAW_SIZE bytes.
* mips-tdep.c (mips_print_register): Use REGISTER_CONVERT_TO_TYPE
(if defined) for doubles.
* mips-tdep.c: (mips_extract_return_value, mips_store_return_value):
New functions, take care of REGISTER_CONVERT_TO/FROM_TYPE.
* valops.c (value_assign): Use REGISTER_CONVERT_TO_TYPE if
defined.
* findvar.c (value_from_register): Use REGISTER_CONVERT_TO_TYPE if
defined.
(heuristic_proc_start): use heuristic_fence_post, print better
warnings, but only if not stop_soon_quietly.
(_initialize_mips_tdep): add_set_cmd for heuristic-fence-post.
* breakpoint.c (enable_breakpoint): Don't enable watchpoint if it
went out of scope.
* exec.c (exec_close): Fix storage leak.
* exec.c (exec_file_command): Make sure that bfd doesn't realign the
output sections when patching an executable.
* mips-nat.c (store_inferior_registers): Use REGISTER_PTRACE_ADDR
when writing all registers.
* mips-tdep.c (mips_push_dummy_frame): Save floating point registers
at the right offset in the dummy frame.
* mipsread.c (psymtab_to_symtab_1): Do not complain for stProc,
stStaticProc and stEnd symbols as they are generated by gcc-2.x.
* mipsread.c (mipscoff_new_init): Initialize stabsread and buildsym.
protocol.
* config/idt.mt: New file; uses remote-mips.c
* configure.in (mips-idt-ecoff): New target; uses idt.mt.
* mips-tdep.c (mips_fpu): New variable; controls use of MIPS
floating point coprocessor.
(mips_push_dummy_frame): If not mips_fpu, don't save floating
point registers.
(mips_pop_frame): If not mips_fpu, don't restore floating point
registers.
(_initialize_mips_tdep): New function; let the user reset mips_fpu
variable.
* tm-mips.h (EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE): If not
mips_fpu, don't use fp0 as floating point return register.
(FIX_CALL_DUMMY): If not mips_fpu, don't save floating point
registers.
Also added remote-mips.c to .Sanitize file.
* doc/gdbint.texinfo: Update GET_LONGJMP_TARGET, L_SET doc.
* irix4-nat.c, mips-nat.c (JB_ELEMENT_SIZE, get_longjmp_target):
Move from mips-tdep.c and tm-{irix3,mips}.h.
* mips-nat.c: Remove a bunch of code that was ifdef'd out of
native MIPS ports.
* nm-irix3.h, nm-mips.h (GET_LONGJMP_TARGET): Move from tm-irix3.h
and tm-mips.h.
* ultra3-nat.c (register_addr): Move from ultra3-xdep.c.
(fetch_core_registers): Fix bfd_seek arguments.
symbol. #define MIPS_EFI_SYMBOL_NAME instead. Use different
value so that demangler won't be invoked. This greatly speeds up
stepping.
* mips-tdep.c (mips_pop_frame): Rewrite handling of
linked_proc_info so that it properly deallocates the appropriate
item after it is done with it instead of before.
* Don't pass bogus frame pointer to create_new_frame(). Just
leave it as zero so that lower level code will figure out the
correct value.
Fix from Jim Williams.
* stack.c (return_command): Evaluate expression *before* popping
off the stack frames! Fix inspired by Jim Williams.
(up_silently_command, down_silently_command): No sel frame is error.
* defs.h (memcpy, memset): Conditionalize decls on
#ifndef MEM_FNS_DECLARED, since DECstation differs.
(alloca): Break out the STDC and non-STDC alloca cases, to make
it work on old preprocessors as well as "picky ANSI" ones.
* xm-mips.h (memcpy, memset): Declare, and set MEM_FNS_DECLARED.
* mips-tdep.c (heuristic_proc_start): Zero arg produces zero.
* utils.c (fputs_demangled): Rename SLOP since DECstation system
header files define it!
basis. See comments in objfiles.h and details in ChangeLog. Also remove
redundant definitions of FRAME_CHAIN_VALID from most of the tm-* files and
use a default definition in frame.h.
* All GDB files that #include defs.h: Removed stdio.h.
(defs.h): #include stdio.h.
This has been tested by building GDBs for all targets hosted on Sun4.
None of the build problems were related to stdio.h inclusion. (n.b.
many configurations don't build for other reasons.)
* blockframe.c (get_prev_frame_info): If FRAME_CHAIN_COMBINE
returns 0, there is no previous frame.
* breakpoint.c (commands_command): If !from_tty, don't call
input_from_terminal_p().
* dbxread.c (record_misc_function): Speed up slightly.
(compare_psymbols): Ditto.
* infcmd.c (do_registers_info): Take a second argument to
determine whether to print float registers. "info registers"
does not do so anymore. "info all-registers" does, now.
* mips-tdep.c, pyr-tdep.c (xxx_do_registers_info): Take second
arg and ignore it.
* tm-mips.h, tm-pyr.h (DO_REGISTERS_INFO): Pass second arg.
* inflow.c (initialize_inflow): Set tflags_ours correctly.