From 2df3850c7bfea139c5baf6c2911c11456a1b32e9 Mon Sep 17 00:00:00 2001 From: Jason Molenda Date: Tue, 12 Oct 1999 04:37:53 +0000 Subject: import gdb-1999-10-11 snapshot --- gdb/valops.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'gdb/valops.c') diff --git a/gdb/valops.c b/gdb/valops.c index ea61789..d51b67d 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -1061,7 +1061,12 @@ push_bytes (sp, buffer, len) return sp; } -/* Push onto the stack the specified value VALUE. */ +#ifndef PARM_BOUNDARY +#define PARM_BOUNDARY (0) +#endif + +/* Push onto the stack the specified value VALUE. Pad it correctly for + it to be an argument to a function. */ static CORE_ADDR value_push (sp, arg) @@ -1069,18 +1074,31 @@ value_push (sp, arg) value_ptr arg; { register int len = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (arg)); + register int container_len; + register int offset; + + /* How big is the container we're going to put this value in? */ + if (PARM_BOUNDARY) + container_len = ((len + PARM_BOUNDARY / TARGET_CHAR_BIT - 1) + & ~(PARM_BOUNDARY / TARGET_CHAR_BIT - 1)); + + /* Are we going to put it at the high or low end of the container? */ + if (TARGET_BYTE_ORDER == BIG_ENDIAN) + offset = container_len - len; + else + offset = 0; if (INNER_THAN (1, 2)) { /* stack grows downward */ - sp -= len; - write_memory (sp, VALUE_CONTENTS_ALL (arg), len); + sp -= container_len; + write_memory (sp + offset, VALUE_CONTENTS_ALL (arg), len); } else { /* stack grows upward */ - write_memory (sp, VALUE_CONTENTS_ALL (arg), len); - sp += len; + write_memory (sp + offset, VALUE_CONTENTS_ALL (arg), len); + sp += container_len; } return sp; -- cgit v1.1