Git Product home page Git Product logo

klee-uclibc's Introduction

KLEE-uClibc

Build Status

This is a modified version version of uClibc for KLEE. Please see README for information about uClibc.

To build uClibc for KLEE:

  1. Make sure llvm-config is in your PATH (or set using --with-llvm-config). The LLVM version used by llvm-config should match the LLVM version used by the C LLVM Bitcode compiler you intend to use in step 2.

  2. Make sure you have one of the following C LLVM compilers

  • clang built in the LLVM tool directory (llvm-config --bindir)
  • clang in your PATH

The C compiler to be used will be looked for in the above order with the first working compiler to be used.

Note you can also force a particular C compiler by using the CC environment variable or by using --with-cc with the configure script.

  1. Run the configure script.

    $ ./configure --make-llvm-lib

    To see all options run

    $ ./configure --help

  2. By default a uClibc pre built .config file will be added to the uClibc root directory by the configure script. This is done to make compilation easier for users. However the --disable-prebuilt-config flag can be used to prevent a .config file being added. If you wish to create your own .config you can do so by running make menuconfig or make config after running the configure script.

  3. Compile

    $ make

    You can also add optional flags by running adding KLEE_CFLAGS=... to the end of the make line above. In particular, to compile printf, which is excluded by default, use:

    make KLEE_CFLAGS="-DKLEE_SYM_PRINTF"

    To compile in optimized mode use the --enable-release flag. Warning things might break if you do this.

klee-uclibc's People

Contributors

251 avatar aldot avatar amorosoc avatar andreamattavelli avatar aytey avatar bmwiedemann avatar ccadar avatar davidtr1037 avatar delcypher avatar dschleef avatar erikbandersen avatar jbglaw avatar joakim-tjernlund avatar kren1 avatar landley avatar martinnowack avatar mic92 avatar pmundt avatar ps-m avatar saur2000 avatar sjhill71 avatar solalpirelli avatar solarx avatar vapier avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

klee-uclibc's Issues

wget http://www.uclibc.org fails

The wget http://www.uclibc.org call in extra/locale/Makefile.in fails for me currently. It seems that switching to https is now necessary. Also, I needed to switch from wget to curl, but am not sure if that is only a local issue.

Support missing targets with uclibc-ng

Currently, uclibc-ng, which is a descendant of uclibc, supports more variety of targets including aarch64 with active maintenance.

I think that if klee-uclibc is rebuilt on top of uclibc-ng instead of the deprecated uclibc, it will become more useful. Or, some of the uclibc-ng's existing code could be ported here.

Build with locale?

There is an inconsistency between klee_legagcy_i686 and klee_legacy_x86_64.

  • klee_legacy_i686 was configured to build with locale (it included a locale tarball extra/locale/uClibc-locale-030818.tgz)
  • klee_legacy_x86_64 was not configured to build with locale.

Should we build klee_0_9_29 build with locale?

www.uclibc.org not handled by Quad9 secure DNS

Hello, secured service of Quad9 DNS can't resolve www.uclibc.org link used in this makefile.

# secured : Malware Blocking, DNSSEC Validation
>> nslookup www.uclibc.org 9.9.9.9
Server:         9.9.9.9
Address:        9.9.9.9#53

 ** server cant find www.uclibc.org: NXDOMAIN

# Unsecured: No Malware blocking, no DNSSEC validation
>> nslookup www.uclibc.org 9.9.9.10
Server:         9.9.9.10
Address:        9.9.9.10#53

Non-authoritative answer:
Name:   www.uclibc.org
Address: 140.211.167.122

To make sure we download a trusted version of locale data, could you maybe add the uClibc-locale-030818.tgz file to this repo ? Thanks !

OS X: ./configure -l report Kernel header files not found

Hi, I'm trying to compile klee on macOS 10.12.6 (kernel version Darwin 16.7.0). llvm, stp and minisat are success compiled. Now I'm stuck in compile uclibc.

