gdb: fix ia64-tdep.c build with g++ 4.8

When building with g++ 4.8, I get:

      CXX    ia64-tdep.o
    /home/smarchi/src/binutils-gdb/gdb/ia64-tdep.c:3862:1: error: could not convert '{ia64_allocate_new_rse_frame, ia64_store_argument_in_slot, ia64_set_function_addr}' from '<brace
-enclosed initializer list>' to 'const ia64_infcall_ops'
     };
     ^

This happens since commit 345bd07cce3 ("gdb: fix gdbarch_tdep ODR
violation"), which added default values for ia64_infcall_ops fields.  It
looks like g++ 4.8 doesn't like initializing the ia64_infcall_ops object
using the brace-enclosed initializer list when the ia64_infcall_ops
fields are assigned default values.

Later compilers don't have a problem with that, so I suppose that the
code is correct, but still, change it to make gcc 4.8 happy.  Don't
initialize the fields of ia64_infcall_ops directly, instead
default-initialize ia64_gdbarch_tdep::infcall_ops.

Change-Id: I35e3a61abd7b7bbcafe6cb207078c738c5266d76
This commit is contained in:
Simon Marchi
2021-11-18 16:35:31 -05:00
parent 629f88f80a
commit 89e1cf9cb4

View File

@ -216,18 +216,17 @@ struct ia64_infcall_ops
Should do nothing if this operation is not permitted by the OS. */ Should do nothing if this operation is not permitted by the OS. */
void (*allocate_new_rse_frame) (struct regcache *regcache, ULONGEST bsp, void (*allocate_new_rse_frame) (struct regcache *regcache, ULONGEST bsp,
int sof) = nullptr; int sof);
/* Store the argument stored in BUF into the appropriate location /* Store the argument stored in BUF into the appropriate location
given the BSP and the SLOTNUM. */ given the BSP and the SLOTNUM. */
void (*store_argument_in_slot) (struct regcache *regcache, CORE_ADDR bsp, void (*store_argument_in_slot) (struct regcache *regcache, CORE_ADDR bsp,
int slotnum, gdb_byte *buf) = nullptr; int slotnum, gdb_byte *buf);
/* For targets where we cannot call the function directly, store /* For targets where we cannot call the function directly, store
the address of the function we want to call at the location the address of the function we want to call at the location
expected by the calling sequence. */ expected by the calling sequence. */
void (*set_function_addr) (struct regcache *regcache, CORE_ADDR func_addr) void (*set_function_addr) (struct regcache *regcache, CORE_ADDR func_addr);
= nullptr;
}; };
struct ia64_gdbarch_tdep : gdbarch_tdep struct ia64_gdbarch_tdep : gdbarch_tdep
@ -255,7 +254,7 @@ struct ia64_gdbarch_tdep : gdbarch_tdep
/* ISA-specific data types. */ /* ISA-specific data types. */
struct type *ia64_ext_type = nullptr; struct type *ia64_ext_type = nullptr;
struct ia64_infcall_ops infcall_ops; struct ia64_infcall_ops infcall_ops {};
}; };
extern void ia64_write_pc (struct regcache *, CORE_ADDR); extern void ia64_write_pc (struct regcache *, CORE_ADDR);