diff mbox

[v3,19/19] bsd-user: fix linking conflicts with FreeBSD libcrypto

Message ID 1387281158-65744-20-git-send-email-sson@FreeBSD.org
State New
Headers show

Commit Message

Stacey Son Dec. 17, 2013, 11:52 a.m. UTC
FreeBSD has it's own AES_set_decrypt_key, etc. in libcrypto.  This
change fixes these conflicts and allows statically linking BSD
user mode qemu.
---
 include/qemu/aes.h |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

Comments

Peter Maydell Jan. 27, 2014, 8:07 p.m. UTC | #1
On 17 December 2013 11:52, Stacey Son <sson@freebsd.org> wrote:
> FreeBSD has it's own AES_set_decrypt_key, etc. in libcrypto.  This
> change fixes these conflicts and allows statically linking BSD
> user mode qemu.
> ---
>  include/qemu/aes.h |    9 +++++++++
>  1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/include/qemu/aes.h b/include/qemu/aes.h
> index e79c707..6d253a3 100644
> --- a/include/qemu/aes.h
> +++ b/include/qemu/aes.h
> @@ -10,6 +10,15 @@ struct aes_key_st {
>  };
>  typedef struct aes_key_st AES_KEY;
>
> +/* FreeBSD has it's own AES_set_decrypt_key in -lcrypto, avoid conflicts. */
> +#ifdef __FreeBSD__
> +#define AES_set_encrypt_key QEMU_AES_set_encrypt_key
> +#define AES_set_decrypt_key QEMU_AES_set_decrypt_key
> +#define AES_encrypt QEMU_AES_encrypt
> +#define AES_decrypt QEMU_AES_decrypt
> +#define AES_cbc_encrypt QEMU_AES_cbc_encrypt
> +#endif

You never answered Paolo's question about this patch, I think:
"What is the error?  Do the functions have different signatures
or semantics between QEMU and FreeBSD?"

If we need to resolve a clash, maybe we should just rename
the QEMU versions. Paolo?

thanks
-- PMM
Stacey Son Jan. 27, 2014, 8:15 p.m. UTC | #2
On Jan 27, 2014, at 2:07 PM, Peter Maydell <peter.maydell@linaro.org> wrote:

> On 17 December 2013 11:52, Stacey Son <sson@freebsd.org> wrote:
>> FreeBSD has it's own AES_set_decrypt_key, etc. in libcrypto.  This
>> change fixes these conflicts and allows statically linking BSD
>> user mode qemu.
>> ---
>> include/qemu/aes.h |    9 +++++++++
>> 1 files changed, 9 insertions(+), 0 deletions(-)
>> 
>> diff --git a/include/qemu/aes.h b/include/qemu/aes.h
>> index e79c707..6d253a3 100644
>> --- a/include/qemu/aes.h
>> +++ b/include/qemu/aes.h
>> @@ -10,6 +10,15 @@ struct aes_key_st {
>> };
>> typedef struct aes_key_st AES_KEY;
>> 
>> +/* FreeBSD has it's own AES_set_decrypt_key in -lcrypto, avoid conflicts. */
>> +#ifdef __FreeBSD__
>> +#define AES_set_encrypt_key QEMU_AES_set_encrypt_key
>> +#define AES_set_decrypt_key QEMU_AES_set_decrypt_key
>> +#define AES_encrypt QEMU_AES_encrypt
>> +#define AES_decrypt QEMU_AES_decrypt
>> +#define AES_cbc_encrypt QEMU_AES_cbc_encrypt
>> +#endif
> 
> You never answered Paolo's question about this patch, I think:
> "What is the error?  Do the functions have different signatures
> or semantics between QEMU and FreeBSD?"
> 
> If we need to resolve a clash, maybe we should just rename
> the QEMU versions. Paolo?

I must have missed Paolo's question.

The linker error (during a static build of qemu bsd-user)...

/usr/lib/libcrypto.a(aes-x86_64.o): In function `asm_AES_cbc_encrypt':
(.text+0xfa0): multiple definition of `AES_cbc_encrypt'
libqemuutil.a(aes.o):/home/sson/src/qemu/util/aes.c:1263: first defined here
/usr/lib/libcrypto.a(aes-x86_64.o): In function `asm_AES_decrypt':
(.text+0x9f0): multiple definition of `AES_decrypt'
libqemuutil.a(aes.o):/home/sson/src/qemu/util/aes.c:1072: first defined here
/usr/lib/libcrypto.a(aes-x86_64.o): In function `asm_AES_encrypt':
(.text+0x460): multiple definition of `AES_encrypt'

-stacey.
Paolo Bonzini Jan. 28, 2014, 10:17 a.m. UTC | #3
Il 27/01/2014 21:07, Peter Maydell ha scritto:
> You never answered Paolo's question about this patch, I think:
> "What is the error?  Do the functions have different signatures
> or semantics between QEMU and FreeBSD?"
>
> If we need to resolve a clash, maybe we should just rename
> the QEMU versions. Paolo?

Yeah, but it looks like there's no clash.  Perhaps we can use libcrypto 
if present, and only include aes.c if libcrypto is not there.

Paolo
diff mbox

Patch

diff --git a/include/qemu/aes.h b/include/qemu/aes.h
index e79c707..6d253a3 100644
--- a/include/qemu/aes.h
+++ b/include/qemu/aes.h
@@ -10,6 +10,15 @@  struct aes_key_st {
 };
 typedef struct aes_key_st AES_KEY;
 
+/* FreeBSD has it's own AES_set_decrypt_key in -lcrypto, avoid conflicts. */
+#ifdef __FreeBSD__
+#define AES_set_encrypt_key QEMU_AES_set_encrypt_key
+#define AES_set_decrypt_key QEMU_AES_set_decrypt_key
+#define AES_encrypt QEMU_AES_encrypt
+#define AES_decrypt QEMU_AES_decrypt
+#define AES_cbc_encrypt QEMU_AES_cbc_encrypt
+#endif
+
 int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 	AES_KEY *key);
 int AES_set_decrypt_key(const unsigned char *userKey, const int bits,