./configure -l
INFO:Disabling assertions
INFO:Configuring for Debug build
INFO:Configuring for LLVM bitcode archive
INFO:Using llvm-config at.../usr/local/opt/llvm/bin/llvm-config
INFO:Using llvm tool dir.../usr/local/Cellar/llvm/5.0.0/bin
INFO:Found "/usr/local/Cellar/llvm/5.0.0/bin/llvm-objdump".
INFO:Found "/usr/local/Cellar/llvm/5.0.0/bin/llvm-link".
INFO:Found "/usr/local/Cellar/llvm/5.0.0/bin/llvm-ar".
INFO:Found "/usr/local/Cellar/llvm/5.0.0/bin/llvm-nm".
INFO:Searching for LLVM Bitcode compiler...
INFO:Found clang in LLVM Build dir.../usr/local/Cellar/llvm/5.0.0/bin/clang
INFO:Testing LLVM Bitcode compiler.../usr/local/Cellar/llvm/5.0.0/bin/clang
INFO:Compiler /usr/local/Cellar/llvm/5.0.0/bin/clang works
INFO:Using LLVM Bitcode Compiler.../usr/local/Cellar/llvm/5.0.0/bin/clang
INFO:Checking for ncurses...
INFO:Writing templated file to "/Users/apple/Documents/Dev/klee-uclibc/Makefile.klee"
INFO:Setting up pre-made configure for...x86_64
INFO:Installing .config file
INFO:Looking for kernel include path...
ERROR:Kernel header files not found at '/usr/include': '/usr/include/asm/unistd.h' is absent.Export the UCLIBC_KERNEL_HEADERS environment variable to change thedefault path ('/usr/include')

#include_next <limits.h> missing

While compiling on Ubuntu 12.04-03 LTS having gcc 4.6.3, having llvm-2.9 and clang 2.9:

