summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog35
-rw-r--r--gdb/rs6000-tdep.c29
-rw-r--r--gdb/values.c16
-rw-r--r--gdb/xcoffread.c33
4 files changed, 61 insertions, 52 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 70860ebe500..3abb0956bba 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,38 @@
+Sat Oct 15 03:43:00 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * eval.c (evaluate_subexp): Make fnptr a LONGEST instead
+ of using longest_to_int.
+
+ * infcmd.c (run_stack_dummy): Reinstate set_current_frame call,
+ mips and alpha targets need the real breakpoint pc for
+ creating the breakpoint frame.
+
+ * stack.c (return_command): Cast return value to the return
+ type of the function from which we return.
+ * values.c (set_return_value): Pass VALUE_CONTENTS unmodified
+ to STORE_RETURN_VALUE.
+
+ * symtab.c (lookup_symbol): Remove search for `static mangled
+ symbols', the search for `static symbols' already looks for
+ mangled and demangled symbols via lookup_block_symbol.
+
+ * valarith.c (value_binop): Use ANSI C arithmetic conversions
+ when performing integral evaluations, implement BINOP_EQUAL and
+ BINOP_LESS.
+ (value_equal, value_less): Use value_binop to perform the
+ comparison if both operands have TYPE_CODE_INT.
+
+ * rs6000-tdep.c (pop_frame): Make sure all registers are valid,
+ as they are written back later. Handle sp restore for frameless
+ functions. Use fdata.nosavedpc instead of fdata.frameless to
+ determine if the pc has been saved.
+ (function_frame_info): Handle `mr r31,r1', which is generated by
+ gcc-2.6, as a synonym for `oril r31,r1,0'.
+ (skip_trampoline_code): Handle shared library trampolines.
+ * xcoffread.c (read_xcoff_symtabs): Record XMC_GL symbols with
+ their real name. Enables setting of breakpoints in shared libraries
+ before the executable is run.
+
Fri Oct 14 19:39:47 1994 Rob Savoye <rob@darkstar.cygnus.com>
* monitor.h, remote-mon.c: Hack up to so the old ROM monitor
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index b5df530da52..757e1115dd1 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -1,5 +1,6 @@
/* Target-dependent code for GDB, the GNU debugger.
- Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
+ Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994
+ Free Software Foundation, Inc.
This file is part of GDB.
@@ -464,6 +465,9 @@ pop_frame ()
return;
}
+ /* Make sure that all registers are valid. */
+ read_register_bytes (0, NULL, REGISTER_BYTES);
+
/* figure out previous %pc value. If the function is frameless, it is
still in the link register, otherwise walk the frames and retrieve the
saved %pc value in the previous frame. */
@@ -471,8 +475,11 @@ pop_frame ()
addr = get_pc_function_start (fr->pc) + FUNCTION_START_OFFSET;
function_frame_info (addr, &fdata);
- prev_sp = read_memory_integer (sp, 4);
if (fdata.frameless)
+ prev_sp = sp;
+ else
+ prev_sp = read_memory_integer (sp, 4);
+ if (fdata.nosavedpc)
lr = read_register (LR_REGNUM);
else
lr = read_memory_integer (prev_sp+8, 4);
@@ -666,10 +673,12 @@ function_frame_info (pc, fdata)
fdata->frameless = 0;
}
- if (op == 0x603f0000) { /* oril r31, r1, 0x0 */
- fdata->alloca_reg = 31;
- fdata->frameless = 0;
- }
+ if (op == 0x603f0000 /* oril r31, r1, 0x0 */
+ || op == 0x7c3f0b78) /* mr r31, r1 */
+ {
+ fdata->alloca_reg = 31;
+ fdata->frameless = 0;
+ }
}
@@ -887,6 +896,8 @@ CORE_ADDR rs6000_struct_return_address;
/* Indirect function calls use a piece of trampoline code to do context
switching, i.e. to set the new TOC table. Skip such code if we are on
its first instruction (as when we have single-stepped to here).
+ Also skip shared library trampoline code (which is different from
+ indirect function call trampolines).
Result is desired PC to step until, or NULL if we are not in
trampoline code. */
@@ -895,6 +906,7 @@ skip_trampoline_code (pc)
CORE_ADDR pc;
{
register unsigned int ii, op;
+ CORE_ADDR solib_target_pc;
static unsigned trampoline_code[] = {
0x800b0000, /* l r0,0x0(r11) */
@@ -907,6 +919,11 @@ CORE_ADDR pc;
0
};
+ /* If pc is in a shared library trampoline, return its target. */
+ solib_target_pc = find_solib_trampoline_target (pc);
+ if (solib_target_pc)
+ return solib_target_pc;
+
for (ii=0; trampoline_code[ii]; ++ii) {
op = read_memory_integer (pc + (ii*4), 4);
if (op != trampoline_code [ii])
diff --git a/gdb/values.c b/gdb/values.c
index 916bf6f27ab..aa4a4f2090a 100644
--- a/gdb/values.c
+++ b/gdb/values.c
@@ -1466,8 +1466,6 @@ set_return_value (val)
value_ptr val;
{
register enum type_code code = TYPE_CODE (VALUE_TYPE (val));
- double dbuf;
- LONGEST lbuf;
if (code == TYPE_CODE_ERROR)
error ("Function return type unknown.");
@@ -1476,19 +1474,7 @@ set_return_value (val)
|| code == TYPE_CODE_UNION) /* FIXME, implement struct return. */
error ("GDB does not support specifying a struct or union return value.");
- /* FIXME, this is bogus. We don't know what the return conventions
- are, or how values should be promoted.... */
- if (code == TYPE_CODE_FLT)
- {
- dbuf = value_as_double (val);
-
- STORE_RETURN_VALUE (VALUE_TYPE (val), (char *)&dbuf);
- }
- else
- {
- lbuf = value_as_long (val);
- STORE_RETURN_VALUE (VALUE_TYPE (val), (char *)&lbuf);
- }
+ STORE_RETURN_VALUE (VALUE_TYPE (val), VALUE_CONTENTS (val));
}
void
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 5605131fdc5..0cb2f3a6e20 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -1,5 +1,5 @@
/* Read AIX xcoff symbol tables and convert to internal format, for GDB.
- Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
+ Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994
Free Software Foundation, Inc.
Derived from coffread.c, dbxread.c, and a lot of hacking.
Contributed by IBM Corporation.
@@ -1365,38 +1365,9 @@ read_xcoff_symtab (objfile, nsyms)
/* record trampoline code entries as mst_solib_trampoline symbol.
When we lookup mst symbols, we will choose mst_text over
mst_solib_trampoline. */
-
-#if 1
- /* After the implementation of incremental loading of shared
- libraries, we don't want to access trampoline entries. This
- approach has a consequence of the necessity to bring the whole
- shared library at first, in order do anything with it (putting
- breakpoints, using malloc, etc). On the other side, this is
- consistient with gdb's behaviour on a SUN platform. */
-
- /* FIXME: I think this code is using "<trampoline>" instead of
- the real name because there didn't used to be a way to prefer
- mst_text symbols over mst_solib_trampoline symbols (in fact,
- it was using mst_unknown because mst_solib_trampoline didn't
- exist yet). Using the real name would cause better output
- from print_address. */
-
- /* Recording this entry is necessary. Single stepping relies on
- this vector to get an idea about function address boundaries. */
-
- prim_record_minimal_symbol_and_info
- ("<trampoline>", cs->c_value, mst_solib_trampoline,
- (char *)NULL, cs->c_secnum, objfile);
-#else
-
- /* record trampoline code entries as mst_solib_trampoline symbol.
- When we lookup minimal symbols, we will choose mst_text over
- mst_solib_trampoline. */
-
RECORD_MINIMAL_SYMBOL (cs->c_name, cs->c_value,
mst_solib_trampoline,
- symname_alloced, objfile);
-#endif
+ symname_alloced, cs->c_secnum, objfile);
continue;
case XMC_DS: