From 517b49896ac8e19c24f896903ac9b0e4560de610 Mon Sep 17 00:00:00 2001 From: Zdenek Radouch Date: Fri, 15 Jan 1999 22:17:00 +0000 Subject: [PATCH] Changed ABI to match a GCC change. Structs passed by value are always passed using a pointer. --- gdb/ChangeLog | 6 ++++++ gdb/config/fr30/tm-fr30.h | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index df444e8..8e52b1f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ + +Fri Jan 15 17:11:48 EST 1999 Zdenek Radouch (radouch@cygnus.com) + + * config/fr30/tm-fr30.h: Changed ABI to match GCC change + (always use pointer for structs passed by value). + 1999-01-15 Fernando Nasser * target.h: added entry for target queries (to_query) diff --git a/gdb/config/fr30/tm-fr30.h b/gdb/config/fr30/tm-fr30.h index 3870f88..ea32792 100644 --- a/gdb/config/fr30/tm-fr30.h +++ b/gdb/config/fr30/tm-fr30.h @@ -213,9 +213,20 @@ fr30_push_arguments PARAMS ((int nargs, struct value **args, CORE_ADDR sp, #define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) -/* always pass struct by value as a pointer */ -/* XXX Z.R. GCC does not do that today */ +/* Fujitsu's ABI requires all structs to be passed using a pointer. + That is obviously not very efficient, so I am leaving the definitions + to make gdb work with GCC style struct passing, in case we decide + to go for better performance, rather than for compatibility with + Fujitsu (just change STRUCT_ALWAYS_BY_ADDR to 0) */ + +#define STRUCT_ALWAYS_BY_ADDR 1 + +#if(STRUCT_ALWAYS_BY_ADDR) +#define REG_STRUCT_HAS_ADDR(gcc_p,type) 1 +#else +/* more standard GCC (optimized) */ #define REG_STRUCT_HAS_ADDR(gcc_p,type) \ ((TYPE_LENGTH(type) > 4) && (TYPE_LENGTH(type) & 0x3)) +#endif /* alway return struct by value by input pointer */ #define USE_STRUCT_CONVENTION(GCC_P, TYPE) 1 -- 2.7.4