qemu/include
Peter Crosthwaite 0ab4c94c84 qom: Split out object and class caches
The object-cast and class-cast caches cannot be shared because class
caching is conditional on the target type not being an interface and
object caching is unconditional. Leads to a bug when a class cast
to an interface follows an object cast to the same interface type:

FooObject = FOO(obj);
FooClass = FOO_GET_CLASS(obj);

Where TYPE_FOO is an interface. The first (object) cast will be
successful and cache the casting result (i.e. TYPE_FOO will be cached).
The second (class) cast will then check the shared cast cache
and register a hit. The issue is, when a class cast hits in the cache
it just returns a pointer cast of the input class (i.e. the concrete
class).

When casting to an interface, the cast itself must return the
interface class, not the concrete class. The implementation of class
cast caching already ensures that the returned cast result is only
a pointer cast before caching. The object cast logic however does
not have this check.

Resolve by just splitting the object and class caches.

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Tested-by: Nathan Rossi <nathan.rossi@xilinx.com>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
2013-12-24 17:27:17 +01:00
..
block block: add opt_transfer_length to BlockLimits 2013-12-05 11:45:24 +01:00
disas Add moxie disassembler 2013-03-23 14:25:41 +00:00
exec roms: Flush icache when writing roms to guest memory 2013-12-20 01:58:03 +01:00
fpu softfloat: Add minNum() and maxNum() functions to softfloat. 2013-12-10 13:28:50 +00:00
hw qdev: Document that pointer properties kill device_add 2013-12-24 17:27:17 +01:00
migration vmstate: Add support for an array of ptimer_state * 2013-12-17 20:12:51 +00:00
monitor Merge remote-tracking branch 'kwolf/for-anthony' into staging 2013-09-03 12:32:46 -05:00
net net: disallow to specify multicast MAC address 2013-11-08 17:32:34 +01:00
qapi qemu-ga: Extend 'guest-info' command to expose flag 'success-response' 2013-10-10 14:52:37 -05:00
qemu host-utils: add clrsb32/64 - count leading redundant sign bits 2013-12-17 20:12:51 +00:00
qom qom: Split out object and class caches 2013-12-24 17:27:17 +01:00
sysemu device_tree: qemu_fdt_setprop: Rename val_array arg 2013-12-20 01:58:12 +01:00
ui include: add missing config-host.h include 2013-12-16 10:12:20 +01:00
config.h janitor: move remaining public headers to include/ 2012-12-19 08:32:46 +01:00
elf.h tcg-s390: Use qemu_getauxval in query_facilities 2013-11-30 07:45:30 +13:00
glib-compat.h glib: add a compatibility interface for g_timeout_add_seconds 2013-03-25 13:10:40 -05:00
qemu-common.h qmp: add interface blockdev-snapshot-delete-internal-sync 2013-09-12 10:12:47 +02:00
qemu-io.h qemu-io: Interface cleanup 2013-06-06 11:27:05 +02:00
trace.h build: some simplifications for "trace/Makefile.objs" 2013-01-12 18:42:51 +01:00