2001-12-04 Jackie Smith Cashion <jsmith@redhat.com>
* MAINTAINERS (write-after-approval): Add self. * d10v-tdep.c (d10v_gdbarch_init): Change size of long long to 8 bytes. From Andrew Cagney <cagney@redhat.com>: * d10v-tdep.c (d10v_frame_chain_valid): Check if the caller's PC is in the entry function. (d10v_use_struct_convention): Store multi-field struct and union return values on the stack.
This commit is contained in:
parent
7666f43c32
commit
02da620696
3 changed files with 42 additions and 3 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
2001-12-04 Jackie Smith Cashion <jsmith@redhat.com>
|
||||||
|
|
||||||
|
* MAINTAINERS (write-after-approval): Add self.
|
||||||
|
|
||||||
|
* d10v-tdep.c (d10v_gdbarch_init): Change size of long long to 8 bytes.
|
||||||
|
|
||||||
|
From Andrew Cagney <cagney@redhat.com>:
|
||||||
|
* d10v-tdep.c (d10v_frame_chain_valid): Check if the caller's PC
|
||||||
|
is in the entry function.
|
||||||
|
(d10v_use_struct_convention): Store multi-field struct and union
|
||||||
|
return values on the stack.
|
||||||
|
|
||||||
2001-12-04 Jim Blandy <jimb@redhat.com>
|
2001-12-04 Jim Blandy <jimb@redhat.com>
|
||||||
|
|
||||||
* s390-tdep.c (s390_get_frame_info): Recognize spills of reg
|
* s390-tdep.c (s390_get_frame_info): Recognize spills of reg
|
||||||
|
|
|
@ -349,6 +349,7 @@ Keith Seitz keiths@redhat.com
|
||||||
Jiri Smid smid@suse.cz
|
Jiri Smid smid@suse.cz
|
||||||
David Smith dsmith@redhat.com
|
David Smith dsmith@redhat.com
|
||||||
Stephen P. Smith ischis2@home.com
|
Stephen P. Smith ischis2@home.com
|
||||||
|
Jackie Smith Cashion jsmith@redhat.com
|
||||||
Gary Thomas gthomas@redhat.com
|
Gary Thomas gthomas@redhat.com
|
||||||
Tom Tromey tromey@redhat.com
|
Tom Tromey tromey@redhat.com
|
||||||
Corinna Vinschen vinschen@redhat.com
|
Corinna Vinschen vinschen@redhat.com
|
||||||
|
|
|
@ -103,7 +103,9 @@ static void do_d10v_pop_frame (struct frame_info *fi);
|
||||||
static int
|
static int
|
||||||
d10v_frame_chain_valid (CORE_ADDR chain, struct frame_info *frame)
|
d10v_frame_chain_valid (CORE_ADDR chain, struct frame_info *frame)
|
||||||
{
|
{
|
||||||
return ((chain) != 0 && (frame) != 0 && (frame)->pc > IMEM_START);
|
return ((chain) != 0 && (frame) != 0
|
||||||
|
&& (frame)->pc > IMEM_START
|
||||||
|
&& !inside_entry_file (FRAME_SAVED_PC (frame)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static CORE_ADDR
|
static CORE_ADDR
|
||||||
|
@ -122,7 +124,31 @@ d10v_stack_align (CORE_ADDR len)
|
||||||
static int
|
static int
|
||||||
d10v_use_struct_convention (int gcc_p, struct type *type)
|
d10v_use_struct_convention (int gcc_p, struct type *type)
|
||||||
{
|
{
|
||||||
return (TYPE_LENGTH (type) > 8);
|
long alignment;
|
||||||
|
int i;
|
||||||
|
/* The d10v only passes a struct in a register when that structure
|
||||||
|
has an alignment that matches the size of a register. */
|
||||||
|
/* If the structure doesn't fit in 4 registers, put it on the
|
||||||
|
stack. */
|
||||||
|
if (TYPE_LENGTH (type) > 8)
|
||||||
|
return 1;
|
||||||
|
/* If the struct contains only one field, don't put it on the stack
|
||||||
|
- gcc can fit it in one or more registers. */
|
||||||
|
if (TYPE_NFIELDS (type) == 1)
|
||||||
|
return 0;
|
||||||
|
alignment = TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
|
||||||
|
for (i = 1; i < TYPE_NFIELDS (type); i++)
|
||||||
|
{
|
||||||
|
/* If the alignment changes, just assume it goes on the
|
||||||
|
stack. */
|
||||||
|
if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, i)) != alignment)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* If the alignment is suitable for the d10v's 16 bit registers,
|
||||||
|
don't put it on the stack. */
|
||||||
|
if (alignment == 2 || alignment == 4)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1498,7 +1524,7 @@ d10v_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||||
set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
|
set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
|
||||||
set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
|
set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
|
||||||
set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
|
set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
|
||||||
set_gdbarch_long_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
|
set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
|
||||||
/* NOTE: The d10v as a 32 bit ``float'' and ``double''. ``long
|
/* NOTE: The d10v as a 32 bit ``float'' and ``double''. ``long
|
||||||
double'' is 64 bits. */
|
double'' is 64 bits. */
|
||||||
set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
|
set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
|
||||||
|
|
Loading…
Add table
Reference in a new issue