FreeBSD LLDB port
Background
LLDB, part of the LLVM family of projects, is a modern, high-performance source-level debugger. It supports (at some level) OS X, Linux, FreeBSD, NetBSD, and Windows. This page describes the ongoing work to bring the FreeBSD LLDB port to completion.
Links
- FreeBSD-hosted FreeBSD amd64 buildbot (last 200 builds) (2014-11-26: currently offline)
Installation
FreeBSD HEAD (in-tree LLDB snapshot)
FreeBSD-HEAD contains LLDB release version 3.8 (as of the last update of this wiki page) and is typically updated along with Clang/LLVM. It is enabled by default on amd64 and arm64 and may be enabled elsewhere by adding WITH_LLDB=YES to /etc/src.conf, and then following a standard buildworld and installworld, or building directly in lib/clang and then usr.bin/clang/lldb.
FreeBSD HEAD or 10 (upstream LLDB tree)
Install the following ports / packages:
- python
- swig (I used swig 1.3)
- cmake
- ninja
- git
This can be accomplished by running:
pkg install git python cmake ninja swig13
Virtual Machine
LLDB developers working on other platforms who wish to test their changes on FreeBSD can start with a virtual machine image from the table below.
| Image Link | Description |
|---|---|
| FreeBSD 10.3 Release | Most recent release |
| FreeBSD 11.0-CURRENT | Subversion HEAD development snapshot |
Quick start instructions:
- Log in as root on the console
- Run “ifconfig -l” to list network interfaces The virtual nic will likely be em0 or vtnet0 depending on the VM software.
- Add to /etc/rc.conf (assuming vtnet0 interface here):
ifconfig_vtnet0="DHCP" sshd_enable="YES"
- Run
dhclient vtnet0to fetch an IP address for the current session. - Run
pkgand answer Y to install the package management tool - Run
pkg install git python27 cmake ninja swig13 zsh - Run
adduserto create a user account - Run
shutdown -r nowto reboot - ssh to the VM as your user account and follow the steps below under “Checkout and Build”.
Checkout and Build
I build LLDB with the in-tree Clang and libc++. It should also be possible to build with a recent GCC port installed (and dropping CC=, CXX=, and -stdlib= from the cmake line below), but I encountered a number of issues.
Checkout and build LLDB (assuming a Bourne shell):
git clone http://llvm.org/git/llvm.git cd llvm/tools git clone http://llvm.org/git/clang.git git clone http://llvm.org/git/lldb.git cd .. mkdir build cd build CC=clang CXX=clang++ cmake ../ -G Ninja -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++ -I/usr/local/include/python2.7 -g" ninja lldb ninja check-lldb # if you want to run tests
- For details on the need for -std=c++11 see http://lists.cs.uiuc.edu/pipermail/lldb-dev/2013-November/002755.html// * //
CC=andCXX=are required for 9.x builds only; clang is the default compiler on 10.0 and later.
Status
| Feature | Status |
|---|---|
| process launch | Works |
| process attach (pid) | Works |
| process attach (name) | Works |
| userland core files | Works |
| Breakpoints | Works |
| Watchpoints | Works |
| Threads | Works |
| Testsuite | All non-passing tests have PRs |
| Remote debugging (gdbserver / debugserver) | In Progress |
| Kernel debugging | In progress (GSoC 2014) |
| Cross debugging | Untested |
| Architecture | Host Status | Target Status |
|---|---|---|
| amd64 | Works | Works |
| arm | Unknown | Unknown |
| arm64 (aarch64) | Works | Works |
| i386 | In progress | In progress |
| mips | Unknown | In progress |
| mips64 | Unknown | In progress |
| powerpc | In progress | In progress |
| powerpc64 | In progress | In progress |
Tasks
- Investigate and fix open PRs. To find annotated failing or skipped tests, try:
find packages/Python/lldbsuite/test -name '*.py' -print0 | xargs -r0 egrep 'skipIfFreeBSD|expectedFailureFreeBSD'