"-device ivshmem" makes pci_ivshmem_init() pass null pointer to shm_open(). Suspect the "Must specify 'chardev' or 'shm' to ivshmem" error should be fatal.
By the way, that error message can be misleading: the chardev must be "unix:" to be recognized. For instance, "-chardev null,id=chr0 -device ivshmem,chardev=chr0" isn't.