From f9dd88b41eb9e9315131ec5669b7eae3e1c9a015 Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Mon, 28 Jun 1993 22:35:18 +0000 Subject: [PATCH] * config/pa/xm-pa.h: New file. * config/pa/xm-hppa{b,h}.h: Include it. --- gdb/config/pa/.Sanitize | 1 + gdb/config/pa/xm-hppab.h | 2 ++ gdb/config/pa/xm-hppah.h | 2 ++ gdb/config/pa/xm-pa.h | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+) create mode 100644 gdb/config/pa/xm-pa.h diff --git a/gdb/config/pa/.Sanitize b/gdb/config/pa/.Sanitize index 77c2743610c..90fbe2dea58 100644 --- a/gdb/config/pa/.Sanitize +++ b/gdb/config/pa/.Sanitize @@ -32,6 +32,7 @@ tm-hppab.h tm-hppah.h xm-hppab.h xm-hppah.h +xm-pa.h Things-to-lose: diff --git a/gdb/config/pa/xm-hppab.h b/gdb/config/pa/xm-hppab.h index a98f48d5d1d..b215d790135 100644 --- a/gdb/config/pa/xm-hppab.h +++ b/gdb/config/pa/xm-hppab.h @@ -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 file. */ #undef INT_MIN diff --git a/gdb/config/pa/xm-hppah.h b/gdb/config/pa/xm-hppah.h index 9b647245930..92092dfc3a0 100644 --- a/gdb/config/pa/xm-hppah.h +++ b/gdb/config/pa/xm-hppah.h @@ -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 file. */ #undef INT_MIN diff --git a/gdb/config/pa/xm-pa.h b/gdb/config/pa/xm-pa.h new file mode 100644 index 00000000000..2a507258629 --- /dev/null +++ b/gdb/config/pa/xm-pa.h @@ -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) -- 2.30.2