On 27 December 2015 at 20:43, Michael Davidsaver <mdavidsa...@gmail.com> wrote: > On 12/17/2015 08:25 AM, Peter Maydell wrote: >> On 3 December 2015 at 00:18, Michael Davidsaver <mdavidsa...@gmail.com> >> wrote: >>> ... >>> +static >>> +uint32_t arm_v7m_load_vector(ARMCPU *cpu) >>> + >>> +{ >>> + CPUState *cs = &cpu->parent_obj; >> This isn't the right way to cast to the base class of a QOM object. >> You want: >> CPUState *cs = CPU(cpu); > > from cpu.h > >> /* Since this macro is used a lot in hot code paths and in conjunction >> with >> * FooCPU *foo_env_get_cpu(), we deviate from usual QOM practice by using >> * an unchecked cast. >> */ >> #define CPU(obj) ((CPUState *)(obj)) > > Given the present definition of CPU() this change seems like a step > backwards in terms of safety as mis-use won't be caught at compile or > runtime. I'll change it anyway.
The idea is that all code should use the QOM cast macros. At the moment we have a special case for CPU() because it's a hot path; in future we might be able to improve the speed of the cast checking to the point where we can reinstate it. thanks -- PMM