This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [commit] infcall.c cleanup - explict bp_addr variable


Andrew Cagney <ac131313@redhat.com> writes:

|> @@ -649,7 +663,13 @@
|>         return-address register as appropriate.  Formerly this has been
|>         done in PUSH_ARGUMENTS, but that's overloading its
|>         functionality a bit, so I'm making it explicit to do it here.  */
|> -    sp = DEPRECATED_PUSH_RETURN_ADDRESS (real_pc, sp);
|> +    /* NOTE: cagney/2003-04-22: The first parameter ("real_pc") has
|> +       been replaced with zero, it turns out that no implementation
|> +       used that parameter.  This occured because the value being

This is obviously wrong.  See ia64_push_return_address.  Fixes PR1256 and
most testsuite failures (there are a few new failures of things that
weren't tested before, especially backtraces from call dummies are
broken).

In a word, outch! (I missed that).


static CORE_ADDR
ia64_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
{
  CORE_ADDR global_pointer = FIND_GLOBAL_POINTER (pc);

  if (global_pointer != 0)
    write_register (IA64_GR1_REGNUM, global_pointer);

  write_register (IA64_BR0_REGNUM, CALL_DUMMY_ADDRESS ());
  return sp;
}

Does, instead, a s/push_arguments/push_dummy_call/ and move the above code to push_dummy_call (PC -> FUNC_ADDR, CALL_DUMMY_ADDRESS -> BP_ADDR) work?


Andrew


Andreas.

2003-06-27 Andreas Schwab <schwab@suse.de>

	* infcall.c (call_function_by_hand): Partially revert change of
	2003-04-22: do pass real_pc to DEPRECATED_PUSH_RETURN_ADDRESS.

--- gdb/infcall.c.~1.17.~ 2003-06-20 11:44:27.000000000 +0200
+++ gdb/infcall.c 2003-06-27 21:58:41.000000000 +0200
@@ -768,13 +768,7 @@ You must use a pointer to function type return-address register as appropriate. Formerly this has been
done in PUSH_ARGUMENTS, but that's overloading its
functionality a bit, so I'm making it explicit to do it here. */
- /* NOTE: cagney/2003-04-22: The first parameter ("real_pc") has
- been replaced with zero, it turns out that no implementation
- used that parameter. This occured because the value being
- supplied - the address of the called function's entry point
- instead of the address of the breakpoint that the called
- function should return to - wasn't useful. */
- sp = DEPRECATED_PUSH_RETURN_ADDRESS (0, sp);
+ sp = DEPRECATED_PUSH_RETURN_ADDRESS (real_pc, sp);
/* NOTE: cagney/2003-03-23: Diable this code when there is a
push_dummy_call() method. Since that method will have already


-- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]