Re: gdb-9.1 Fails to build: "invalid cast to abstract class type"

Simon Marchi
2020-05-21T14:12:29Z

On 2020-05-20 2:24 p.m., Chris Nicol wrote:
> Hello,
>
> I am trying to build a new version of the debugger on a SunBlade 100 running FreeBSD 12.1. This build fails with the following complaint:
>
>   CXX    sparc64-fbsd-nat.o
> In file included from ../../gdb/sparc64-fbsd-nat.c:26:
> ../../gdb/sparc-nat.h: In instantiation of 'target_xfer_status sparc_target<BaseTarget>::xfer_partial(target_object, const char*, gdb_byte*, const gdb_byte*, ULONGEST, ULONGEST, ULONGEST*) [with BaseTarget = fbsd_nat_target; gdb_byte = unsigned char; ULONGEST = long unsigned int]':
> ../../gdb/sparc-nat.h:67:27:   required from here
> ../../gdb/sparc-nat.h:78:12: error: invalid cast to abstract class type 'fbsd_nat_target'
>    78 |     return BaseTarget (object, annex, readbuf, writebuf,
>       |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    79 |          offset, len, xfered_len);
>       |          ~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ../../gdb/sparc64-fbsd-nat.c:24:
> ../../gdb/fbsd-nat.h:36:7: note:   because the following virtual functions are pure within 'fbsd_nat_target':
>    36 | class fbsd_nat_target : public inf_ptrace_target
>       |       ^~~~~~~~~~~~~~~
> In file included from ../../gdb/inf-ptrace.h:23,
>                  from ../../gdb/fbsd-nat.h:23,
>                  from ../../gdb/sparc64-fbsd-nat.c:24:
> ../../gdb/inf-child.h:42:8: note:     'virtual void inf_child_target::fetch_registers(regcache*, int)'
>    42 |   void fetch_registers (struct regcache *, int) override = 0;
>       |        ^~~~~~~~~~~~~~~
> ../../gdb/inf-child.h:43:8: note:     'virtual void inf_child_target::store_registers(regcache*, int)'
>    43 |   void store_registers (struct regcache *, int) override = 0;
>       |        ^~~~~~~~~~~~~~~
> gmake[2]: *** [Makefile:1656: sparc64-fbsd-nat.o] Error 1
> gmake[2]: Leaving directory '/usr/home/nicolc/gdb/gdb-9.1/build/gdb'
> gmake[1]: *** [Makefile:9563: all-gdb] Error 2
> gmake[1]: Leaving directory '/usr/home/nicolc/gdb/gdb-9.1/build'
> gmake: *** [Makefile:851: all] Error 2
>
>
> Can anyone provide insight into what is going on here, please? Thank you.
>
> Chris.
> --
> ______________________________________________________________________
>

This has been fixed by this commit:

https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=c6a42d11acf2d485bf70d76eda76fd005fcd6825

So if you use the master branch, you shouldn't see this error.

GDB 9.2 (the bugfix release of 9.1) will be out soon, we could probably
cherry-pick that commit in that branch if that helps you.

Simon