* config/pa/xm-pa.h: New file.
authorJim Kingdon <jkingdon@engr.sgi.com>
Mon, 28 Jun 1993 22:35:18 +0000 (22:35 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Mon, 28 Jun 1993 22:35:18 +0000 (22:35 +0000)
* config/pa/xm-hppa{b,h}.h: Include it.

gdb/config/pa/.Sanitize
gdb/config/pa/xm-hppab.h
gdb/config/pa/xm-hppah.h
gdb/config/pa/xm-pa.h [new file with mode: 0644]

index 77c2743610cddb24af8ace08863421ad799834be..90fbe2dea58b3eaf21e82f45a42ca5062c1d4bd1 100644 (file)
@@ -32,6 +32,7 @@ tm-hppab.h
 tm-hppah.h
 xm-hppab.h
 xm-hppah.h
+xm-pa.h
 
 Things-to-lose:
 
index a98f48d5d1d32c26c47aeb0f9483096f3084a270..b215d7901354d5525d0619578be12f532ff5750e 100644 (file)
@@ -24,6 +24,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #define        HOST_BYTE_ORDER BIG_ENDIAN
 
+#include "pa/xm-pa.h"
+
 /* Avoid "INT_MIN redefined" warnings -- by defining it here, exactly
    the same as in the system <machine/machtypes.h> file.  */
 #undef  INT_MIN
index 9b647245930ca9af8ce264d51b9c1b43ce7de45c..92092dfc3a06e9fea344e8cb18acb6b0ed7ca091 100644 (file)
@@ -23,6 +23,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* Host is big-endian. */
 #define        HOST_BYTE_ORDER BIG_ENDIAN
 
+#include "pa/xm-pa.h"
+
 /* Avoid "INT_MIN redefined" warnings -- by defining it here, exactly
    the same as in the system <machine/machtypes.h> file.  */
 #undef  INT_MIN
diff --git a/gdb/config/pa/xm-pa.h b/gdb/config/pa/xm-pa.h
new file mode 100644 (file)
index 0000000..2a50725
--- /dev/null
@@ -0,0 +1,19 @@
+/* Definitions for all PA machines.  */
+
+#define MAKEVA_START(list) \
+  list->argindex = list->nargs * list->max_arg_size;
+
+/* In addition to having the arguments passed with the first ones at the
+   highest memory addresses, the pa also apparently aligns each argument
+   to the size of that argument.  This only works because the caller only
+   deals in 4 and 8 byte arguments.  If we wanted to handle args > 8 bytes,
+   we would have to pass the address by reference.  */
+#define MAKEVA_ARG(list, argaddr, argsize) \
+  list->argindex = (list->argindex - argsize) & ~ (argsize - 1); \
+  memcpy (&list->arg_bytes[list->argindex], argaddr, argsize);
+
+/* Apparently the address of the arglist is the address right after the args
+   (which is what you'd expect).  */
+#define MAKEVA_END(list) \
+  return (va_list) (list->arg_bytes \
+                   + list->nargs * list->max_arg_size)