$ clang --version
clang version 2.9 (tags/RELEASE_29/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix

I get the error during make:

*
* uClibc development/debugging options
*
Cross-compiling toolchain prefix (CROSS_COMPILER_PREFIX) [] 
Enter any extra CFLAGS to use to build uClibc (UCLIBC_EXTRA_CFLAGS) [] 
Build uClibc with debugging symbols (DODEBUG) [N/y/?] n
Strip libraries and executables (DOSTRIP) [N/y/?] n
Build uClibc with run-time assertion testing (DOASSERTS) [N/y/?] n
Build malloc with debugging support (UCLIBC_MALLOC_DEBUGGING) [N/y/?] n
Compiler Warnings (WARNINGS) [-Wall] -Wall
Enable extra annoying warnings (EXTRA_WARNINGS) [N/y/?] n
Compile all sources at once into an object (DOMULTI) [N/y/?] n
Manuel's hidden warnings (UCLIBC_MJN3_ONLY) [N/y/?] n
#
# configuration written to .config
#
./extra/scripts/conf-header.sh .config > include/bits/uClibc_config.h
  CC libcrypt/des.os
clang: warning: argument unused during compilation: '-fgnu89-inline'
In file included from libcrypt/des.c:62:
In file included from ./include/sys/param.h:22:
In file included from ./include/limits.h:124:
/usr/include/limits.h:125:16: fatal error: 'limits.h' file not found
# include_next <limits.h>
               ^
1 error generated.
make: *** [libcrypt/des.os] Error 1

I configured as per http://ccadar.github.io/klee/GetStarted.html :

./configure --make-llvm-lib

And guess why I'm getting this error?

Test and then announce new klee-uclibc

I have pushed three new branches

  • klee_legacy_x86_64 : Legacy klee-uclibc for 64-bit, this will not be maintained
  • klee_legacy_i686 : Legacy klee-uclibc for 32-bit, this will not be maintained
  • klee_0_9_29 : This is the new klee-uclibc

klee_0_9_29 : Is the built on top of the 0_9_29 branch (not the same as the 0_9_29 tag). I have selectively applied changes from the original klee-uclibc as several commits and have I tried my best to provide good commit messages. I found this quite challenging and it's lead me to conclude that we really need to rethink how KLEE and uclibc should interact because some of this code is horrible.

Building klee-uclibc on this branch succeeds for

  • llvm-gcc4.2 (llvm2.9) 32-bit and 64-bit
  • clang 3.3 32-bit and 64bit (Thanks to @MartinNowack )

This branch on 64-bit currently passes the KLEE tests when built with llvm-gcc, on 32-bit it doesn't quite pass but I need to look into this further. I don't believe this is related to uclibc because KLEE's test seem to be broken on 32-bit if I use the old klee-uclibc as well.

What I would like to do is (with permission from all contributors @ccadar @MartinNowack )

  • Remove the old klee_monolithic and klee_monolithic_llvm33 branches and just continue development on the klee_0_9_29 branch. I don't want to do this too soon because there are some changes on klee_monolithic_llvm33 from @MartinNowack that are not on the klee_0_9_29 branch. Perhaps we should switch to a push-pull model for the klee_0_9_29 branch?
  • Then make klee_0_9_29 the default branch for this repository.
  • Then announce these changes on the klee-dev mailing list and update the "Getting Started" documentation for KLEE to instruct people to use klee-uclibc from this repository. The klee-uclibc tarballs on the KLEE website are broken (and have been for a while) so I don't see any good reason to delay doing this.

cannot generate aarch64 pre-made config files.

I am using an aarch64 machine to make klee-uclibc, and I found no supported pre-made config files in klee-premade-configs,
README said I can run make menuconfig to generate config file, but I cannot find the aarch64 option in architecture.
I wonder if I can install this plugin in aarch64 env?

ubuntu: configure without error, but didn't generate Makefiles.

➜ build git:(klee_0_9_29) ../configure
--make-llvm-lib
--with-llvm-config="../../../llvm-project/build/bin/llvm-config"
--with-cc="../../../llvm-project/build/bin/clang"
--enable-assertions
INFO:Forcing C compiler to be...../../../llvm-project/build/bin/clang
INFO:Absolute path to compiler.../home/alien/git/llvm_all/llvm-project/build/bin/clang
INFO:Enabling assertions
INFO:Configuring for Debug build
INFO:Configuring for LLVM bitcode archive
INFO:Using llvm-config at.../home/alien/git/llvm_all/llvm-project/build/bin/llvm-config
INFO:Using llvm tool dir.../home/alien/git/llvm_all/llvm-project/build/bin
INFO:Found "/home/alien/git/llvm_all/llvm-project/build/bin/llvm-objdump".
INFO:Found "/home/alien/git/llvm_all/llvm-project/build/bin/llvm-link".
INFO:Found "/home/alien/git/llvm_all/llvm-project/build/bin/llvm-ar".
INFO:Found "/home/alien/git/llvm_all/llvm-project/build/bin/llvm-nm".
INFO:Testing LLVM Bitcode compiler.../home/alien/git/llvm_all/llvm-project/build/bin/clang
INFO:Compiler /home/alien/git/llvm_all/llvm-project/build/bin/clang works
INFO:Using LLVM Bitcode Compiler.../home/alien/git/llvm_all/llvm-project/build/bin/clang
INFO:Checking for ncurses...
INFO:Removing template destination "/home/alien/git/llvm_all/klee_all/klee-uclibc/Makefile.klee"
INFO:Writing templated file to "/home/alien/git/llvm_all/klee_all/klee-uclibc/Makefile.klee"
WARNING:Removing existing config file.../home/alien/git/llvm_all/klee_all/klee-uclibc/.config
INFO:Setting up pre-made configure for...x86_64
INFO:Installing .config file
INFO:Looking for kernel include path...
INFO:Found "/usr/include/x86_64-linux-gnu"

➜ build git:(klee_0_9_29) la
total 0

make config error

Hi, I am new to the klee-uclibc. When I run the command "make config", I got this error message:
Rules.mak:52: Makefile.klee: No such file or directory
make: *** No rule to make target 'Makefile.klee'. Stop.
So, can someone please help me to solve it?

cannot use llvm-ld upper on llvm 3.2

Hi, all

Beacase "llvm-ld" is removed upper on LLVM 3.2, I cannot build "klee-uClibc".

스크린샷 2021-10-22 오전 6 52 11

Please refer to LLVM 3.2 release notes

llvm-ld and llvm-stub have been removed, llvm-ld functionality can be partially replaced by llvm-link | opt | {llc | as, llc -filetype=obj} | ld, or fully replaced by Clang.

Thanks,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.