Message ID | 33183CC9F5247A488A2544077AF19020B03D9371@SZXEMA503-MBS.china.huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Sep 26, 2016 at 09:03:45AM +0000, Gonglei (Arei) wrote: > Hi Daniel, > > I'm coding cryptodev-vhost-user.c as a new cryptodev backend, > but the gcc report some linker errors: > > crypto/cryptodev-vhost-user.o: In function `qcrypto_cryptodev_vhost_crypto_cleanup': > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:87: undefined reference to `vhost_dev_cleanup' > crypto/cryptodev-vhost-user.o: In function `qcrypto_cryptodev_vhost_crypto_init': > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:126: undefined reference to `vhost_dev_init' > crypto/cryptodev-vhost-user.o: In function `qcrypto_cryptodev_vhost_user_opened': > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:187: undefined reference to `qemu_chr_find' > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:194: undefined reference to `qemu_chr_fe_claim_no_fail' > crypto/cryptodev-vhost-user.o: In function `qcrypto_cryptodev_vhost_user_event': > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:213: undefined reference to `qemu_chr_set_reconnect_time' > crypto/cryptodev-vhost-user.o: In function `qcrypto_cryptodev_vhost_user_init': > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:257: undefined reference to `qemu_chr_add_handlers' > crypto/cryptodev-vhost-user.o: In function `qcrypto_cryptodev_vhost_user_finalize': > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:353: undefined reference to `qemu_chr_add_handlers' > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:354: undefined reference to `qemu_chr_fe_release' > collect2: ld returned 1 exit status > make: *** [qemu-nbd] Error 1 > > Currently I only change the crypto/Makefile.objs: > > diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs > index b9ad26a..575f64e 100644 > --- a/crypto/Makefile.objs > +++ b/crypto/Makefile.objs > @@ -28,6 +28,7 @@ crypto-obj-y += block-qcow.o > crypto-obj-y += block-luks.o > crypto-obj-y += cryptodev.o > crypto-obj-y += cryptodev-builtin.o > +crypto-obj-y += cryptodev-vhost-user.o The $(crypto-obj-y) variable is intended to only contain general purpose crypto code, since it needs to be linked to all QEMU programs. Your cryptodev file is specific to system emulators, so must only be linked to the system emulator targets. Thus, it should not be added to the crypto-obj-y variable. It probably needs to be added to either common-obj-y or obj-y - I can't remember which is "best" Regards, Daniel
> -----Original Message----- > From: Daniel P. Berrange [mailto:berrange@redhat.com] > Sent: Monday, September 26, 2016 5:14 PM > To: Gonglei (Arei) > Cc: qemu-devel@nongnu.org > Subject: Re: Questions about gcc linker errors in crypto sub-directory > > On Mon, Sep 26, 2016 at 09:03:45AM +0000, Gonglei (Arei) wrote: > > Hi Daniel, > > > > I'm coding cryptodev-vhost-user.c as a new cryptodev backend, > > but the gcc report some linker errors: > > > > crypto/cryptodev-vhost-user.o: In function > `qcrypto_cryptodev_vhost_crypto_cleanup': > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:87: > undefined reference to `vhost_dev_cleanup' > > crypto/cryptodev-vhost-user.o: In function > `qcrypto_cryptodev_vhost_crypto_init': > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:126: > undefined reference to `vhost_dev_init' > > crypto/cryptodev-vhost-user.o: In function > `qcrypto_cryptodev_vhost_user_opened': > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:187: > undefined reference to `qemu_chr_find' > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:194: > undefined reference to `qemu_chr_fe_claim_no_fail' > > crypto/cryptodev-vhost-user.o: In function > `qcrypto_cryptodev_vhost_user_event': > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:213: > undefined reference to `qemu_chr_set_reconnect_time' > > crypto/cryptodev-vhost-user.o: In function > `qcrypto_cryptodev_vhost_user_init': > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:257: > undefined reference to `qemu_chr_add_handlers' > > crypto/cryptodev-vhost-user.o: In function > `qcrypto_cryptodev_vhost_user_finalize': > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:353: > undefined reference to `qemu_chr_add_handlers' > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:354: > undefined reference to `qemu_chr_fe_release' > > collect2: ld returned 1 exit status > > make: *** [qemu-nbd] Error 1 > > > > Currently I only change the crypto/Makefile.objs: > > > > diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs > > index b9ad26a..575f64e 100644 > > --- a/crypto/Makefile.objs > > +++ b/crypto/Makefile.objs > > @@ -28,6 +28,7 @@ crypto-obj-y += block-qcow.o > > crypto-obj-y += block-luks.o > > crypto-obj-y += cryptodev.o > > crypto-obj-y += cryptodev-builtin.o > > +crypto-obj-y += cryptodev-vhost-user.o > > The $(crypto-obj-y) variable is intended to only contain general purpose > crypto code, since it needs to be linked to all QEMU programs. Your > cryptodev file is specific to system emulators, so must only be linked > to the system emulator targets. Thus, it should not be added to the > crypto-obj-y variable. > > It probably needs to be added to either common-obj-y or obj-y - I can't > remember which is "best" > common-obj-y is fine! So all cryptodev stuff should be use $( crypto-obj-y) variable, right? I'll change them in the next version. Thank you so much! Regards, -Gonglei > Regards, > Daniel > -- > |: http://berrange.com -o- > http://www.flickr.com/photos/dberrange/ :| > |: http://libvirt.org -o- > http://virt-manager.org :| > |: http://autobuild.org -o- > http://search.cpan.org/~danberr/ :| > |: http://entangle-photo.org -o- > http://live.gnome.org/gtk-vnc :|
On Mon, Sep 26, 2016 at 09:19:36AM +0000, Gonglei (Arei) wrote: > > > > > > > -----Original Message----- > > From: Daniel P. Berrange [mailto:berrange@redhat.com] > > Sent: Monday, September 26, 2016 5:14 PM > > To: Gonglei (Arei) > > Cc: qemu-devel@nongnu.org > > Subject: Re: Questions about gcc linker errors in crypto sub-directory > > > > On Mon, Sep 26, 2016 at 09:03:45AM +0000, Gonglei (Arei) wrote: > > > Hi Daniel, > > > > > > I'm coding cryptodev-vhost-user.c as a new cryptodev backend, > > > but the gcc report some linker errors: > > > > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_crypto_cleanup': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:87: > > undefined reference to `vhost_dev_cleanup' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_crypto_init': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:126: > > undefined reference to `vhost_dev_init' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_user_opened': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:187: > > undefined reference to `qemu_chr_find' > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:194: > > undefined reference to `qemu_chr_fe_claim_no_fail' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_user_event': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:213: > > undefined reference to `qemu_chr_set_reconnect_time' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_user_init': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:257: > > undefined reference to `qemu_chr_add_handlers' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_user_finalize': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:353: > > undefined reference to `qemu_chr_add_handlers' > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:354: > > undefined reference to `qemu_chr_fe_release' > > > collect2: ld returned 1 exit status > > > make: *** [qemu-nbd] Error 1 > > > > > > Currently I only change the crypto/Makefile.objs: > > > > > > diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs > > > index b9ad26a..575f64e 100644 > > > --- a/crypto/Makefile.objs > > > +++ b/crypto/Makefile.objs > > > @@ -28,6 +28,7 @@ crypto-obj-y += block-qcow.o > > > crypto-obj-y += block-luks.o > > > crypto-obj-y += cryptodev.o > > > crypto-obj-y += cryptodev-builtin.o > > > +crypto-obj-y += cryptodev-vhost-user.o > > > > The $(crypto-obj-y) variable is intended to only contain general purpose > > crypto code, since it needs to be linked to all QEMU programs. Your > > cryptodev file is specific to system emulators, so must only be linked > > to the system emulator targets. Thus, it should not be added to the > > crypto-obj-y variable. > > > > It probably needs to be added to either common-obj-y or obj-y - I can't > > remember which is "best" > > > common-obj-y is fine! So all cryptodev stuff should be use > $( crypto-obj-y) variable, right? I'll change them in the next version. Looking at this again, it actually makes me think that your cryptodev stuff would be better in the backends/ directory. That would mean the crypto/ directory is kept as the place for generic crypto infrastructure, and avoiding system emulator specific device backend code. The backends/Makefile.objs is already setup to use common-obj-y and builds various other device backend models. Regards, Daniel
diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs index b9ad26a..575f64e 100644 --- a/crypto/Makefile.objs +++ b/crypto/Makefile.objs @@ -28,6 +28,7 @@ crypto-obj-y += block-qcow.o crypto-obj-y += block-luks.o crypto-obj-y += cryptodev.o crypto-obj-y += cryptodev-builtin.o +crypto-obj-y += cryptodev-vhost-user.o # Let the userspace emulators avoid linking gnutls/etc crypto-aes-obj-y = aes.o