--- Begin Message ---
Package: kvmtool
Version: 0.20160419-1
Severity: important
Tags: sid + patch
Justification: FTBFS
User: debian-mips@lists.debian.org
Usertags: mips-patch
Package kvmtool FTBFS for mips64el with the following error:
> LINK lkvm
> /usr/bin/ld: guest/guest_init.o: warning: linking abicalls files with non-abicalls files
> /usr/bin/ld: guest/guest_init.o: linking 32-bit code with 64-bit code
> /usr/bin/ld: failed to merge target specific data of file guest/guest_init.o
> collect2: error: ld returned 1 exit status
> Makefile:381: recipe for target 'lkvm' failed
> make[1]: *** [lkvm] Error 1
Full build log:
https://buildd.debian.org/status/fetch.php?pkg=kvmtool&arch=mips64el&ver=0.20160419-1&stamp=1463209003
The reason for that is behaviour is the way of creation guest_init.o.
> ld -r -b binary -o guest/guest_init.o guest/init
Resulting file is "MIPS-I" instead of expected "MIPS64 rel2".
> file guest/guest_init.o.cp
> guest/guest_init.o.cp: ELF 64-bit LSB relocatable, MIPS, MIPS-I version 1 (SYSV), not stripped
If options "-r -b binary" are used, linker will ignore flags of input file "Flags: 0x80000006, pic, cpic, mips64r2",
and flags of resulting guest_init.o file will be "Flags: 0x0".
Solution for this issue could be using different method for creation guest_init.o.
If xxd and gcc are used instead of ld, resulting file will have regular flags.
> xxd -i guest/init | $(CC) -c -x c - -o guest/guest_init.o
Here are proposed changes for this issue.
http://www.spinics.net/lists/kvm/msg118016.html
I have created a patch that fixes this issue modeled on mentioned solution.
Using this patch I was able to build kvmtool for mips64el, mipsel, i386, amd64.
The patch is attached.
Could you please consider including this patch.
--- kvmtool-0.20160419.orig/Makefile
+++ kvmtool-0.20160419/Makefile
@@ -395,8 +395,7 @@ endif
$(GUEST_INIT): guest/init.c
$(E) " LINK " $@
$(Q) $(CC) $(GUEST_INIT_FLAGS) guest/init.c -o $@
- $(Q) $(LD) -r -b binary -o guest/guest_init.o $(GUEST_INIT)
-
+ $(Q) xxd -i $@ | $(CC) -c -x c - -o guest/guest_init.o
%.s: %.c
$(Q) $(CC) -o $@ -S $(CFLAGS) -fverbose-asm $<
--- kvmtool-0.20160419.orig/builtin-setup.c
+++ kvmtool-0.20160419/builtin-setup.c
@@ -146,8 +146,8 @@ static int extract_file(const char *gues
return 0;
}
-extern char _binary_guest_init_start;
-extern char _binary_guest_init_size;
+extern char guest_init;
+extern char guest_init_len;
extern char _binary_guest_pre_init_start;
extern char _binary_guest_pre_init_size;
@@ -163,8 +163,8 @@ int kvm_setup_guest_init(const char *gue
return err;
#endif
err = extract_file(guestfs_name, "virt/init",
- &_binary_guest_init_start,
- &_binary_guest_init_size);
+ &guest_init,
+ &guest_init_len);
return err;
}
#else
--- End Message ---