[klee-dev] Ask for help with Error when apply KLEE to Busybox1.21.0

Daniel Liew daniel.liew at imperial.ac.uk
Wed Nov 27 05:52:44 GMT 2013


Hi,

I would advise using my fork [1] of wllvm instead of klee-gcc for
building programs to LLVM bitcode.

I don't quite have the same error as you when I use wllvm. Instead I see ...

```

Failed: -Wl,--start-group -lm -Wl,--end-group


                 [76/1831]
Output of:
wllvm -fnested-functions -Wall -Wshadow -Wwrite-strings -Wundef
-Wstrict-prototypes -Wunused -Wunused-parameter -Wunused-function
-Wunused-value -Wmissing-prototypes -Wmissing-declarations
-Wno-format-security -Wdeclaration-after-statement
 -Wold-style-definition -fno-builtin-strlen -finline-limit=0
-fomit-frame-pointer -ffunction-sections -fdata-sections
-fno-guess-branch-probability -funsigned-char -static-libgcc
-falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign
-loops=1 -fno-unwind-tables -fno-asynchronous-unwind-tables -Os -o
busybox_unstripped -Wl,--sort-common -Wl,--sort-section,alignment
-Wl,--gc-sections -Wl,--start-group applets/built-in.o archival/lib.a
archival/libarchive/lib.a console-to
ols/lib.a coreutils/lib.a coreutils/libcoreutils/lib.a
debianutils/lib.a e2fsprogs/lib.a editors/lib.a findutils/lib.a
init/lib.a libbb/lib.a libpwdgrp/lib.a loginutils/lib.a
mailutils/lib.a miscutils/lib.a modutils/lib.a networking/lib.a
networking/libiproute/lib.a networking/udhcp/lib.a printutils/lib.a
procps/lib.a runit/lib.a selinux/lib.a shell/lib.a sysklogd/lib.a
util-linux/lib.a util-linux/volume_id/lib.a archival/built-in.o
archival/libarchive/built-in.o console-to
ols/built-in.o coreutils/built-in.o coreutils/libcoreutils/built-in.o
debianutils/built-in.o e2fsprogs/built-in.o editors/built-in.o
findutils/built-in.o init/built-in.o libbb/built-in.o
libpwdgrp/built-in.o loginutils/built-in.o mailutils
/built-in.o miscutils/built-in.o modutils/built-in.o
networking/built-in.o networking/libiproute/built-in.o
networking/udhcp/built-in.o printutils/built-in.o procps/built-in.o
runit/built-in.o selinux/built-in.o shell/built-in.o sysklogd/b
uilt-in.o util-linux/built-in.o util-linux/volume_id/built-in.o
-Wl,--end-group -Wl,--start-group -lm -Wl,--end-group
==========
networking/lib.a(inetd.o): In function `inetd_main':
networking/inetd.c:(.text.inetd_main+0x261): undefined reference to `__FDELT'
networking/inetd.c:(.text.inetd_main+0x275): undefined reference to `__FDMASK'

...
```

The errors I have are macros that expand to something that is not used
as a symbol (_FDELT and _FDMASK). This seems to have something to do
with llvm-gcc and the macros FD_CLEAR, FD_ISSET, FD_SET and FD_ZERO
(in  lib/gcc/x86_64-unknown-linux-gnu/4.2.1/include/bits/select.h ).

Anyway the quick way to avoid this issue is to not build the
networking part of busybox by running make menuconfig (you may need
remove .config file first) and then removing the networking bits and
saving your configuration then building.

If I do this then I can successfully build busybox using wllvm with
llvm-gcc provided I also add to CFLAGS in Makefile.flags
-fnested-functions i.e.

CFLAGS += -fnested-function

Hope that helps,
Dan Liew

[1] Make sure you use llvm-gcc branch of repository
https://github.com/delcypher/whole-program-llvm/tree/llvm-gcc

On 27 November 2013 03:29, 王帅 <waishuai at hotmail.com> wrote:
> Hi guys,
>    Recently, I'm trying to apply KLEE to busybox1.21.0. I followed the
> subsequent steps:
>
> mkdir obj-klee
> make -w O=obj-klee defconfig
> cd obj-klee
> make CC=klee-gcc LD="llvm-ld --disable-opt" AR=llvm-ar SKIP_STRIP=y V=1
> make CC=/home/wang/work/klee/scripts/klee-gcc LD="llvm-ld --disable-opt"
> SKIP_STRIP=y V=1 AR=llvm-ar CFLAGS=-fnested-functions
>
>
>   But,an error happened:
>
> ------------------------
> -------------------------
> ------------------------
>
> Trying libraries: m
> Failed: -Wl,--start-group -lm -Wl,--end-group
> Output of:
> /home/wang/work/klee/scripts/klee-gcc -fnested-functions -o
> busybox_unstripped -Wl,--start-group applets/built-in.o archival/lib.a
> archival/libarchive/lib.a console-tools/lib.a coreutils/lib.a
> coreutils/libcoreutils/lib.a debianutils/lib.a e2fsprogs/lib.a editors/lib.a
> findutils/lib.a init/lib.a libbb/lib.a libpwdgrp/lib.a loginutils/lib.a
> mailutils/lib.a miscutils/lib.a modutils/lib.a networking/lib.a
> networking/libiproute/lib.a networking/udhcp/lib.a printutils/lib.a
> procps/lib.a runit/lib.a selinux/lib.a shell/lib.a sysklogd/lib.a
> util-linux/lib.a util-linux/volume_id/lib.a archival/built-in.o
> archival/libarchive/built-in.o console-tools/built-in.o coreutils/built-in.o
> coreutils/libcoreutils/built-in.o debianutils/built-in.o
> e2fsprogs/built-in.o editors/built-in.o findutils/built-in.o init/built-in.o
> libbb/built-in.o libpwdgrp/built-in.o loginutils/built-in.o
> mailutils/built-in.o miscutils/built-in.o modutils/built-in.o
> networking/built-in.o networking/libiproute/built-in.o
> networking/udhcp/built-in.o printutils/built-in.o procps/built-in.o
> runit/built-in.o selinux/built-in.o shell/built-in.o sysklogd/built-in.o
> util-linux/built-in.o util-linux/volume_id/built-in.o -Wl,--end-group
> -Wl,--start-group -lm -Wl,--end-group
> ==========
> llvm-ld: error: Cannot find linker input 'selinux/lib.a'
> make[2]: *** [busybox_unstripped] Error 1
> make[1]: *** [_all] Error 2
> make: *** [all] Error 2
>
>
>   When I check selinux/lib.a, the file is there, but it contains only a
> single line with: "!<arch>" . Someone can help me ? If any, could you tell
> me how to solve it? I'm really hurried with this test. Thank you very much
> for advance!




More information about the klee-dev mailing list