* [commit] mn10300_push_call -- handle structs
@ 2005-04-02 0:41 Michael Snyder
2005-04-02 1:18 ` Daniel Jacobowitz
0 siblings, 1 reply; 3+ messages in thread
From: Michael Snyder @ 2005-04-02 0:41 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 0 bytes --]
[-- Attachment #2: structs --]
[-- Type: text/plain, Size: 5226 bytes --]
2005-04-01 Michael Snyder <msnyder@redhat.com>
* mn10300-tdep.c (mn10300_frame_unwind_cache): Use
find_partial_func instead of unwind_pc to identify frame.
(mn10300_push_dummy_call): Handle struct args, struct_return.
Index: mn10300-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mn10300-tdep.c,v
retrieving revision 1.120
diff -p -r1.120 mn10300-tdep.c
*** mn10300-tdep.c 2 Apr 2005 00:08:14 -0000 1.120
--- mn10300-tdep.c 2 Apr 2005 00:38:07 -0000
*************** mn10300_frame_unwind_cache (struct frame
*** 313,319 ****
void **this_prologue_cache)
{
struct trad_frame_cache *cache;
! CORE_ADDR pc;
if (*this_prologue_cache)
return (*this_prologue_cache);
--- 313,319 ----
void **this_prologue_cache)
{
struct trad_frame_cache *cache;
! CORE_ADDR pc, start, end;
if (*this_prologue_cache)
return (*this_prologue_cache);
*************** mn10300_frame_unwind_cache (struct frame
*** 321,330 ****
cache = trad_frame_cache_zalloc (next_frame);
pc = gdbarch_unwind_pc (current_gdbarch, next_frame);
mn10300_analyze_prologue (next_frame, (void **) &cache, pc);
!
! trad_frame_set_id (cache,
! frame_id_build (trad_frame_get_this_base (cache),
! frame_func_unwind (next_frame)));
(*this_prologue_cache) = cache;
return cache;
--- 321,334 ----
cache = trad_frame_cache_zalloc (next_frame);
pc = gdbarch_unwind_pc (current_gdbarch, next_frame);
mn10300_analyze_prologue (next_frame, (void **) &cache, pc);
! if (find_pc_partial_function (pc, NULL, &start, &end))
! trad_frame_set_id (cache,
! frame_id_build (trad_frame_get_this_base (cache),
! start));
! else
! trad_frame_set_id (cache,
! frame_id_build (trad_frame_get_this_base (cache),
! frame_func_unwind (next_frame)));
(*this_prologue_cache) = cache;
return cache;
*************** mn10300_push_dummy_call (struct gdbarch
*** 445,459 ****
CORE_ADDR struct_addr)
{
const int push_size = register_size (gdbarch, E_PC_REGNUM);
! int regs_used = struct_return ? 1 : 0;
int len, arg_len;
int stack_offset = 0;
int argnum;
! char *val;
/* FIXME temp, don't handle struct args at all. */
if (struct_return)
error ("Target doesn't handle struct return");
/* This should be a nop, but align the stack just in case something
went wrong. Stacks are four byte aligned on the mn10300. */
--- 449,465 ----
CORE_ADDR struct_addr)
{
const int push_size = register_size (gdbarch, E_PC_REGNUM);
! int regs_used;
int len, arg_len;
int stack_offset = 0;
int argnum;
! char *val, valbuf[MAX_REGISTER_SIZE];
+ #if 0
/* FIXME temp, don't handle struct args at all. */
if (struct_return)
error ("Target doesn't handle struct return");
+ #endif
/* This should be a nop, but align the stack just in case something
went wrong. Stacks are four byte aligned on the mn10300. */
*************** mn10300_push_dummy_call (struct gdbarch
*** 463,473 ****
--- 469,482 ----
XXX This doesn't appear to handle pass-by-invisible reference
arguments. */
+ regs_used = struct_return ? 1 : 0;
for (len = 0, argnum = 0; argnum < nargs; argnum++)
{
arg_len = (TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3;
+ #if 0
if (TYPE_CODE (value_type (args[argnum])) == TYPE_CODE_STRUCT)
error ("Target does not handle struct args");
+ #endif
while (regs_used < 2 && arg_len > 0)
{
regs_used++;
*************** mn10300_push_dummy_call (struct gdbarch
*** 479,496 ****
/* Allocate stack space. */
sp -= len;
! regs_used = struct_return ? 1 : 0;
/* Push all arguments onto the stack. */
for (argnum = 0; argnum < nargs; argnum++)
{
! /* FIXME what about structs? */
! arg_len = TYPE_LENGTH (value_type (*args));
! val = (char *) value_contents (*args);
while (regs_used < 2 && arg_len > 0)
{
! write_register (regs_used, extract_unsigned_integer (val,
! push_size));
val += push_size;
arg_len -= push_size;
regs_used++;
--- 488,524 ----
/* Allocate stack space. */
sp -= len;
! if (struct_return)
! {
! regs_used = 1;
! write_register (E_D0_REGNUM, struct_addr);
! }
! else
! regs_used = 0;
!
/* Push all arguments onto the stack. */
for (argnum = 0; argnum < nargs; argnum++)
{
! /* FIXME what about structs? Unions? */
! if (TYPE_CODE (value_type (*args)) == TYPE_CODE_STRUCT
! && TYPE_LENGTH (value_type (*args)) > 8)
! {
! /* Change to pointer-to-type. */
! arg_len = push_size;
! store_unsigned_integer (valbuf, push_size,
! VALUE_ADDRESS (*args));
! val = &valbuf[0];
! }
! else
! {
! arg_len = TYPE_LENGTH (value_type (*args));
! val = (char *) value_contents (*args);
! }
while (regs_used < 2 && arg_len > 0)
{
! write_register (regs_used,
! extract_unsigned_integer (val, push_size));
val += push_size;
arg_len -= push_size;
regs_used++;
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [commit] mn10300_push_call -- handle structs
2005-04-02 0:41 [commit] mn10300_push_call -- handle structs Michael Snyder
@ 2005-04-02 1:18 ` Daniel Jacobowitz
2005-04-02 2:20 ` Michael Snyder
0 siblings, 1 reply; 3+ messages in thread
From: Daniel Jacobowitz @ 2005-04-02 1:18 UTC (permalink / raw)
To: Michael Snyder; +Cc: gdb-patches
On Fri, Apr 01, 2005 at 04:41:27PM -0800, Michael Snyder wrote:
> + #if 0
> /* FIXME temp, don't handle struct args at all. */
> if (struct_return)
> error ("Target doesn't handle struct return");
> + #endif
Please don't add new #if 0 code - if it's dead, remove it.
--
Daniel Jacobowitz
CodeSourcery, LLC
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [commit] mn10300_push_call -- handle structs
2005-04-02 1:18 ` Daniel Jacobowitz
@ 2005-04-02 2:20 ` Michael Snyder
0 siblings, 0 replies; 3+ messages in thread
From: Michael Snyder @ 2005-04-02 2:20 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
Daniel Jacobowitz wrote:
> On Fri, Apr 01, 2005 at 04:41:27PM -0800, Michael Snyder wrote:
>
>>+ #if 0
>> /* FIXME temp, don't handle struct args at all. */
>> if (struct_return)
>> error ("Target doesn't handle struct return");
>>+ #endif
>
>
> Please don't add new #if 0 code - if it's dead, remove it.
>
ok.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-04-02 2:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-04-02 0:41 [commit] mn10300_push_call -- handle structs Michael Snyder
2005-04-02 1:18 ` Daniel Jacobowitz
2005-04-02 2:20 ` Michael Snyder
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox