Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ do_steps: &do_steps
command: |
if [[ $CROSS_COMPILE == *android* ]]; then
emulator -avd Nexus5_API24 -no-window -no-audio -no-boot-anim;
elif [[ $CROSS_COMPILE == *freebsd* ]] || [[ -n "$LKL_QEMU_TEST" ]]; then
cd /home/ubuntu && eval $QEMU
fi
background: true
- run: cd tools/lkl && make -j8 ${MKARG}
Expand All @@ -71,11 +69,6 @@ do_steps: &do_steps
command: |
if [[ $CROSS_COMPILE == *android* ]]; then
/home/ubuntu/circle-android.sh wait-for-boot;
elif [[ $CROSS_COMPILE == *freebsd* ]] || [[ -n "$LKL_QEMU_TEST" ]]; then
while ! $MYSSH -o ConnectTimeout=1 exit 2> /dev/null
do
sleep 5
done
fi
- run:
name: run tests
Expand Down Expand Up @@ -116,13 +109,6 @@ jobs:
ANDROID_SDK_ROOT: /home/ubuntu/android-sdk
<<: *do_steps

freebsd11_x86_64:
docker:
- image: lkldocker/circleci-freebsd11-x86_64:v1.4
environment:
CROSS_COMPILE: "x86_64-pc-freebsd11-"
<<: *do_steps

x86_64_valgrind:
docker:
- image: lkldocker/circleci-x86_64:v1.4
Expand All @@ -137,7 +123,6 @@ workflows:
build:
jobs:
- android-aarch64
- freebsd11_x86_64
- i386
nightly:
triggers:
Expand Down
62 changes: 29 additions & 33 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
os: unix
runs_on: ubuntu-22.04
shell: bash
run_qemu: true
- displayTargetName: kunit
os: unix
runs_on: ubuntu-22.04
Expand All @@ -33,15 +34,24 @@ jobs:
runs_on: windows-2022
pip_option: --break-system-packages
shell: msys2 {0}
- displayTargetName: clang-build
- displayTargetName: freebsd
os: unix
runs_on: ubuntu-22.04
shell: bash
build_options: "LLVM=1 CROSS_COMPILE=x86_64-linux-gnu"
build_options: "LLVM=1 CROSS_COMPILE=x86_64-unknown-freebsd SYSROOT=~/freebsd-sysroot"
make_sysroot: "./tools/lkl/scripts/freebsd-make-sysroot.sh"
run_qemu: true
- displayTargetName: fuzzers
os: unix
runs_on: ubuntu-22.04
shell: bash
build_options: "LKL_FUZZING=1 MMU=1 fuzzers"

timeout-minutes: 100
env:
CCACHE_DIR: ${{ github.workspace }}/.ccache
USE_CCACHE: 1
PROTOBUF_MUTATOR_DIR: /tmp/libprotobuf-mutator

defaults:
run:
Expand Down Expand Up @@ -103,13 +113,16 @@ jobs:
- uses: actions/cache@v4
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-ccache-build-${{ github.sha }}
restore-keys: ${{ runner.os }}-ccache-build-
key: ${{ matrix.displayTargetName }}-ccache-build-${{ github.sha }}
restore-keys: ${{ matrix.displayTargetName }}-ccache-build-
- name: Install ccache on ubuntu-latest
if: runner.os == 'Linux'
run: |
sudo apt update -y
sudo apt install -y ccache libjsmn-dev libfuse3-dev clang lld llvm qemu-system-x86 qemu-utils sshpass cloud-image-utils
sudo apt install -y ccache libjsmn-dev libfuse3-dev clang lld llvm qemu-system-x86 \
qemu-utils sshpass cloud-image-utils binutils cmake ninja-build liblzma-dev libz-dev \
pkg-config autoconf libtool

- name: Install patched binutils for Windows
if: runner.os == 'Windows'
run: |
Expand Down Expand Up @@ -141,19 +154,26 @@ jobs:
echo "setting env variable (debug)"
echo "ZPOLINE_DEBUG=0" >> "$GITHUB_ENV"
- name: Start QEMU
if: matrix.displayTargetName == 'linux'
if: matrix.run_qemu
run: |
./tools/lkl/scripts/qemu-x86_64-make-images.sh
./tools/lkl/scripts/qemu-${{ matrix.displayTargetName }}-make-images.sh
sudo chmod a+rw /dev/kvm
. tools/lkl/scripts/qemu-x86_64-start-and-set-env.sh
echo MYHOST="$HOST" >> $GITHUB_ENV
. tools/lkl/scripts/qemu-${{ matrix.displayTargetName }}-start-and-set-env.sh
echo MYHOST="$MYHOST" >> $GITHUB_ENV
echo MYSSH="$MYSSH" >> $GITHUB_ENV
echo MYSCP="$MYSCP" >> $GITHUB_ENV
echo LKL_QEMU_TEST=1 >> $GITHUB_ENV
- name: Make sysroot
run: |
${{ matrix.make_sysroot }}
- name: Build libprotobuf-mutator
if: matrix.displayTargetName == 'fuzzers'
run: tools/lkl/scripts/libprotobuf-mutator-build.sh
- name: Build
run: |
make -j4 -C tools/lkl ${{ matrix.build_options }}
- name: Tests
if: matrix.displayTargetName != 'fuzzers'
run: mkdir junit && make -C tools/lkl run-tests tests="--junit-dir ../../junit"
- name: Save test results
uses: actions/upload-artifact@v5
Expand Down Expand Up @@ -184,27 +204,3 @@ jobs:
run: sudo pip install ply GitPython
- name: Check coding style
run: tools/lkl/scripts/checkpatch.sh

fuzzers:
runs-on: ubuntu-22.04
name: fuzzers
env:
PROTOBUF_MUTATOR_DIR: /tmp/libprotobuf-mutator
steps:
- name: Checkout
with:
fetch-depth: 0
uses: actions/checkout@v4
- name: Install clang toolchain
run: |
sudo apt update -y
sudo apt install -y clang lld llvm
- name: Install libprotobuf-mutator prerequisites
run: |
sudo apt update -y
sudo apt install -y binutils cmake ninja-build liblzma-dev libz-dev \
pkg-config autoconf libtool
- name: Build libprotobuf-mutator
run: tools/lkl/scripts/libprotobuf-mutator-build.sh
- name: Build fuzzers
run: make -j4 -C tools/lkl LKL_FUZZING=1 MMU=1 fuzzers
9 changes: 9 additions & 0 deletions arch/lkl/include/asm/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,16 @@ static inline void __iounmap(void __iomem *addr)
#define iounmap __iounmap
#endif

#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnull-pointer-arithmetic"
#endif

#include <asm-generic/io.h>

#ifdef __clang__
#pragma clang diagnostic pop
#endif

#endif /* _ASM_LKL_IO_H */

16 changes: 12 additions & 4 deletions tools/lkl/Makefile.autoconf
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ $(shell echo "CONFIG_$(1)=$(2)" >> $(OUTPUT)/kernel.config)
endef

define find_include
$(eval include_paths=$(shell $(CC) -E -Wp,-v -xc /dev/null 2>&1 | grep '^ '))
$(foreach f, $(include_paths), $(wildcard $(f)/$(1)))
$(eval include_paths=$(shell $(CC) $(SYSROOT_FLAGS) -E -Wp,-v -xc /dev/null 2>&1 | grep '^ '))
$(foreach f,$(include_paths),$(wildcard $(f)/$(1)))
endef

define is_defined
$(shell $(CC) -dM -E - </dev/null | grep $(1))
$(shell $(CC) $(SYSROOT_FLAGS) -dM -E - </dev/null | grep $(1))
endef

define android_host
Expand Down Expand Up @@ -138,7 +138,13 @@ endef

define llvm_target_to_ld_fmt
$(if $(filter $(CROSS_COMPILE),x86_64-linux-gnu),elf64-x86-64,\
$(error Unsupported LLVM target $(CROSS_COMPILE)))
$(if $(filter $(CROSS_COMPILE),x86_64-unknown-freebsd),elf64-x86-64-freebsd, \
$(error Unsupported LLVM target $(CROSS_COMPILE))))
endef

define llvm_sysroot
CFLAGS += --target=$(CROSS_COMPILE) --sysroot=$(SYSROOT) -I$(SYSROOT)/usr/local/include
LDFLAGS += --target=$(CROSS_COMPILE) --sysroot=$(SYSROOT) -L$(SYSROOT)/usr/local/lib
endef

define do_autoconf_llvm
Expand All @@ -152,6 +158,8 @@ define do_autoconf_llvm
$(eval LD := $(LLVM_PREFIX)ld.lld$(LLVM_SUFFIX))
$(eval CC := $(LLVM_PREFIX)clang$(LLVM_SUFFIX))
$(eval LD_FMT := $(call llvm_target_to_ld_fmt))
$(if $(SYSROOT),$(eval SYSROOT_FLAGS=--sysroot $(SYSROOT)))
$(if $(SYSROOT),$(call llvm_sysroot))
endef

define define_libprotobuf_mutator
Expand Down
2 changes: 2 additions & 0 deletions tools/lkl/Targets
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ LDLIBS_cptofs-$(LKL_HOST_CONFIG_NEEDS_LARGP) += -largp
tests-priv-y := tests/tests-common
tests-y := tests/disk
tests-y += tests/boot
ifneq ($(LKL_HOST_CONFIG_BSD),y)
tests-y += tests/disk-vfio-pci
endif
tests-y += tests/net-test
tests-y += tests/config
ifneq ($(LKL_HOST_CONFIG_BSD),y)
Expand Down
4 changes: 2 additions & 2 deletions tools/lkl/lib/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ static void add_neighbor(int ifindex, char *entries)
*/
static int dump_file(char *path)
{
int ret = -1, bytes_read = 0;
int ret = -1;
char str[1024] = { 0 };
int fd;

Expand All @@ -443,7 +443,7 @@ static int dump_file(char *path)
/* Need to print this out in order to make sense of the output */
lkl_printf("Reading from %s:\n==========\n", path);
while ((ret = lkl_sys_read(fd, str, sizeof(str) - 1)) > 0)
bytes_read += lkl_printf("%s", str);
lkl_printf("%s", str);
lkl_printf("==========\n");

if (ret) {
Expand Down
8 changes: 0 additions & 8 deletions tools/lkl/lib/net.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,6 @@ int lkl_inet_pton(int af, const char *src, void *dst)
}
#endif

static inline void set_sockaddr(struct lkl_sockaddr_in *sin, unsigned int addr,
unsigned short port)
{
sin->sin_family = LKL_AF_INET;
sin->sin_addr.lkl_s_addr = addr;
sin->sin_port = port;
}

static inline int ifindex_to_name(int sock, struct lkl_ifreq *ifr, int ifindex)
{
ifr->lkl_ifr_ifindex = ifindex;
Expand Down
3 changes: 3 additions & 0 deletions tools/lkl/lib/posix-host.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
#include <sys/mman.h>
#include <poll.h>
#include <limits.h>
#ifdef __FreeBSD__
#include <pthread_np.h>
#endif
#include <lkl_host.h>
#include "iomem.h"
#include "jmp_buf.h"
Expand Down
3 changes: 1 addition & 2 deletions tools/lkl/lib/virtio_net_fd.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
#ifdef __FreeBSD__
#include <sys/syslimits.h>
#else
#include <limits.h>
#endif
#include <fcntl.h>
#include <sys/poll.h>
Expand Down
6 changes: 6 additions & 0 deletions tools/lkl/lklfuse.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,12 @@ static int lklfuse_truncate(const char *path, off_t off,
return ret;
}

#ifdef __FreeBSD__
#define O_LARGEFILE 0
#define O_NOATIME 0
#define O_TMPFILE 0
#endif

static int lklfuse_open3(const char *path, bool create, mode_t mode,
struct fuse_file_info *fi)
{
Expand Down
24 changes: 24 additions & 0 deletions tools/lkl/scripts/freebsd-make-sysroot.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0

function package_path()
{
grep \"name\":\"$1\" packagesite.yaml | jq -r .repopath
}

mkdir -p ~/freebsd-sysroot
cd ~/freebsd-sysroot
wget -q https://download.freebsd.org/releases/amd64/14.4-RELEASE/base.txz
tar -xf base.txz --exclude='./dev/*' --exclude='./chroot/*'

# Get FreeBSD package index...
wget -q https://pkg.freebsd.org/FreeBSD:14:amd64/latest/packagesite.pkg
tar -xf packagesite.pkg packagesite.yaml

wget -q https://pkg.freebsd.org/FreeBSD:14:amd64/latest/$(package_path argp-standalone)
wget -q https://pkg.freebsd.org/FreeBSD:14:amd64/latest/$(package_path fusefs-libs3)

tar -xf argp-standalone-*.pkg
tar -xf fusefs-libs3-*.pkg

rm fusefs-libs3-*.pkg argp-standalone-*.pkg base.txz packagesite.pkg packagesite.yaml
60 changes: 60 additions & 0 deletions tools/lkl/scripts/qemu-freebsd-make-images.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0

if ! [ -e FreeBSD-14.4-RELEASE-amd64-BASIC-CLOUDINIT-ufs.qcow2.xz ]; then
wget -q https://download.freebsd.org/releases/VM-IMAGES/14.4-RELEASE/amd64/Latest/FreeBSD-14.4-RELEASE-amd64-BASIC-CLOUDINIT-ufs.qcow2.xz
fi
unxz -k -f FreeBSD-14.4-RELEASE-amd64-BASIC-CLOUDINIT-ufs.qcow2.xz

cat > cloud-freebsd.yml <<EOF
#cloud-config
ssh_pwauth: true

packages:
- sudo
- fusefs-libs3

users:
- name: lkl
groups:
- wheel
- dialer
shell: /bin/sh
lock_passwd: false
sudo: ALL=(ALL) NOPASSWD:ALL

chpasswd:
list: |
lkl:lkl
expire: false

write_files:
- path: /boot/loader.conf
append: true
content: |
fusefs_load="YES"

- path: /etc/sysctl.conf
append: true
content: |
vfs.usermount=1

- path: /etc/rc.conf
append: true
content: |
firstboot_freebsd_update_enable="NO"
firstboot_pkgs_enable="NO"
sysrc devfs_system_ruleset="localrules"

- path: /etc/devfs.rules
content: |
[localrules=10]
add path 'tap*' mode 0660 group dialer
add path 'tun*' mode 0660 group dialer

runcmd:
- kldload fusefs
- sysctl vfs.usermount=1
EOF
cloud-localds cloud-freebsd.img cloud-freebsd.yml
rm cloud-freebsd.yml
13 changes: 13 additions & 0 deletions tools/lkl/scripts/qemu-freebsd-start-and-set-env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0

qemu-system-x86_64 -enable-kvm -m 512 -smp 4 \
-drive file=FreeBSD-14.4-RELEASE-amd64-BASIC-CLOUDINIT-ufs.qcow2,format=qcow2 \
-cdrom cloud-freebsd.img \
-netdev user,id=net0,hostfwd=tcp::2222-:22 -device e1000,netdev=net0 \
-display none -serial mon:telnet::5555,server,nowait -daemonize

SSH_OPTS="-q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
export MYHOST=lkl@localhost
export MYSSH="sshpass -p lkl ssh $SSH_OPTS -p 2222 $MYHOST"
export MYSCP="sshpass -p lkl scp -O $SSH_OPTS -P 2222"
Loading
Loading