Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lib/ukboot: Critical error when running app-helloworld on linuxu #766

Closed
RaduNichita opened this issue Feb 17, 2023 · 2 comments
Closed
Labels
kind/bug Something isn't working

Comments

@RaduNichita
Copy link
Contributor

RaduNichita commented Feb 17, 2023

Describe the bug

When running the linuxu application for helloworld, it crashes due to a problem with memory allocator from boot.c

Steps to reproduce

Run the app-helloworld application with Unikraft v0.12.

Expected behavior

The program to dsplay the message "Hello world".

Which architectures were you using or does this bug affect?

linuxu

Which platforms were you using or does this bug affect?

x86_64

Relevant log output

[ 2692.514525] Info: [libukboot] <boot.c @  245> Unikraft constructor table at 0x40f000 - 0x40f008
[ 2692.514558] Info: [libukboot] <boot.c @  264> Initialize memory allocator...
[ 2692.514571] CRIT: [libukboot] <boot.c @  268> Failed to initialize memory allocator
@RaduNichita RaduNichita added the kind/bug Something isn't working label Feb 17, 2023
Daparrag added a commit to Daparrag/unikraft that referenced this issue Feb 28, 2023
@Daparrag
Copy link
Contributor

hi @RaduNichita

I add some changes that will fix this problem.

@razvand
Copy link
Contributor

razvand commented Apr 16, 2023

Hackathon points: 40

mogasergiu pushed a commit to mogasergiu/unikraft that referenced this issue May 8, 2023
Ensure that we do not try to fetch a memory region descriptor by an
index that is larget than our current memory region descriptor count.

Furthermore, this guarantees that `ukplat_memregion_count` is always
called before `ukplat_memregion_get` is executed fully. This way we
will always have the memory region descriptors as well as their count
set up and available before we try to fetch one.

GitHub-Fixes: unikraft#766
Signed-off-by: guzman <daparrag@correo.udistrital.edu.co>
mogasergiu pushed a commit to mogasergiu/unikraft that referenced this issue May 8, 2023
Ensure that we do not try to fetch a memory region descriptor by an
index that is larger than our current memory region descriptor count.

Furthermore, this guarantees that `ukplat_memregion_count` is always
called before `ukplat_memregion_get` is executed fully. This way we
will always have the memory region descriptors as well as their count
set up and available before we try to fetch one.

GitHub-Fixes: unikraft#766
Signed-off-by: guzman <daparrag@correo.udistrital.edu.co>
mogasergiu added a commit to mogasergiu/unikraft that referenced this issue May 8, 2023
Ensure that we do not try to fetch a memory region descriptor by an
index that is larger than our current memory region descriptor count.

Furthermore, this guarantees that `ukplat_memregion_count` is always
called before `ukplat_memregion_get` is executed fully. This way we
will always have the memory region descriptors as well as their count
set up and available before we try to fetch one.

GitHub-Fixes: unikraft#766
Signed-off-by: guzman <daparrag@correo.udistrital.edu.co>
Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
mogasergiu added a commit to mogasergiu/unikraft that referenced this issue May 8, 2023
Ensure that we do not try to fetch a memory region descriptor by an
index that is larger than our current memory region descriptor count.

Furthermore, this guarantees that `ukplat_memregion_count` is always
called before `ukplat_memregion_get` is executed fully. This way we
will always have the memory region descriptors as well as their count
set up and available before we try to fetch one.

Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
Signed-off-by: guzman <daparrag@correo.udistrital.edu.co>
GitHub-Fixes: unikraft#766
razvand pushed a commit to mogasergiu/unikraft that referenced this issue May 10, 2023
Ensure that we do not try to fetch a memory region descriptor by an
index that is larger than our current memory region descriptor count.

Furthermore, this guarantees that `ukplat_memregion_count` is always
called before `ukplat_memregion_get` is executed fully. This way we
will always have the memory region descriptors as well as their count
set up and available before we try to fetch one.

Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
GitHub-Fixes: unikraft#766
dragosp27 added a commit to dragosp27/unikraft that referenced this issue Jun 1, 2023
commit abd35a233677df19c463687405a3973a7eb9a424
Author: Alexander Jung <alex@unikraft.io>
Date:   Thu Jun 1 14:55:17 2023 +0200

    Release: v0.13.1 Atlas

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Signed-off-by: Alexander Jung <alex@unikraft.io>

commit c31a4b4937f94695d45079d81f3667a129f61650
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Mon May 22 13:06:32 2023 +0300

    build: Add proper compiler detection

    Checking for the output of `$(CC) -v` may fail depending on compiler
    versions (e.g. `clang-15 -v` on ubuntu will output `Ubuntu clang ...`,
    making `CC_NAME` `Ubuntu` instead of `clang`).

    Use a preprocessor program to find the proper compiler name and version.

    The `cc-version.sh` script is taken from the linux kernel tree, and will
    return a string containing the compiler name and version:
    `GCC|Clang MAJOR_V.MINOR_V`.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #902

commit cd9dcb4079b53555d3c1333650241f467f4d1cc4
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Sat May 27 11:57:40 2023 +0300

    9pfs: Change default 9p version to `9P 2000L`

    Using the `9p 2000U` version as the default leads to problems,
    especially when using Unikraft in binary compatibility mode, since it
    has a lot of limitation. There is no actual reason to use it as the
    default 9P protocol version, so we just change it to `2000L`.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #914

commit 31bcc48776be55f94d3f2de408b768de4cdeaa5a
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Wed May 17 11:15:32 2023 +0300

    plat/kvm: Add vmm option for arm64

    Add the option to choose a VMM when building for arm64. There are build
    options that depend on the chosen VMM (i.e. PCI support), so the VMM
    should be selected no matter what the chosen architecture is.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #900

commit de40bcc1440b324491a5e520523d5af40dc5e66f
Author: Michalis Pappas <michalis@unikraft.io>
Date:   Sat May 27 15:51:57 2023 +0200

    .github: Update Prerequisites in PR template to reference checkpatch.uk

    checkpatch.uk has been introduced to allow invoking checkpatch.uk with
    Unikraft's configuration from any directory. Update the Prerequisites
    section in the PR template to use that instead.

    Signed-off-by: Michalis Pappas <michalis@unikraft.io>
    Reviewed-by: Alexander Jung <alex@unikraft.io>
    Approved-by: Alexander Jung <alex@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #918

commit ef5b449be28c69a64da9f82733c03c15c0c28664
Author: Andrei Tatar <andrei.ttr@gmail.com>
Date:   Fri Apr 21 18:45:16 2023 +0200

    lib/syscall_shim: Sanitize ectx memory before use

    `ukplat_syscall_handler` allocates uninitialized stack space for saving
    ectx; this coupled with brittle store/load routines (e.g., x86
    XSAVE/XRSTOR) can result in a fatal fault.
    This change sanitizes the allocated space before use.
    Sanitizing is preferable to zero-ing out the entire area because
    (1) we're on the syscall hot path, and (2) it's only needed in specific
    situations.

    Signed-off-by: Andrei Tatar <andrei.ttr@gmail.com>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #863

commit ffdbb486c4dd3fce002607d8de76c8cff4c126c4
Author: Andrei Tatar <andrei.ttr@gmail.com>
Date:   Fri Apr 21 18:24:12 2023 +0200

    arch/*: Add sanitization function for ectx memory

    Most context saving instructions/routines overwrite the target area with
    a valid representation that can be loaded back. x86 XSAVE/XSAVEOPT are
    an exception, as garbage data can remain in the context area causing the
    following XRSTOR to fault. Thus any potentially dirty memory passed to
    XSAVE* must be (minimally) sanitized before its first use.
    This change introduces `ukarch_ectx_sanitize` as a function to perform
    this sanitization if needed. It differs from `ukarch_ectx_init` in that
    it does only the minimum work necessary to make memory ready for
    `ukarch_ectx_store`, instead of preparing a valid argument for
    `ukarch_ectx_load`.

    Signed-off-by: Andrei Tatar <andrei.ttr@gmail.com>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #863

commit 988b7eddc3601d6a6cc394e71b2a2f9befff99c2
Author: Christiano Haesbaert <haesbaert@haesbaert.org>
Date:   Wed May 17 10:19:42 2023 +0200

    lib/uknetdev: Fix typo in uk_netdev_tx_one

    Signed-off-by: Christiano Haesbaert <haesbaert@haesbaert.org>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Approved-by: Alexander Jung <alex@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #901

commit b0da6bfc5286027fd4b77256e4bef5725cbeaba9
Author: Alexander Jung <alex@nder.sh>
Date:   Mon May 15 23:09:49 2023 +0200

    Release: v0.13.0 Atlas

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Signed-off-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Signed-off-by: Alexander Jung <alex@unikraft.io>

commit 8da5cbb6cd6e973a4c6cdbb4b113d5fc222a57fb
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Mar 24 17:33:17 2023 +0100

    lib/ukargparse: Support escaping of quotes

    This commit introduces the support of escaping single (`'`) and double
    quotes (`"`) with the escape character `\`. The behaviour is similar to
    what one expects from Unix shells, like `sh` or `bash`.

    Single-quoted characters and character sequences preserve each character.
    Double-quoted characters and character sequences preserve each character
    except the backslash `\`. The backslash can be used to switch of the
    special meaning of a character, like the double quote (`\"`) or a
    backslash (`\\`).

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #893

commit 7279c2d240e92285aaf2e7ebd48813a70f3d20a7
Author: Costin Sin <sin.costinrobert@gmail.com>
Date:   Sat May 13 06:48:31 2023 +0000

    lib/posix-time: Add clock_nanosleep syscall

    clock_nanosleep syscall should mimic the nanosleep syscall
    when the clockid equals CLOCK_REALTIME and the TIMER_ABSTIME flag is
    missing.

    Signed-off-by: Costin Sin <sin.costinrobert@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #891

commit 8ea48c6f064f62ab007300d87de93bb8f61f854c
Author: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
Date:   Tue Apr 4 20:17:40 2023 +0000

    lib/vfscore: Dynamically allocate mount paths

    Currently `m_path` and `m_special` are statically-allocated arrays,
    meaning their storage spaces are wasted in `static struct mount`
    variables.  Dynamically allocate these variables to save on binary size.

    Also add initcalls to initialize `struct mounts` in lib/posix-event,
    lib/posix-socket and lib/vfscore.

    Signed-off-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #826

commit a7698597cd20b726dc15405368c3bf23050304c8
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Sat May 13 01:28:57 2023 +0300

    lib/vfscore: Initialize lists for stdio_vnode

    The VFS `struct vnode` structure has two `uk_list_head` members:
    `v_link` and `v_names`. These need to be initialized by a dedicated
    macro / function, such as `UK_LIST_HEAD_INIT`.

    The `stdio_vnode` variable (of type `struct vnode`) is not initializing
    these members (they are filled with zeros). This will cause crashes when
    using them.

    This commit fixes that by properly initializing the `v_link` and
    `v_names` members of the `stdio_vnode` variable.

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #889

commit 7b76234d3351c4d4414ba341c2d4fb9fd6220b62
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Sat May 13 01:45:43 2023 +0300

    lib/vfscore: Add semicolon to DPRINTF macro

    The `DPRINTF()` macro in `vfscore` requires a semicolon (`;`). If this
    is not present (once `DEBUG_VFS` is enabled), a build issue occurs.

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #890

commit cb35dfff57bdc7b7e2896922fd0743e4f25f5972
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Mon Mar 13 11:12:46 2023 +0530

    lib/uklock: Add SMP-safe reader-writer lock

    This commit introduces a reader-writer lock. To avoid
    starvation of readers and writer, the lock maintains the current
    count of readers and writers waiting for the lock. New readers give
    priority to waiting writers and writers give priority to readers on
    unlock.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit 362ddab80a491a4ed3a7d2354813f2fb94282086
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 15:49:53 2023 +0530

    lib/uklock: Make semaphore SMP safe

    On uniprocessor systems, it is sufficient to disable interrupts.
    In SMP environments, however, it is not because a thread executing on a
    different core can give rise to a race condition. Hence, to make the
    semaphore SMP safe, we use a spinlock.

    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit edda7dff6f86d94ef46342a3f71974158469826b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 15:06:02 2023 +0530

    lib/uklock: Make mutex SMP safe

    We can safely acquire a lock on uniprocessor systems by disabling the
    interrupts, but this does not work in an SMP environment. Hence, to
    make the mutex SMP safe, this commit uses atomic compare exchange.
    The commit also makes recursive locking optional (disabled by default).
    While this is a breaking change, recursive locks are discouraged and
    should only be used with caution. The current Unikraft core does not
    use recursive locks anywhere.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit f205fee3da57c467ce1cf9cf33f88d529e79875b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 12:22:01 2023 +0530

    lib/uklock: Provide irqf wrappers for uk_spinlock

    Holding a spinlock which is required by an interrupt handler, causes a
    deadlock. To avoid this, the programmer must disable the interrupt
    before acquiring such spinlocks. This involves saving the interrupt
    flags before acquiring the spinlock and restoring them after
    releasing the spinlock.

    This commit provides versions of the ukplat_spin_* macros for the
    uk_spinlock.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit d073d652299d53509d059b60706eee236d5c0d10
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Sun Mar 12 13:25:56 2023 +0530

    lib/uksched: Add unconditional wait and wakeup_one

    This commit adds an unconditional wait, which is required
    for reader-writer locks. The commit also adds an interface to
    wakeup only a single thread sleeping on a wait queue.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit a078828e0d7a5d33b3d2c4bd62b79e02ddcf7b9b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 16:52:53 2023 +0530

    lib/uksched: Make wait queues SMP safe

    Wait queues use a linked list to store the threads waiting on a
    particular condition. But operations such as add to and remove
    from the list are not SMP safe. Hence, this commit associates
    a spin lock with each wait queue.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit 3970edf400001f0fb62a86a1dea898e323aafd3e
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 12:17:50 2023 +0530

    include/arch: Add macros for atomic add, sub, or

    This commit adds macros to atomically add, subtract, and
    perform a bitwise or based on the builtins provided by GCC.

    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit dedc1b71eecc0ac25eb60a5d62a7a10f9b7b7c28
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 17:24:10 2023 +0200

    lib/vfscore: Avoid recursive locking in sys_rename

    If the source and destination directories are the same in sys_rename,
    the vnode is locked two times. This is problematic with non-recursive
    mutexes. Also the double checks for access are not needed. This commit
    adds a check to make sure in this case, only a single lock is done and
    redundant checks are avoided.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #888

commit 55cf96d011284e35fced79e8d8bac4934d0c8d6d
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 16:19:06 2023 +0200

    lib/ukswrand: Add missing errno include

    This commit adds an include for errno.h that might not be included
    otherwise and causes the build to fail.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #887

commit dfe489a4f27aff6c74b2c7c8b111e0afb73e5a96
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 14:00:38 2023 +0200

    lib/uk9p: Add workaround for QEMU WSTAT fsync bug

    This commit adds a workaround for a bug in QEMU where performing
    an fsync using the WSTAT command in 9P2000.u leads to a zero-sized
    response.

    Checkpatch-Ignore: SUSPECT_CODE_INDENT
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #886

commit d2c0ccd32602e337c12fb50867a2b24530fa0f8f
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 13:58:50 2023 +0200

    lib/9pfs: Fix wrong fid for fsync in 9P2000.u

    Performing an fsync with the 9P2000.u protocol version previously
    resulted in an I/O error. This is because we used the wrong fid
    in the request. This commit moves the implementation of setattr
    into a separate function that accepts the fid to use, and adjusts all
    callers to provide the fid.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #886

commit d7f598242afd95dceab42983d8d616885e618cbf
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Fri Feb 3 13:41:38 2023 +0200

    lib/nolibc: Add -ffreestanding flag

    GCC optimizes the use of `memcmp()` if the `-ffreestanding` flag is
    missing. In the current configuration, the flag is missing for GCC <= 9.
    The resulting optimization causes in an infinite loop for `lib/nolibc`.

    This commit fixes the issue by adding the `-ffreestanding` flag for
    `lib/nolibc`, irrespective of the GCC version.

    GitHub-Fixes: #728

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #740

commit 7eac25ea53ae833294652d6f38d04732612145b6
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 22:48:53 2023 +0300

    lib/posix-process: Fix debug printing of TIDs

    This commit makes so that the correct info will be printed when the current
    thread gets killed. Before, instead of the actual TID, the empty TID from
    the iterator would be printed.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit d4100c9dc4dfffdebd48ce8788d04ca3fa75d066
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 13:07:48 2023 +0300

    lib/posix-process: Reserve PID/TID 0 for kernel

    This commit marks the TID/PID as unavailable to mimic the behaviour of
    other kernels. This change also make pthread_rwlocks from glibc work in
    binary compatibility mode.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit a1c73be910b779b3b57a5ae79435d4f86b488fa2
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 12:44:58 2023 +0300

    lib/posix-process: Correct MAX_PID config option

    This commit changes the tid_map size to reflect the kernel
    reservation of the 0 TID/PID value. Before, the first thread
    would set the 0 position in all used structures. Now, because
    it will be already set, we need to make room for another.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit ddefe64f12ab4599f0ea3064bbbfedbf5205384f
Author: Andra Paraschiv <andra@unikraft.org>
Date:   Wed May 10 13:40:27 2023 +0300

    lib/vfscore: Fix file path resolution for 9pfs setup

    The path resolution doesn't correctly work for a set of file cases
    (e.g. symlinks to binaries or shared libraries).

    One setup example is using 9pfs and the entire root local filesystem,
    while running the "ls" binary and loading the shared libraries:

    unikraft/support/scripts/qemu-guest -k build/app-elfloader_qemu-x86_64
    -e / -a "/bin/ls /"

    A "/" character is omitted from the last part of the path e.g. "/binls"
    instead of "/bin/ls". Update the logic to include the missing character.

    Signed-off-by: Andra Paraschiv <andra@unikraft.org>
    Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #883

commit b2c2164eeb2745325489003dc6b52354c02a9a4d
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri May 5 15:44:28 2023 +0200

    lib/vfscore: `fs0` as default device name for 9PFS

    This commit changes the default device/tag name for an automatically
    mounted 9pfs root volume from `rootfs` to `fs0`. This is done for
    convenience because `fs0` is the tag name that the `qemu-guest` support
    script uses to name the first 9pfs share.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #875

commit 5784d007b1d2b727d3151f84ea70e5dd4683df32
Author: Andrei Tatar <andrei@unikraft.io>
Date:   Mon May 8 11:02:45 2023 +0200

    build: Disable compiler control flow protection

    Compiler flag -fcf-protection sets control-flow integrity measures
    that improve security, and sometimes defaults to enabled on distro
    compilers. Some aspects of this feature are implemented in the compiler
    header <cet.h> for e.g., stack unwinders. If this header is missing some
    programs fail to compile.
    Since we don't (yet) support pulling compiler headers into unikraft
    build, this change disables cf-protection globally.

    Signed-off-by: Andrei Tatar <andrei@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #881

commit cfc103cf6fc09add1291990a8b44a172a54195c5
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Sun May 7 13:53:19 2023 +0300

    plat/kvm/x86: Fix register names for clang

    `clang` does not understand the `rflags` register name, so the build
    will fail. On the other hand, `gcc` does not understand `flags`, so the
    register naming needs to be placed inside `#ifdef` guards.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #877

commit c04312c813a9ce47476f3ea7ece77f22cd888dcd
Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
Date:   Sun Apr 16 15:08:17 2023 +0200

    plat/*, lib/ukalloc: Use PAGE_ALIGN_UP(), PAGE_ALIGN_DOWN()

    We have PAGE_ALIGN_DOWN, PAGE_ALIGN_UP, and PAGE_ALIGN macros, but don't
    use them consistently. At places we still have code that does custom
    ALIGN_DOWN, ALIGN_UP, and masks. Use appropriate macros everywhere.

    This patch was generated by the following Coccinelle rule:

        @@
        expression E;
        @@

        - ALIGN_DOWN(E, __PAGE_SIZE)
        + PAGE_ALIGN_DOWN(E)

        @@
        expression E;
        type T;
        @@

        - ALIGN_DOWN(E, (T) __PAGE_SIZE)
        + PAGE_ALIGN_DOWN(E)

        @@
        expression E;
        @@

        - ALIGN_UP(E, __PAGE_SIZE)
        + PAGE_ALIGN_UP(E)

        @@
        expression E;
        type T;
        @@

        - ALIGN_UP(E, (T) __PAGE_SIZE)
        + PAGE_ALIGN_UP(E)

        @@
        expression E;
        @@

        - (E + PAGE_SIZE - 1) & PAGE_MASK
        + PAGE_ALIGN(E)

    Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
    Reviewed-by: Dragos Petre <dragos.petre27@gmailcom>
    Reviewed-by: Alexandru Calciu <alxcalciu@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #842

commit 5d9c4d702ec4a6e9de4e848a727db21e06d5d3b7
Author: Maria Sfiraiala <maria.sfiraiala@gmail.com>
Date:   Mon May 8 10:49:43 2023 +0300

    lib/{nolibc,isrlib}: Modify pointer comparison

    This commit typecasts `src` and `dst` strings from `memmove()` to ensure
    that their values are treated as pointers.

    It also modifies the function implementation to handle overlapping.

    Co-authored-by: Soumya Ranjan <ranjan42069@gmail.com>
    Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Signed-off-by: Soumya Ranjan <ranjan42069@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #880

commit 4e139b3164bb4ead5cec2760ea0f3fd4aecb762c
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Apr 12 11:09:26 2023 +0200

    build: Do not use segment annotations on linuxu

    For the linuxu platform we rely on the default linker script and only
    add some additional sections on top of that one. That also means that
    there aren't any segments defined. This makes the segment specification
    opt-in instead of assuming the segments are always defined.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: COMPLEX_MACRO
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #833

commit 7255b0ee1209d3309a610d8ea516fbc21ea84e27
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Apr 12 11:06:17 2023 +0200

    lib/ukdebug: Mark tracepoint sections as unallocated notes

    At runtime we don't care about the content of them, and we only need
    them on host side to decode the trace buffer.
    This also prevents the linker from adding a segment for these sections.
    Because the resulting segment sometimes only contained these two
    sections, the final `strip` step would end up with an empty segment.
    And in the case of the linuxu platform the resulting image was not
    working anymore.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #833

commit d57a4c7cd10ab8d781a089629cb310b8e8de3c91
Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
Date:   Wed May 10 14:12:39 2023 +0300

    plat/linuxu: Avoid re-initialization of the `heap` and `initrd`

    Keep a locally declared static variable `init` to cache the
    current amount of memory region descriptors. This way, whenever
    `ukplat_memregion_count` is called, `__linuxu_plat_heap_init` and
    `__linuxu_plat_initrd_init` do not have to be executed more than
    once.

    Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #878

commit 372475c140863dabab697f01ab485c971a3ba054
Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
Date:   Wed May 10 14:12:01 2023 +0300

    plat/linuxu: Add check for memory region index out of range

    Ensure that we do not try to fetch a memory region descriptor by an
    index that is larger than our current memory region descriptor count.

    Furthermore, this guarantees that `ukplat_memregion_count` is always
    called before `ukplat_memregion_get` is executed fully. This way we
    will always have the memory region descriptors as well as their count
    set up and available before we try to fetch one.

    Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
    GitHub-Fixes: #766
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #878

commit d39b30308e957893cd2bed2115aeb056f2b08b59
Author: Alexander Jung <alex@unikraft.io>
Date:   Mon May 8 07:43:37 2023 +0000

    support/scripts: Add additional recognised Git trailers to checkpatch

    This commit introduces 3 additional Git trailers to be recognised by the
    checkpatch program:

     - GitHub-Fixes   - Used to reference and address an open issue, often
                        a specific bug or problem. GitHub will automatically
                        close the issue once the commit with this Git
                        trailer is merged.
     - GitHub-Closes  - Used to reference an open issue or PR, which is not
                        specific to a particular bug.  For example, it can
                        be used to supercede another PR.  GitHub will
                        automatically close the referenced issue or PR once
                        a commit with this Git trailer is merged.
     - Co-authored-by - Similar to providing additional Signed-off-by's,
                        this trailer is recognised by GitHub and helps
                        attribute authorship, making the user's profile
                        more visible.
     - Approved-by    - Signifies the authoritive representative (usually a
                        project maintainer) who approved the commit.

    Additional adjustments to the checkpatch script are made in order to
    recognise non-standard Git trailer values (those from GitHub).

    Signed-off-by: Alexander Jung <alex@unikraft.io>
    Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #879

commit 47c243c394548b1198951f44af1c7101bd868589
Author: Aryan Verma <aryanvarma7272@gmail.com>
Date:   Thu Feb 16 15:19:32 2023 +0530

    doc: Add Codacy code quality status badge to README.md

    GitHub-Fixes: #650
    Signed-off-by: Aryan Verma <aryanvarma7272@gmail.com>
    Co-authored-by: Alexander Jung <alex@unikraft.io>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #764

commit 84172dbfbe07b91cade20eb6c88f2c4a1c2e6255
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Mon May 8 16:38:14 2023 +0200

    lib/uklibparam: Fixes for review PR #867

    Commits
     - 7741af97 "`UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`"
     - 1cc3a2f6 "Rewrite of parser"
     - 243f0c45 "Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S"
     - 910b9bef "Add linker scripts to link dependencies"
    should have been included with PR #867 but got merged by mistake with
    PR #868 due to a dependency.

    This commit addresses the comments provided with the review for PR #867.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #882

commit 275429893d983ff13d9874b310b4566c254631fe
Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
Date:   Sun Apr 16 11:57:44 2023 +0200

    plat/xen: Fix unchecked uk_palloc() value in x86/mm.c

    The return value of uk_palloc is not checked in _arch_init_p2m.

    Allocation failure at that point should never happen, but it's not a
    reason not to check.

    At this stage, in the event of a failure, we should probably abort the
    boot altogether.

    This bug was detected using the following Coccinelle spatch:

        @call@
        expression ptr;
        position p;
        @@

        ptr@p = uk_palloc(...);

        @ok@
        expression ptr;
        position call.p;
        @@

        ptr@p = uk_palloc(...);
        ... when != ptr
        (
         (ptr == NULL || ...)
        |
         (ptr != NULL || ...)
        )

        @depends on !ok@
        expression ptr;
        position call.p;
        @@

        ptr@p = uk_palloc(...);
        + if (ptr == NULL) return;

    Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Simon Kuenzer  <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #839

commit b240edc27abe95d22034d1b4ea7d582dd93098c2
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Mon May 1 19:13:55 2023 +0300

    lib/vfscore: Handle `FIONBIO` command in `pipe_ioctl()`

    The current `ioctl` implementation for pipes does not handle
    the `FIONBIO` command, which leads to a negative error value being
    returned. This commit introduces a simple case which sets the FNONBLOCK
    flag when such a command is passed.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
    Reviewed-by: Eduard-Florin Mihailescu <mihailescu.eduard@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #874

commit 0f75e55ba08647b2e398a19aea35f31b06c0da6a
Author: Andrei Tudor TOPALĂ (101668) <topala.andrei@gmail.com>
Date:   Fri Apr 15 00:36:51 2022 +0300

    plat/common: Add firecracker shutdown signal

    Firecracker emulates a PS/2 controller and detects attempted writes to
    the CPU reset line.

    Co-authored-by: Marco Schlumpp <marco@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 59111c4f28254c0614c62d56113e2048300a5549
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 11:19:33 2023 +0200

    plat/kvm: Include target hypervisor in image name

    This makes it more clear on what hypervisor the image works on.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 789cdba609d4c879e6b8bfc05c7b89cc85c1f3b7
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Tue Apr 11 17:58:08 2023 +0200

    plat/kvm/x86: Use position independent code for lxboot

    This should make it easier in the future to extend the entry point to
    support proper boot loaders such as the one in QEMU.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit f0ae44de725f698505060756d85558361fcd2abb
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:47:36 2023 +0100

    plat/kvm/x86: Workaround re-mapping low-mem areas

    The paging code currently does not unmap the memory area before the
    kernel image, but then tries to re-map any region in that area.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit e85a0cd860e4166b26269785e229c6676b175a30
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:43:51 2023 +0100

    plat/kvm/x86: Add an entry point for the firecracker hypervisor

    This is currently not conforming to the actual Linux boot protocol and
    only suitable for firecracker. The kernel image would have to include a
    proper Linux boot protocol header to allow loading with proper
    bootloaders such as the one in QEMU.

    Co-authored-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit ebb4795a3a41e8196f501f5b0b7d7a88361ad7f3
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:41:00 2023 +0100

    plat/kvm/x86: Add structures/definitions for the linux boot protocol

    This defines the necessary structures to parse the information passed by
    a linux boot protocol compatible bootloader.

    Co-authored-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit deef081dd04ee254c03266b431befb3ae4d2a329
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:38:27 2023 +0100

    plat/kvm: Add hypervisor/boot protocol configuration

    This allows the configuration of a target hypervisor. Depending on the
    hypervisor a suitable boot protocol is selected.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 7190449a7a0bdd0ffcd90c37fa0a8d2fc287c804
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Feb 13 16:58:19 2023 +0100

    plat/common: Extract non-multiboot specific memory region helpers

    The multiboot entry point had a few internal functions that are also
    useful for other entry points.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 70b260d0668eb0850465c525ac1ca6b697b23ce3
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Tue Apr 25 10:05:41 2023 +0200

    include/uk: Simplify RANGE_OVERLAP macro

    We can simplify the check by observing that there are only two
    conditions necessary to check whether a range does *not* overlap:
     - the end of range 0 is before the start of range 1
       [--0--) [--1--)
     - OR the start of range 0 is after the end of range 1
       [--1--) [--0--)
    Inverting this gives us a simple condition for checking whether ranges
    *do* overlap.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 7346338847c8449389316ffc2c554a5d3637ba69
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:34:39 2023 +0100

    plat/*: Introduce cmdline length to bootinfo

    Some boot protocols already have the length information and the internal
    command line handling works with non-null terminated strings anyway.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit ad684b5175f70e78dc37ed63d8a124c2b6e53d1c
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 13:09:03 2023 +0100

    plat/kvm/x86: Don't create fine-grained mapping for low memory

    Mapping all memory makes the page table more independent of the actual
    boot protocol. Firecracker currently puts the protocol information at a
    very low address (0x7000).

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit c7c221dc66b124752250a39a677e4a9bbe3f2c24
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Fri Feb 24 17:18:55 2023 +0100

    plat/kvm: Remove intermediate relocatable object step

    This object was previously used to hide all symbols except the entry
    point. But this step was removed making the relocatable object creation
    unnecessary.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #789

commit 195cc32f7e5e65d8929ae65b8fa9203ddf246ba6
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Thu Mar 16 14:13:06 2023 +0200

    plat/drivers/ofw: Fix search in `fdt_node_offset_by_compatible_list`

    The current implementation returns as soon as a node that matches a
    compatible string is found. However, we should iterate through all of
    the compatible list to make sure that we return the node with the least
    offset value such that future searches will not skip any matching nodes.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
    Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
    Approved-by: Michalis Pappas <michalis@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #805

commit dfbf3ffd2cf2542e97129e017f4a06afd65b079c
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Thu Mar 16 14:10:46 2023 +0200

    plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one`

    When a node is missing the "ranges" property, offset should be set to 0.
    The current implementation sets offset to the address to be translated,
    which ignores the fact that `fdt_default_translate`  is later called.
    The latter function adds the offset to the same address,
    resulting in doubling the effective address, when in fact a 1-to-1
    mapping is necessary.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
    Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
    Approved-by: Michalis Pappas <michalis@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #805

commit 4792af49d89c1c0e141b40720d4ec1b89530411a
Author: Takeru Wada <takew@asg.cs.tuat.ac.jp>
Date:   Mon Mar 13 14:37:51 2023 +0000

    lib/nolibc: Remove warnings of timespec

    This commit fixes the definition of pointer arguments in GCC >= 11.

    Signed-off-by: Takeru Wada <takew@asg.cs.tuat.ac.jp>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #800

commit ec2c285ea91fac0a178e6c550c122e6bc82f10dd
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Mar 16 17:31:42 2023 +0100

    lib/ukboot: Print environment variables before entering main

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 3f89855cf89e38a009d85da26b1355f167985ca8
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Tue Mar 14 15:18:12 2023 +0100

    lib/posix-environ: Symbol aliases for `environ`

    In order to comply with common libc behavior, we provide the following
    symbol aliases for environ`: `_environ`, `__environ`, `___environ`.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit fefaa0591880d69770a869cbc06f85b38872dc61
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 01:45:52 2023 +0100

    lib/posix-environ: Variables from kernel command line

    Introduces the ability to populate additional environment variables via the
    kernel command line.

    Checkpatch-Ignore: SPACING
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 6f2798a9f2a95d02c9aec763a3c6e7649350f104
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Wed Feb 15 00:32:29 2023 +0100

    lib/posix-environ: Compiled-in environment variables

    We introduce the ability to compile-in up to 16 environment variables.
    The values can be set via `menuconfig`. The initial `environ` array is
    automatically sized to match the number of compiled-in values.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit a46c0c1d63a71742e79b4fdd1bf690df560abf8d
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 9 21:54:40 2023 +0100

    lib/posix-environ: Register and make it compile

    This commit integrates and enables compiling of the imported environment
    helper functions (see previous commit).

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit e9b7d00e5407dc0c4cfeb912b2f3329cdc5ff28b
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Wed Feb 8 17:01:41 2023 +0100

    lib/posix-environ: Import from musl 1.2.3

    This commit imports needed code from musl 1.2.3. This concentrates mostly
    on the following helper functions for environment variables:
     - `clearenv()`
     - `getenv()`
     - `putenv()`
     - `setenv()`
     - `unsetenv()`

    Checkpatch-Ignore: FUNCTION_WITHOUT_ARGS
    Checkpatch-Ignore: LINE_SPACING
    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: TRAILING_STATEMENTS
    Checkpatch-Ignore: SIZEOF_PARENTHESIS
    Checkpatch-Ignore: TYPO_SPELLING
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 7741af977fd2c723272abfce8c166deb125cf6c6
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 01:42:55 2023 +0100

    lib/uklibparam: `UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`

    This commit provides `UK_LIBPARAM_PARAM_ALIAS()` and
    `UK_LIBPARAM_PARAM_ARR_ALIAS()` which are variants of `UK_LIBPARAM_PARAM()`
    and `UK_LIBPARAM_PARAM_ARR()`. These registration macros allow to set a
    custom parameter name instead of deriving it from the variable name.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 1cc3a2f6e33d1dbb390d24e79f73b86b34597b23
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 00:42:29 2023 +0100

    lib/uklibparam: Rewrite of parser

    This commit introduces a rewrite of `lib/uklibparam`. The rewrite ensures
    that it is errno-free, malloc-free, and TLS-free. This makes it ideal for
    processing library parameters early during boot. It includes an own and
    modified version of `strtoull` function that is used for parsing integer
    values from the command line.
    Additionally, the parser can handle arrays more intuitively (and for any
    data type of the elements) while fully utilizing pre-processed argument
    vectors. It relies on the fact that whitespacing and quoting is already
    handled (e.g., by `lib/ukargparse`). There are new types that are more
    inline with the ones defined by ukstore.

    This rewrite introduces the ability to provide a parameter description
    with updated parameter registration macros:
      UK_LIBPARAM_PARAM(variable, type, description)
      UK_LIBPARAM_PARAM_ARR(variable, type, count, description)
    The description is printed on the help output.

    The previous interfaces are kept for backwards compatibility. However,
    it is planned to remove them as soon as the code base is completely
    adopted.

    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: OPEN_BRACE
    Checkpatch-Ignore: MACRO_WITH_FLOW_CONTROL
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 243f0c45ca8060a230e0bde34783b75c0fefb47a
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 23 22:21:04 2023 +0100

    build: Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S

    .lds.S files are linker script files that use the C preprocessor in order
    to generate the final .lds file. This commit provides Unikraft's common
    declarations of `__LIBNAME__`, `__BASENAME__`, `__VARIANT__` to this
    pre-processing step so that they can be used for generating linker scripts.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 910b9befc07212f8b1313b234ce162dd6130e0d0
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 23 21:47:59 2023 +0100

    plat/*: Add linker scripts to link dependencies

    This commit adds needed linker scripts as dependency to the linking rule
    of the final image. This dependency was mostly indirectly covered via
    libraries. However, updates to platform linker scripts did not trigger
    relinking the final image.
    Additionally, pure API libraries (like `lib/ukfalloc`) would not even cause
    building a linker script that is shipped with the library or injected with
    an `EACHOLIB_SRCS` declaration. The library buildrule is generated but
    because no library object is generated, the linker script was never be part
    of a dependency list.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit ae0ee99ee2f79b8db511ab97a4f3d3f3218ca121
Author: calex257 <alexandru.calciu@stud.acs.upb.ro>
Date:   Sat Feb 25 17:53:56 2023 +0200

    lib/nolibc: Add README.md

    Add a brief description of nolibc, providing an overview
    of its purpose, usage and limitations.

    This commit also shows a relevant example of how to configure
    an application to use Unikraft-specific assertions or the ones
    implemented in nolibc.

    Signed-off-by: Alexandru Calciu <alexandru.calciu@stud.acs.upb.ro>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #778

commit 3e7a08afd4147f4f101a72765bf105968cce11f9
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:24:08 2023 +0200

    lib/vfscore: Cleanup sys_symlink

    This commit cleans up sys_symlink() according to the current coding
    conventions and uses separate jump labels for exits depending on
    if the vnode lock needs to be released or not.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 20a2f602813e407754f217b1804384b9289d21e2
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:19:05 2023 +0200

    lib/vfscore: Do not copy oldpath in symlink

    With the changes to the vnode ops definitions the symlink operation
    takes a constant string. We can thus just pass the input string on
    without having to copy it.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 429a017dcf3bd3b2429a87c55686cb47d81bb875
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:16:06 2023 +0200

    lib/ramfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 22c1a55814bd3763ea35285ae75a14ee5accf988
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:14:49 2023 +0200

    lib/devfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 3ab142f25240e39fe90c8fe97cbc0525e8ede89d
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:14:11 2023 +0200

    lib/9pfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit e04174a8eae7eaf16be08b93142ccd3266ce58d6
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:12:09 2023 +0200

    lib/vfscore: Make vnops strings constant

    The current vnode operations define strings as mutable, which
    makes it more difficult to do optimizations. Since no buffer size
    is supplied the strings can only be modified on a char-for-char
    basis anyways, which also limits the use-cases. In addition, no
    implementation of the vnode operations makes use of the
    mutability of the strings.

    This commit thus introduces the `const` keyword for all strings
    passed to vnode operations.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 7ef5bbccffa6592a0d6da0efedd3c63366ba3cbb
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 10:04:04 2023 +0200

    lib/posix-futex: Check for proper FUTEX_CLOCK_REALTIME usage

    The documentation specifies a list of operations which support this
    flag. This adds a check that explicitly rejects all invalid combinations
    and returns `ENOSYS` according to the documentation.

    Checkpatch-Ignore: ENOSYS
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 54d27549bfa6a0c3aaffe08d10c7e9a5101f8c0d
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 09:57:45 2023 +0200

    lib/posix-futex: Ignore FUTEX_PRIVATE_FLAG

    The flag can be specified for all operations and does not make a
    difference in the context of a single-process scenario. Therefore, we
    can ignore it.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit c905e263471c9081e457d1d0041a083dec53f828
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 16:44:35 2023 +0100

    lib/posix-futex: Implement subset of FUTEX_WAIT_BITSET

    Many modern applications use FUTEX_WAIT_BITSET to be able to set an
    absolute timeout. To accomplish that they set all bits in the val3/mask
    parameter, which makes the operation equivalent to a normal FUTEX_WAIT
    (except the absolute timeout value).

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 7683671942d29fb5c3cc4c6471f257f0dc290687
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 15:57:30 2023 +0100

    lib/uksched: Expose uk_thread_block_until

    This allows external API clients to specify an absolute deadline for
    waking up. This is potentially more precise because the `timeout` is
    relative to whenever uk_thread_block_timeout is actually taking the
    "current" time.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 5223ae6691e0d8ee449ece64f6f9bde3aaeb7643
Author: Nour-eddine Taleb <contact@noureddine.xyz>
Date:   Sat Mar 25 19:56:47 2023 +0000

    lib/uksched: fix docs

    Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #809

commit c00afb4d422af1377374bfee5d4ea52cec0cbea0
Author: Nour-eddine Taleb <contact@noureddine.xyz>
Date:   Thu Mar 23 23:15:24 2023 +0000

    lib/posix-futex/test: port the test cases to the new sched apis

    due to the changes in scheduling apis, it was necessary to update
    posix-futex tests which still relays on the old apis.

    GitHub-Fixes: #630
    Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #809

commit ce2e3dae5f8d876e38dcdcf0c3a83850cfb98dc8
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 11:22:18 2023 +0100

    plat/kvm/x86: Stop unwinding at _libkvmplat_entry2

    The _libkvmplat_entry2 function is called using assembler code that
    switches stacks. Therefore, a debugger can't unwind its frame. This
    inserts a CFI that marks the previous instruction pointer as undefined.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit 7f450a9834e4c31a938e8a59e72006ec9389cc18
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 15:15:52 2023 +0100

    plat/kvm/x86: Add unwinding information to interrupt/exception handlers

    This allows debuggers and profilers to unwind past interrupt/exception
    handlers.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit f87e378199fa87c07e77b36c5c979c9194fb1d93
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Dec 21 11:01:34 2022 +0100

    plat/x86: Add unwind information to system call handler

    Without this information debugging tools do not know how to properly
    unwind the _ukplat_syscall frame. For example, this causes them to
    output garbage output for back traces.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit b88c21a231243845cbc155e1c7f0bcccd181a1c5
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 11:40:13 2023 +0100

    arch/x86: Add helpers for CFI in assembler code

    This introduces helpers for maintaining frame information when using
    push and pop in assembler code.

    Checkpatch-Ignore: SPACING
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit 6d07539298dae30eb07f078942563af2be60acd9
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue May 24 20:17:14 2022 +0200

    lib/nolibc: Define u_(long|int|short_char) for _DEFAULT_SOURCE files

    These typedefs are commonly used in BSD code. Most libc libraries define
    them by default or for _DEFAULT_SOURCE files. Because unikraft is
    usually closer to Linux, this adopts the later approach.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.…
dragosp27 added a commit to dragosp27/unikraft that referenced this issue Jun 1, 2023
commit b0da6bfc5286027fd4b77256e4bef5725cbeaba9
Author: Alexander Jung <alex@nder.sh>
Date:   Mon May 15 23:09:49 2023 +0200

    Release: v0.13.0 Atlas

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Signed-off-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Signed-off-by: Alexander Jung <alex@unikraft.io>

commit 8da5cbb6cd6e973a4c6cdbb4b113d5fc222a57fb
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Mar 24 17:33:17 2023 +0100

    lib/ukargparse: Support escaping of quotes

    This commit introduces the support of escaping single (`'`) and double
    quotes (`"`) with the escape character `\`. The behaviour is similar to
    what one expects from Unix shells, like `sh` or `bash`.

    Single-quoted characters and character sequences preserve each character.
    Double-quoted characters and character sequences preserve each character
    except the backslash `\`. The backslash can be used to switch of the
    special meaning of a character, like the double quote (`\"`) or a
    backslash (`\\`).

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #893

commit 7279c2d240e92285aaf2e7ebd48813a70f3d20a7
Author: Costin Sin <sin.costinrobert@gmail.com>
Date:   Sat May 13 06:48:31 2023 +0000

    lib/posix-time: Add clock_nanosleep syscall

    clock_nanosleep syscall should mimic the nanosleep syscall
    when the clockid equals CLOCK_REALTIME and the TIMER_ABSTIME flag is
    missing.

    Signed-off-by: Costin Sin <sin.costinrobert@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #891

commit 8ea48c6f064f62ab007300d87de93bb8f61f854c
Author: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
Date:   Tue Apr 4 20:17:40 2023 +0000

    lib/vfscore: Dynamically allocate mount paths

    Currently `m_path` and `m_special` are statically-allocated arrays,
    meaning their storage spaces are wasted in `static struct mount`
    variables.  Dynamically allocate these variables to save on binary size.

    Also add initcalls to initialize `struct mounts` in lib/posix-event,
    lib/posix-socket and lib/vfscore.

    Signed-off-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #826

commit a7698597cd20b726dc15405368c3bf23050304c8
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Sat May 13 01:28:57 2023 +0300

    lib/vfscore: Initialize lists for stdio_vnode

    The VFS `struct vnode` structure has two `uk_list_head` members:
    `v_link` and `v_names`. These need to be initialized by a dedicated
    macro / function, such as `UK_LIST_HEAD_INIT`.

    The `stdio_vnode` variable (of type `struct vnode`) is not initializing
    these members (they are filled with zeros). This will cause crashes when
    using them.

    This commit fixes that by properly initializing the `v_link` and
    `v_names` members of the `stdio_vnode` variable.

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #889

commit 7b76234d3351c4d4414ba341c2d4fb9fd6220b62
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Sat May 13 01:45:43 2023 +0300

    lib/vfscore: Add semicolon to DPRINTF macro

    The `DPRINTF()` macro in `vfscore` requires a semicolon (`;`). If this
    is not present (once `DEBUG_VFS` is enabled), a build issue occurs.

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #890

commit cb35dfff57bdc7b7e2896922fd0743e4f25f5972
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Mon Mar 13 11:12:46 2023 +0530

    lib/uklock: Add SMP-safe reader-writer lock

    This commit introduces a reader-writer lock. To avoid
    starvation of readers and writer, the lock maintains the current
    count of readers and writers waiting for the lock. New readers give
    priority to waiting writers and writers give priority to readers on
    unlock.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit 362ddab80a491a4ed3a7d2354813f2fb94282086
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 15:49:53 2023 +0530

    lib/uklock: Make semaphore SMP safe

    On uniprocessor systems, it is sufficient to disable interrupts.
    In SMP environments, however, it is not because a thread executing on a
    different core can give rise to a race condition. Hence, to make the
    semaphore SMP safe, we use a spinlock.

    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit edda7dff6f86d94ef46342a3f71974158469826b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 15:06:02 2023 +0530

    lib/uklock: Make mutex SMP safe

    We can safely acquire a lock on uniprocessor systems by disabling the
    interrupts, but this does not work in an SMP environment. Hence, to
    make the mutex SMP safe, this commit uses atomic compare exchange.
    The commit also makes recursive locking optional (disabled by default).
    While this is a breaking change, recursive locks are discouraged and
    should only be used with caution. The current Unikraft core does not
    use recursive locks anywhere.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit f205fee3da57c467ce1cf9cf33f88d529e79875b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 12:22:01 2023 +0530

    lib/uklock: Provide irqf wrappers for uk_spinlock

    Holding a spinlock which is required by an interrupt handler, causes a
    deadlock. To avoid this, the programmer must disable the interrupt
    before acquiring such spinlocks. This involves saving the interrupt
    flags before acquiring the spinlock and restoring them after
    releasing the spinlock.

    This commit provides versions of the ukplat_spin_* macros for the
    uk_spinlock.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit d073d652299d53509d059b60706eee236d5c0d10
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Sun Mar 12 13:25:56 2023 +0530

    lib/uksched: Add unconditional wait and wakeup_one

    This commit adds an unconditional wait, which is required
    for reader-writer locks. The commit also adds an interface to
    wakeup only a single thread sleeping on a wait queue.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit a078828e0d7a5d33b3d2c4bd62b79e02ddcf7b9b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 16:52:53 2023 +0530

    lib/uksched: Make wait queues SMP safe

    Wait queues use a linked list to store the threads waiting on a
    particular condition. But operations such as add to and remove
    from the list are not SMP safe. Hence, this commit associates
    a spin lock with each wait queue.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit 3970edf400001f0fb62a86a1dea898e323aafd3e
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 12:17:50 2023 +0530

    include/arch: Add macros for atomic add, sub, or

    This commit adds macros to atomically add, subtract, and
    perform a bitwise or based on the builtins provided by GCC.

    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit dedc1b71eecc0ac25eb60a5d62a7a10f9b7b7c28
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 17:24:10 2023 +0200

    lib/vfscore: Avoid recursive locking in sys_rename

    If the source and destination directories are the same in sys_rename,
    the vnode is locked two times. This is problematic with non-recursive
    mutexes. Also the double checks for access are not needed. This commit
    adds a check to make sure in this case, only a single lock is done and
    redundant checks are avoided.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #888

commit 55cf96d011284e35fced79e8d8bac4934d0c8d6d
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 16:19:06 2023 +0200

    lib/ukswrand: Add missing errno include

    This commit adds an include for errno.h that might not be included
    otherwise and causes the build to fail.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #887

commit dfe489a4f27aff6c74b2c7c8b111e0afb73e5a96
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 14:00:38 2023 +0200

    lib/uk9p: Add workaround for QEMU WSTAT fsync bug

    This commit adds a workaround for a bug in QEMU where performing
    an fsync using the WSTAT command in 9P2000.u leads to a zero-sized
    response.

    Checkpatch-Ignore: SUSPECT_CODE_INDENT
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #886

commit d2c0ccd32602e337c12fb50867a2b24530fa0f8f
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 13:58:50 2023 +0200

    lib/9pfs: Fix wrong fid for fsync in 9P2000.u

    Performing an fsync with the 9P2000.u protocol version previously
    resulted in an I/O error. This is because we used the wrong fid
    in the request. This commit moves the implementation of setattr
    into a separate function that accepts the fid to use, and adjusts all
    callers to provide the fid.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #886

commit d7f598242afd95dceab42983d8d616885e618cbf
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Fri Feb 3 13:41:38 2023 +0200

    lib/nolibc: Add -ffreestanding flag

    GCC optimizes the use of `memcmp()` if the `-ffreestanding` flag is
    missing. In the current configuration, the flag is missing for GCC <= 9.
    The resulting optimization causes in an infinite loop for `lib/nolibc`.

    This commit fixes the issue by adding the `-ffreestanding` flag for
    `lib/nolibc`, irrespective of the GCC version.

    GitHub-Fixes: #728

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #740

commit 7eac25ea53ae833294652d6f38d04732612145b6
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 22:48:53 2023 +0300

    lib/posix-process: Fix debug printing of TIDs

    This commit makes so that the correct info will be printed when the current
    thread gets killed. Before, instead of the actual TID, the empty TID from
    the iterator would be printed.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit d4100c9dc4dfffdebd48ce8788d04ca3fa75d066
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 13:07:48 2023 +0300

    lib/posix-process: Reserve PID/TID 0 for kernel

    This commit marks the TID/PID as unavailable to mimic the behaviour of
    other kernels. This change also make pthread_rwlocks from glibc work in
    binary compatibility mode.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit a1c73be910b779b3b57a5ae79435d4f86b488fa2
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 12:44:58 2023 +0300

    lib/posix-process: Correct MAX_PID config option

    This commit changes the tid_map size to reflect the kernel
    reservation of the 0 TID/PID value. Before, the first thread
    would set the 0 position in all used structures. Now, because
    it will be already set, we need to make room for another.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit ddefe64f12ab4599f0ea3064bbbfedbf5205384f
Author: Andra Paraschiv <andra@unikraft.org>
Date:   Wed May 10 13:40:27 2023 +0300

    lib/vfscore: Fix file path resolution for 9pfs setup

    The path resolution doesn't correctly work for a set of file cases
    (e.g. symlinks to binaries or shared libraries).

    One setup example is using 9pfs and the entire root local filesystem,
    while running the "ls" binary and loading the shared libraries:

    unikraft/support/scripts/qemu-guest -k build/app-elfloader_qemu-x86_64
    -e / -a "/bin/ls /"

    A "/" character is omitted from the last part of the path e.g. "/binls"
    instead of "/bin/ls". Update the logic to include the missing character.

    Signed-off-by: Andra Paraschiv <andra@unikraft.org>
    Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #883

commit b2c2164eeb2745325489003dc6b52354c02a9a4d
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri May 5 15:44:28 2023 +0200

    lib/vfscore: `fs0` as default device name for 9PFS

    This commit changes the default device/tag name for an automatically
    mounted 9pfs root volume from `rootfs` to `fs0`. This is done for
    convenience because `fs0` is the tag name that the `qemu-guest` support
    script uses to name the first 9pfs share.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #875

commit 5784d007b1d2b727d3151f84ea70e5dd4683df32
Author: Andrei Tatar <andrei@unikraft.io>
Date:   Mon May 8 11:02:45 2023 +0200

    build: Disable compiler control flow protection

    Compiler flag -fcf-protection sets control-flow integrity measures
    that improve security, and sometimes defaults to enabled on distro
    compilers. Some aspects of this feature are implemented in the compiler
    header <cet.h> for e.g., stack unwinders. If this header is missing some
    programs fail to compile.
    Since we don't (yet) support pulling compiler headers into unikraft
    build, this change disables cf-protection globally.

    Signed-off-by: Andrei Tatar <andrei@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #881

commit cfc103cf6fc09add1291990a8b44a172a54195c5
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Sun May 7 13:53:19 2023 +0300

    plat/kvm/x86: Fix register names for clang

    `clang` does not understand the `rflags` register name, so the build
    will fail. On the other hand, `gcc` does not understand `flags`, so the
    register naming needs to be placed inside `#ifdef` guards.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #877

commit c04312c813a9ce47476f3ea7ece77f22cd888dcd
Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
Date:   Sun Apr 16 15:08:17 2023 +0200

    plat/*, lib/ukalloc: Use PAGE_ALIGN_UP(), PAGE_ALIGN_DOWN()

    We have PAGE_ALIGN_DOWN, PAGE_ALIGN_UP, and PAGE_ALIGN macros, but don't
    use them consistently. At places we still have code that does custom
    ALIGN_DOWN, ALIGN_UP, and masks. Use appropriate macros everywhere.

    This patch was generated by the following Coccinelle rule:

        @@
        expression E;
        @@

        - ALIGN_DOWN(E, __PAGE_SIZE)
        + PAGE_ALIGN_DOWN(E)

        @@
        expression E;
        type T;
        @@

        - ALIGN_DOWN(E, (T) __PAGE_SIZE)
        + PAGE_ALIGN_DOWN(E)

        @@
        expression E;
        @@

        - ALIGN_UP(E, __PAGE_SIZE)
        + PAGE_ALIGN_UP(E)

        @@
        expression E;
        type T;
        @@

        - ALIGN_UP(E, (T) __PAGE_SIZE)
        + PAGE_ALIGN_UP(E)

        @@
        expression E;
        @@

        - (E + PAGE_SIZE - 1) & PAGE_MASK
        + PAGE_ALIGN(E)

    Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
    Reviewed-by: Dragos Petre <dragos.petre27@gmailcom>
    Reviewed-by: Alexandru Calciu <alxcalciu@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #842

commit 5d9c4d702ec4a6e9de4e848a727db21e06d5d3b7
Author: Maria Sfiraiala <maria.sfiraiala@gmail.com>
Date:   Mon May 8 10:49:43 2023 +0300

    lib/{nolibc,isrlib}: Modify pointer comparison

    This commit typecasts `src` and `dst` strings from `memmove()` to ensure
    that their values are treated as pointers.

    It also modifies the function implementation to handle overlapping.

    Co-authored-by: Soumya Ranjan <ranjan42069@gmail.com>
    Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Signed-off-by: Soumya Ranjan <ranjan42069@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #880

commit 4e139b3164bb4ead5cec2760ea0f3fd4aecb762c
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Apr 12 11:09:26 2023 +0200

    build: Do not use segment annotations on linuxu

    For the linuxu platform we rely on the default linker script and only
    add some additional sections on top of that one. That also means that
    there aren't any segments defined. This makes the segment specification
    opt-in instead of assuming the segments are always defined.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: COMPLEX_MACRO
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #833

commit 7255b0ee1209d3309a610d8ea516fbc21ea84e27
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Apr 12 11:06:17 2023 +0200

    lib/ukdebug: Mark tracepoint sections as unallocated notes

    At runtime we don't care about the content of them, and we only need
    them on host side to decode the trace buffer.
    This also prevents the linker from adding a segment for these sections.
    Because the resulting segment sometimes only contained these two
    sections, the final `strip` step would end up with an empty segment.
    And in the case of the linuxu platform the resulting image was not
    working anymore.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #833

commit d57a4c7cd10ab8d781a089629cb310b8e8de3c91
Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
Date:   Wed May 10 14:12:39 2023 +0300

    plat/linuxu: Avoid re-initialization of the `heap` and `initrd`

    Keep a locally declared static variable `init` to cache the
    current amount of memory region descriptors. This way, whenever
    `ukplat_memregion_count` is called, `__linuxu_plat_heap_init` and
    `__linuxu_plat_initrd_init` do not have to be executed more than
    once.

    Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #878

commit 372475c140863dabab697f01ab485c971a3ba054
Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
Date:   Wed May 10 14:12:01 2023 +0300

    plat/linuxu: Add check for memory region index out of range

    Ensure that we do not try to fetch a memory region descriptor by an
    index that is larger than our current memory region descriptor count.

    Furthermore, this guarantees that `ukplat_memregion_count` is always
    called before `ukplat_memregion_get` is executed fully. This way we
    will always have the memory region descriptors as well as their count
    set up and available before we try to fetch one.

    Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
    GitHub-Fixes: #766
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #878

commit d39b30308e957893cd2bed2115aeb056f2b08b59
Author: Alexander Jung <alex@unikraft.io>
Date:   Mon May 8 07:43:37 2023 +0000

    support/scripts: Add additional recognised Git trailers to checkpatch

    This commit introduces 3 additional Git trailers to be recognised by the
    checkpatch program:

     - GitHub-Fixes   - Used to reference and address an open issue, often
                        a specific bug or problem. GitHub will automatically
                        close the issue once the commit with this Git
                        trailer is merged.
     - GitHub-Closes  - Used to reference an open issue or PR, which is not
                        specific to a particular bug.  For example, it can
                        be used to supercede another PR.  GitHub will
                        automatically close the referenced issue or PR once
                        a commit with this Git trailer is merged.
     - Co-authored-by - Similar to providing additional Signed-off-by's,
                        this trailer is recognised by GitHub and helps
                        attribute authorship, making the user's profile
                        more visible.
     - Approved-by    - Signifies the authoritive representative (usually a
                        project maintainer) who approved the commit.

    Additional adjustments to the checkpatch script are made in order to
    recognise non-standard Git trailer values (those from GitHub).

    Signed-off-by: Alexander Jung <alex@unikraft.io>
    Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #879

commit 47c243c394548b1198951f44af1c7101bd868589
Author: Aryan Verma <aryanvarma7272@gmail.com>
Date:   Thu Feb 16 15:19:32 2023 +0530

    doc: Add Codacy code quality status badge to README.md

    GitHub-Fixes: #650
    Signed-off-by: Aryan Verma <aryanvarma7272@gmail.com>
    Co-authored-by: Alexander Jung <alex@unikraft.io>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #764

commit 84172dbfbe07b91cade20eb6c88f2c4a1c2e6255
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Mon May 8 16:38:14 2023 +0200

    lib/uklibparam: Fixes for review PR #867

    Commits
     - 7741af97 "`UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`"
     - 1cc3a2f6 "Rewrite of parser"
     - 243f0c45 "Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S"
     - 910b9bef "Add linker scripts to link dependencies"
    should have been included with PR #867 but got merged by mistake with
    PR #868 due to a dependency.

    This commit addresses the comments provided with the review for PR #867.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #882

commit 275429893d983ff13d9874b310b4566c254631fe
Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
Date:   Sun Apr 16 11:57:44 2023 +0200

    plat/xen: Fix unchecked uk_palloc() value in x86/mm.c

    The return value of uk_palloc is not checked in _arch_init_p2m.

    Allocation failure at that point should never happen, but it's not a
    reason not to check.

    At this stage, in the event of a failure, we should probably abort the
    boot altogether.

    This bug was detected using the following Coccinelle spatch:

        @call@
        expression ptr;
        position p;
        @@

        ptr@p = uk_palloc(...);

        @ok@
        expression ptr;
        position call.p;
        @@

        ptr@p = uk_palloc(...);
        ... when != ptr
        (
         (ptr == NULL || ...)
        |
         (ptr != NULL || ...)
        )

        @depends on !ok@
        expression ptr;
        position call.p;
        @@

        ptr@p = uk_palloc(...);
        + if (ptr == NULL) return;

    Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Simon Kuenzer  <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #839

commit b240edc27abe95d22034d1b4ea7d582dd93098c2
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Mon May 1 19:13:55 2023 +0300

    lib/vfscore: Handle `FIONBIO` command in `pipe_ioctl()`

    The current `ioctl` implementation for pipes does not handle
    the `FIONBIO` command, which leads to a negative error value being
    returned. This commit introduces a simple case which sets the FNONBLOCK
    flag when such a command is passed.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
    Reviewed-by: Eduard-Florin Mihailescu <mihailescu.eduard@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #874

commit 0f75e55ba08647b2e398a19aea35f31b06c0da6a
Author: Andrei Tudor TOPALĂ (101668) <topala.andrei@gmail.com>
Date:   Fri Apr 15 00:36:51 2022 +0300

    plat/common: Add firecracker shutdown signal

    Firecracker emulates a PS/2 controller and detects attempted writes to
    the CPU reset line.

    Co-authored-by: Marco Schlumpp <marco@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 59111c4f28254c0614c62d56113e2048300a5549
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 11:19:33 2023 +0200

    plat/kvm: Include target hypervisor in image name

    This makes it more clear on what hypervisor the image works on.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 789cdba609d4c879e6b8bfc05c7b89cc85c1f3b7
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Tue Apr 11 17:58:08 2023 +0200

    plat/kvm/x86: Use position independent code for lxboot

    This should make it easier in the future to extend the entry point to
    support proper boot loaders such as the one in QEMU.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit f0ae44de725f698505060756d85558361fcd2abb
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:47:36 2023 +0100

    plat/kvm/x86: Workaround re-mapping low-mem areas

    The paging code currently does not unmap the memory area before the
    kernel image, but then tries to re-map any region in that area.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit e85a0cd860e4166b26269785e229c6676b175a30
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:43:51 2023 +0100

    plat/kvm/x86: Add an entry point for the firecracker hypervisor

    This is currently not conforming to the actual Linux boot protocol and
    only suitable for firecracker. The kernel image would have to include a
    proper Linux boot protocol header to allow loading with proper
    bootloaders such as the one in QEMU.

    Co-authored-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit ebb4795a3a41e8196f501f5b0b7d7a88361ad7f3
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:41:00 2023 +0100

    plat/kvm/x86: Add structures/definitions for the linux boot protocol

    This defines the necessary structures to parse the information passed by
    a linux boot protocol compatible bootloader.

    Co-authored-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit deef081dd04ee254c03266b431befb3ae4d2a329
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:38:27 2023 +0100

    plat/kvm: Add hypervisor/boot protocol configuration

    This allows the configuration of a target hypervisor. Depending on the
    hypervisor a suitable boot protocol is selected.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 7190449a7a0bdd0ffcd90c37fa0a8d2fc287c804
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Feb 13 16:58:19 2023 +0100

    plat/common: Extract non-multiboot specific memory region helpers

    The multiboot entry point had a few internal functions that are also
    useful for other entry points.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 70b260d0668eb0850465c525ac1ca6b697b23ce3
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Tue Apr 25 10:05:41 2023 +0200

    include/uk: Simplify RANGE_OVERLAP macro

    We can simplify the check by observing that there are only two
    conditions necessary to check whether a range does *not* overlap:
     - the end of range 0 is before the start of range 1
       [--0--) [--1--)
     - OR the start of range 0 is after the end of range 1
       [--1--) [--0--)
    Inverting this gives us a simple condition for checking whether ranges
    *do* overlap.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 7346338847c8449389316ffc2c554a5d3637ba69
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:34:39 2023 +0100

    plat/*: Introduce cmdline length to bootinfo

    Some boot protocols already have the length information and the internal
    command line handling works with non-null terminated strings anyway.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit ad684b5175f70e78dc37ed63d8a124c2b6e53d1c
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 13:09:03 2023 +0100

    plat/kvm/x86: Don't create fine-grained mapping for low memory

    Mapping all memory makes the page table more independent of the actual
    boot protocol. Firecracker currently puts the protocol information at a
    very low address (0x7000).

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit c7c221dc66b124752250a39a677e4a9bbe3f2c24
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Fri Feb 24 17:18:55 2023 +0100

    plat/kvm: Remove intermediate relocatable object step

    This object was previously used to hide all symbols except the entry
    point. But this step was removed making the relocatable object creation
    unnecessary.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #789

commit 195cc32f7e5e65d8929ae65b8fa9203ddf246ba6
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Thu Mar 16 14:13:06 2023 +0200

    plat/drivers/ofw: Fix search in `fdt_node_offset_by_compatible_list`

    The current implementation returns as soon as a node that matches a
    compatible string is found. However, we should iterate through all of
    the compatible list to make sure that we return the node with the least
    offset value such that future searches will not skip any matching nodes.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
    Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
    Approved-by: Michalis Pappas <michalis@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #805

commit dfbf3ffd2cf2542e97129e017f4a06afd65b079c
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Thu Mar 16 14:10:46 2023 +0200

    plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one`

    When a node is missing the "ranges" property, offset should be set to 0.
    The current implementation sets offset to the address to be translated,
    which ignores the fact that `fdt_default_translate`  is later called.
    The latter function adds the offset to the same address,
    resulting in doubling the effective address, when in fact a 1-to-1
    mapping is necessary.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
    Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
    Approved-by: Michalis Pappas <michalis@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #805

commit 4792af49d89c1c0e141b40720d4ec1b89530411a
Author: Takeru Wada <takew@asg.cs.tuat.ac.jp>
Date:   Mon Mar 13 14:37:51 2023 +0000

    lib/nolibc: Remove warnings of timespec

    This commit fixes the definition of pointer arguments in GCC >= 11.

    Signed-off-by: Takeru Wada <takew@asg.cs.tuat.ac.jp>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #800

commit ec2c285ea91fac0a178e6c550c122e6bc82f10dd
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Mar 16 17:31:42 2023 +0100

    lib/ukboot: Print environment variables before entering main

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 3f89855cf89e38a009d85da26b1355f167985ca8
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Tue Mar 14 15:18:12 2023 +0100

    lib/posix-environ: Symbol aliases for `environ`

    In order to comply with common libc behavior, we provide the following
    symbol aliases for environ`: `_environ`, `__environ`, `___environ`.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit fefaa0591880d69770a869cbc06f85b38872dc61
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 01:45:52 2023 +0100

    lib/posix-environ: Variables from kernel command line

    Introduces the ability to populate additional environment variables via the
    kernel command line.

    Checkpatch-Ignore: SPACING
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 6f2798a9f2a95d02c9aec763a3c6e7649350f104
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Wed Feb 15 00:32:29 2023 +0100

    lib/posix-environ: Compiled-in environment variables

    We introduce the ability to compile-in up to 16 environment variables.
    The values can be set via `menuconfig`. The initial `environ` array is
    automatically sized to match the number of compiled-in values.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit a46c0c1d63a71742e79b4fdd1bf690df560abf8d
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 9 21:54:40 2023 +0100

    lib/posix-environ: Register and make it compile

    This commit integrates and enables compiling of the imported environment
    helper functions (see previous commit).

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit e9b7d00e5407dc0c4cfeb912b2f3329cdc5ff28b
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Wed Feb 8 17:01:41 2023 +0100

    lib/posix-environ: Import from musl 1.2.3

    This commit imports needed code from musl 1.2.3. This concentrates mostly
    on the following helper functions for environment variables:
     - `clearenv()`
     - `getenv()`
     - `putenv()`
     - `setenv()`
     - `unsetenv()`

    Checkpatch-Ignore: FUNCTION_WITHOUT_ARGS
    Checkpatch-Ignore: LINE_SPACING
    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: TRAILING_STATEMENTS
    Checkpatch-Ignore: SIZEOF_PARENTHESIS
    Checkpatch-Ignore: TYPO_SPELLING
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 7741af977fd2c723272abfce8c166deb125cf6c6
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 01:42:55 2023 +0100

    lib/uklibparam: `UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`

    This commit provides `UK_LIBPARAM_PARAM_ALIAS()` and
    `UK_LIBPARAM_PARAM_ARR_ALIAS()` which are variants of `UK_LIBPARAM_PARAM()`
    and `UK_LIBPARAM_PARAM_ARR()`. These registration macros allow to set a
    custom parameter name instead of deriving it from the variable name.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 1cc3a2f6e33d1dbb390d24e79f73b86b34597b23
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 00:42:29 2023 +0100

    lib/uklibparam: Rewrite of parser

    This commit introduces a rewrite of `lib/uklibparam`. The rewrite ensures
    that it is errno-free, malloc-free, and TLS-free. This makes it ideal for
    processing library parameters early during boot. It includes an own and
    modified version of `strtoull` function that is used for parsing integer
    values from the command line.
    Additionally, the parser can handle arrays more intuitively (and for any
    data type of the elements) while fully utilizing pre-processed argument
    vectors. It relies on the fact that whitespacing and quoting is already
    handled (e.g., by `lib/ukargparse`). There are new types that are more
    inline with the ones defined by ukstore.

    This rewrite introduces the ability to provide a parameter description
    with updated parameter registration macros:
      UK_LIBPARAM_PARAM(variable, type, description)
      UK_LIBPARAM_PARAM_ARR(variable, type, count, description)
    The description is printed on the help output.

    The previous interfaces are kept for backwards compatibility. However,
    it is planned to remove them as soon as the code base is completely
    adopted.

    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: OPEN_BRACE
    Checkpatch-Ignore: MACRO_WITH_FLOW_CONTROL
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 243f0c45ca8060a230e0bde34783b75c0fefb47a
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 23 22:21:04 2023 +0100

    build: Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S

    .lds.S files are linker script files that use the C preprocessor in order
    to generate the final .lds file. This commit provides Unikraft's common
    declarations of `__LIBNAME__`, `__BASENAME__`, `__VARIANT__` to this
    pre-processing step so that they can be used for generating linker scripts.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 910b9befc07212f8b1313b234ce162dd6130e0d0
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 23 21:47:59 2023 +0100

    plat/*: Add linker scripts to link dependencies

    This commit adds needed linker scripts as dependency to the linking rule
    of the final image. This dependency was mostly indirectly covered via
    libraries. However, updates to platform linker scripts did not trigger
    relinking the final image.
    Additionally, pure API libraries (like `lib/ukfalloc`) would not even cause
    building a linker script that is shipped with the library or injected with
    an `EACHOLIB_SRCS` declaration. The library buildrule is generated but
    because no library object is generated, the linker script was never be part
    of a dependency list.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit ae0ee99ee2f79b8db511ab97a4f3d3f3218ca121
Author: calex257 <alexandru.calciu@stud.acs.upb.ro>
Date:   Sat Feb 25 17:53:56 2023 +0200

    lib/nolibc: Add README.md

    Add a brief description of nolibc, providing an overview
    of its purpose, usage and limitations.

    This commit also shows a relevant example of how to configure
    an application to use Unikraft-specific assertions or the ones
    implemented in nolibc.

    Signed-off-by: Alexandru Calciu <alexandru.calciu@stud.acs.upb.ro>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #778

commit 3e7a08afd4147f4f101a72765bf105968cce11f9
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:24:08 2023 +0200

    lib/vfscore: Cleanup sys_symlink

    This commit cleans up sys_symlink() according to the current coding
    conventions and uses separate jump labels for exits depending on
    if the vnode lock needs to be released or not.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 20a2f602813e407754f217b1804384b9289d21e2
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:19:05 2023 +0200

    lib/vfscore: Do not copy oldpath in symlink

    With the changes to the vnode ops definitions the symlink operation
    takes a constant string. We can thus just pass the input string on
    without having to copy it.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 429a017dcf3bd3b2429a87c55686cb47d81bb875
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:16:06 2023 +0200

    lib/ramfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 22c1a55814bd3763ea35285ae75a14ee5accf988
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:14:49 2023 +0200

    lib/devfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 3ab142f25240e39fe90c8fe97cbc0525e8ede89d
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:14:11 2023 +0200

    lib/9pfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit e04174a8eae7eaf16be08b93142ccd3266ce58d6
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:12:09 2023 +0200

    lib/vfscore: Make vnops strings constant

    The current vnode operations define strings as mutable, which
    makes it more difficult to do optimizations. Since no buffer size
    is supplied the strings can only be modified on a char-for-char
    basis anyways, which also limits the use-cases. In addition, no
    implementation of the vnode operations makes use of the
    mutability of the strings.

    This commit thus introduces the `const` keyword for all strings
    passed to vnode operations.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 7ef5bbccffa6592a0d6da0efedd3c63366ba3cbb
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 10:04:04 2023 +0200

    lib/posix-futex: Check for proper FUTEX_CLOCK_REALTIME usage

    The documentation specifies a list of operations which support this
    flag. This adds a check that explicitly rejects all invalid combinations
    and returns `ENOSYS` according to the documentation.

    Checkpatch-Ignore: ENOSYS
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 54d27549bfa6a0c3aaffe08d10c7e9a5101f8c0d
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 09:57:45 2023 +0200

    lib/posix-futex: Ignore FUTEX_PRIVATE_FLAG

    The flag can be specified for all operations and does not make a
    difference in the context of a single-process scenario. Therefore, we
    can ignore it.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit c905e263471c9081e457d1d0041a083dec53f828
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 16:44:35 2023 +0100

    lib/posix-futex: Implement subset of FUTEX_WAIT_BITSET

    Many modern applications use FUTEX_WAIT_BITSET to be able to set an
    absolute timeout. To accomplish that they set all bits in the val3/mask
    parameter, which makes the operation equivalent to a normal FUTEX_WAIT
    (except the absolute timeout value).

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 7683671942d29fb5c3cc4c6471f257f0dc290687
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 15:57:30 2023 +0100

    lib/uksched: Expose uk_thread_block_until

    This allows external API clients to specify an absolute deadline for
    waking up. This is potentially more precise because the `timeout` is
    relative to whenever uk_thread_block_timeout is actually taking the
    "current" time.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 5223ae6691e0d8ee449ece64f6f9bde3aaeb7643
Author: Nour-eddine Taleb <contact@noureddine.xyz>
Date:   Sat Mar 25 19:56:47 2023 +0000

    lib/uksched: fix docs

    Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #809

commit c00afb4d422af1377374bfee5d4ea52cec0cbea0
Author: Nour-eddine Taleb <contact@noureddine.xyz>
Date:   Thu Mar 23 23:15:24 2023 +0000

    lib/posix-futex/test: port the test cases to the new sched apis

    due to the changes in scheduling apis, it was necessary to update
    posix-futex tests which still relays on the old apis.

    GitHub-Fixes: #630
    Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #809

commit ce2e3dae5f8d876e38dcdcf0c3a83850cfb98dc8
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 11:22:18 2023 +0100

    plat/kvm/x86: Stop unwinding at _libkvmplat_entry2

    The _libkvmplat_entry2 function is called using assembler code that
    switches stacks. Therefore, a debugger can't unwind its frame. This
    inserts a CFI that marks the previous instruction pointer as undefined.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit 7f450a9834e4c31a938e8a59e72006ec9389cc18
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 15:15:52 2023 +0100

    plat/kvm/x86: Add unwinding information to interrupt/exception handlers

    This allows debuggers and profilers to unwind past interrupt/exception
    handlers.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit f87e378199fa87c07e77b36c5c979c9194fb1d93
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Dec 21 11:01:34 2022 +0100

    plat/x86: Add unwind information to system call handler

    Without this information debugging tools do not know how to properly
    unwind the _ukplat_syscall frame. For example, this causes them to
    output garbage output for back traces.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit b88c21a231243845cbc155e1c7f0bcccd181a1c5
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 11:40:13 2023 +0100

    arch/x86: Add helpers for CFI in assembler code

    This introduces helpers for maintaining frame information when using
    push and pop in assembler code.

    Checkpatch-Ignore: SPACING
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit 6d07539298dae30eb07f078942563af2be60acd9
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue May 24 20:17:14 2022 +0200

    lib/nolibc: Define u_(long|int|short_char) for _DEFAULT_SOURCE files

    These typedefs are commonly used in BSD code. Most libc libraries define
    them by default or for _DEFAULT_SOURCE files. Because unikraft is
    usually closer to Linux, this adopts the later approach.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit a391affca8dce75d51f487d43babb3551c03b0d1
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue Mar 29 17:32:46 2022 +0200

    lib/nolibc: Implement fputs and puts functions

    These functions were still missing from nolibc.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 721b9a91e651c0c37dd6b5618dea3f3692713bf9
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue Mar 29 15:25:17 2022 +0200

    lib/nolibc: Implement syslog functions

    These functions forward the messages to the ukdebug library.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit eac4a8dc00c62398eb6eaf54b6eb5f9440bc2230
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue Mar 29 14:23:52 2022 +0200

    lib/nolibc: Implement strsep function

    This function is an improvement of strtok that originates from BSD.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit f941a5add83e4023baab26ed1f1c374371bd4e38
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Fri Mar 25 17:23:57 2022 +0100

    lib/nolibc: Implement random/srandom

    These functions provide a PRNG and are based on the musl libc library.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 2188d8dcd394cca547de25e82905c200e5971a22
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Fri Mar 25 16:40:15 2022 +0100

    lib/nolibc: Implement exit function

    The behaviour is similar to returning a value from main.

    Checkpatch-Ignore: EMBEDDED_FUNCTION_NAME
    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 2d2104d9d056a50e6bf2dc0bc07b28cd1dc45796
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Fri Mar 25 16:31:43 2022 +0100

    lib/nolibc: Export abort function

    This function was already declared in the public stdlib header, but the
    symbol name was missing in the exportsyms.uk file.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit fb70e9f5e09d62cb5eca12702620047ff8e4982c
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Fri Mar 25 16:07:17 2022 +0100

    lib/nolibc: Implement isblank function

    This function determines whether the given character is a space or tab.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 3f0bc0e8705132f966347d07b0315c8a21fce347
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Thu Mar 24 17:06:03 2022 +0100

    lib/nolibc: Add atol function

    This function is basically atoi with a large output range.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 6887b143c9cf7f654503895651d920825a2e535f
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Thu Mar 24 17:02:24 2022 +0100

    lib/nolibc: strcasecmp function

    This function compares two strings case insensitively. The
    implementation was taken from the MUSL libc.

    Checkpatch-Ignore: TRAILING_STATEMENTS
    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit a3c8bdeaedcb428015e53cd4398a3d91624f1cf0
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue Mar 22 12:01:57 2022 +0100

    lib/nolibc: Introduce strcat/bcopy/bzero functions

    The bcopy/bzero originate from BSD, but are often provided by libc on
    other systems for compati…
dragosp27 added a commit to dragosp27/unikraft that referenced this issue Jun 3, 2023
commit abd35a233677df19c463687405a3973a7eb9a424
Author: Alexander Jung <alex@unikraft.io>
Date:   Thu Jun 1 14:55:17 2023 +0200

    Release: v0.13.1 Atlas

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Signed-off-by: Alexander Jung <alex@unikraft.io>

commit c31a4b4937f94695d45079d81f3667a129f61650
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Mon May 22 13:06:32 2023 +0300

    build: Add proper compiler detection

    Checking for the output of `$(CC) -v` may fail depending on compiler
    versions (e.g. `clang-15 -v` on ubuntu will output `Ubuntu clang ...`,
    making `CC_NAME` `Ubuntu` instead of `clang`).

    Use a preprocessor program to find the proper compiler name and version.

    The `cc-version.sh` script is taken from the linux kernel tree, and will
    return a string containing the compiler name and version:
    `GCC|Clang MAJOR_V.MINOR_V`.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #902

commit cd9dcb4079b53555d3c1333650241f467f4d1cc4
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Sat May 27 11:57:40 2023 +0300

    9pfs: Change default 9p version to `9P 2000L`

    Using the `9p 2000U` version as the default leads to problems,
    especially when using Unikraft in binary compatibility mode, since it
    has a lot of limitation. There is no actual reason to use it as the
    default 9P protocol version, so we just change it to `2000L`.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #914

commit 31bcc48776be55f94d3f2de408b768de4cdeaa5a
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Wed May 17 11:15:32 2023 +0300

    plat/kvm: Add vmm option for arm64

    Add the option to choose a VMM when building for arm64. There are build
    options that depend on the chosen VMM (i.e. PCI support), so the VMM
    should be selected no matter what the chosen architecture is.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #900

commit de40bcc1440b324491a5e520523d5af40dc5e66f
Author: Michalis Pappas <michalis@unikraft.io>
Date:   Sat May 27 15:51:57 2023 +0200

    .github: Update Prerequisites in PR template to reference checkpatch.uk

    checkpatch.uk has been introduced to allow invoking checkpatch.uk with
    Unikraft's configuration from any directory. Update the Prerequisites
    section in the PR template to use that instead.

    Signed-off-by: Michalis Pappas <michalis@unikraft.io>
    Reviewed-by: Alexander Jung <alex@unikraft.io>
    Approved-by: Alexander Jung <alex@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #918

commit ef5b449be28c69a64da9f82733c03c15c0c28664
Author: Andrei Tatar <andrei.ttr@gmail.com>
Date:   Fri Apr 21 18:45:16 2023 +0200

    lib/syscall_shim: Sanitize ectx memory before use

    `ukplat_syscall_handler` allocates uninitialized stack space for saving
    ectx; this coupled with brittle store/load routines (e.g., x86
    XSAVE/XRSTOR) can result in a fatal fault.
    This change sanitizes the allocated space before use.
    Sanitizing is preferable to zero-ing out the entire area because
    (1) we're on the syscall hot path, and (2) it's only needed in specific
    situations.

    Signed-off-by: Andrei Tatar <andrei.ttr@gmail.com>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #863

commit ffdbb486c4dd3fce002607d8de76c8cff4c126c4
Author: Andrei Tatar <andrei.ttr@gmail.com>
Date:   Fri Apr 21 18:24:12 2023 +0200

    arch/*: Add sanitization function for ectx memory

    Most context saving instructions/routines overwrite the target area with
    a valid representation that can be loaded back. x86 XSAVE/XSAVEOPT are
    an exception, as garbage data can remain in the context area causing the
    following XRSTOR to fault. Thus any potentially dirty memory passed to
    XSAVE* must be (minimally) sanitized before its first use.
    This change introduces `ukarch_ectx_sanitize` as a function to perform
    this sanitization if needed. It differs from `ukarch_ectx_init` in that
    it does only the minimum work necessary to make memory ready for
    `ukarch_ectx_store`, instead of preparing a valid argument for
    `ukarch_ectx_load`.

    Signed-off-by: Andrei Tatar <andrei.ttr@gmail.com>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #863

commit 988b7eddc3601d6a6cc394e71b2a2f9befff99c2
Author: Christiano Haesbaert <haesbaert@haesbaert.org>
Date:   Wed May 17 10:19:42 2023 +0200

    lib/uknetdev: Fix typo in uk_netdev_tx_one

    Signed-off-by: Christiano Haesbaert <haesbaert@haesbaert.org>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Approved-by: Alexander Jung <alex@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #901

commit b0da6bfc5286027fd4b77256e4bef5725cbeaba9
Author: Alexander Jung <alex@nder.sh>
Date:   Mon May 15 23:09:49 2023 +0200

    Release: v0.13.0 Atlas

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Signed-off-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Signed-off-by: Alexander Jung <alex@unikraft.io>

commit 8da5cbb6cd6e973a4c6cdbb4b113d5fc222a57fb
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Mar 24 17:33:17 2023 +0100

    lib/ukargparse: Support escaping of quotes

    This commit introduces the support of escaping single (`'`) and double
    quotes (`"`) with the escape character `\`. The behaviour is similar to
    what one expects from Unix shells, like `sh` or `bash`.

    Single-quoted characters and character sequences preserve each character.
    Double-quoted characters and character sequences preserve each character
    except the backslash `\`. The backslash can be used to switch of the
    special meaning of a character, like the double quote (`\"`) or a
    backslash (`\\`).

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #893

commit 7279c2d240e92285aaf2e7ebd48813a70f3d20a7
Author: Costin Sin <sin.costinrobert@gmail.com>
Date:   Sat May 13 06:48:31 2023 +0000

    lib/posix-time: Add clock_nanosleep syscall

    clock_nanosleep syscall should mimic the nanosleep syscall
    when the clockid equals CLOCK_REALTIME and the TIMER_ABSTIME flag is
    missing.

    Signed-off-by: Costin Sin <sin.costinrobert@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #891

commit 8ea48c6f064f62ab007300d87de93bb8f61f854c
Author: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
Date:   Tue Apr 4 20:17:40 2023 +0000

    lib/vfscore: Dynamically allocate mount paths

    Currently `m_path` and `m_special` are statically-allocated arrays,
    meaning their storage spaces are wasted in `static struct mount`
    variables.  Dynamically allocate these variables to save on binary size.

    Also add initcalls to initialize `struct mounts` in lib/posix-event,
    lib/posix-socket and lib/vfscore.

    Signed-off-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #826

commit a7698597cd20b726dc15405368c3bf23050304c8
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Sat May 13 01:28:57 2023 +0300

    lib/vfscore: Initialize lists for stdio_vnode

    The VFS `struct vnode` structure has two `uk_list_head` members:
    `v_link` and `v_names`. These need to be initialized by a dedicated
    macro / function, such as `UK_LIST_HEAD_INIT`.

    The `stdio_vnode` variable (of type `struct vnode`) is not initializing
    these members (they are filled with zeros). This will cause crashes when
    using them.

    This commit fixes that by properly initializing the `v_link` and
    `v_names` members of the `stdio_vnode` variable.

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #889

commit 7b76234d3351c4d4414ba341c2d4fb9fd6220b62
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Sat May 13 01:45:43 2023 +0300

    lib/vfscore: Add semicolon to DPRINTF macro

    The `DPRINTF()` macro in `vfscore` requires a semicolon (`;`). If this
    is not present (once `DEBUG_VFS` is enabled), a build issue occurs.

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #890

commit cb35dfff57bdc7b7e2896922fd0743e4f25f5972
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Mon Mar 13 11:12:46 2023 +0530

    lib/uklock: Add SMP-safe reader-writer lock

    This commit introduces a reader-writer lock. To avoid
    starvation of readers and writer, the lock maintains the current
    count of readers and writers waiting for the lock. New readers give
    priority to waiting writers and writers give priority to readers on
    unlock.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit 362ddab80a491a4ed3a7d2354813f2fb94282086
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 15:49:53 2023 +0530

    lib/uklock: Make semaphore SMP safe

    On uniprocessor systems, it is sufficient to disable interrupts.
    In SMP environments, however, it is not because a thread executing on a
    different core can give rise to a race condition. Hence, to make the
    semaphore SMP safe, we use a spinlock.

    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit edda7dff6f86d94ef46342a3f71974158469826b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 15:06:02 2023 +0530

    lib/uklock: Make mutex SMP safe

    We can safely acquire a lock on uniprocessor systems by disabling the
    interrupts, but this does not work in an SMP environment. Hence, to
    make the mutex SMP safe, this commit uses atomic compare exchange.
    The commit also makes recursive locking optional (disabled by default).
    While this is a breaking change, recursive locks are discouraged and
    should only be used with caution. The current Unikraft core does not
    use recursive locks anywhere.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit f205fee3da57c467ce1cf9cf33f88d529e79875b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 12:22:01 2023 +0530

    lib/uklock: Provide irqf wrappers for uk_spinlock

    Holding a spinlock which is required by an interrupt handler, causes a
    deadlock. To avoid this, the programmer must disable the interrupt
    before acquiring such spinlocks. This involves saving the interrupt
    flags before acquiring the spinlock and restoring them after
    releasing the spinlock.

    This commit provides versions of the ukplat_spin_* macros for the
    uk_spinlock.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit d073d652299d53509d059b60706eee236d5c0d10
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Sun Mar 12 13:25:56 2023 +0530

    lib/uksched: Add unconditional wait and wakeup_one

    This commit adds an unconditional wait, which is required
    for reader-writer locks. The commit also adds an interface to
    wakeup only a single thread sleeping on a wait queue.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit a078828e0d7a5d33b3d2c4bd62b79e02ddcf7b9b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 16:52:53 2023 +0530

    lib/uksched: Make wait queues SMP safe

    Wait queues use a linked list to store the threads waiting on a
    particular condition. But operations such as add to and remove
    from the list are not SMP safe. Hence, this commit associates
    a spin lock with each wait queue.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit 3970edf400001f0fb62a86a1dea898e323aafd3e
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 12:17:50 2023 +0530

    include/arch: Add macros for atomic add, sub, or

    This commit adds macros to atomically add, subtract, and
    perform a bitwise or based on the builtins provided by GCC.

    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit dedc1b71eecc0ac25eb60a5d62a7a10f9b7b7c28
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 17:24:10 2023 +0200

    lib/vfscore: Avoid recursive locking in sys_rename

    If the source and destination directories are the same in sys_rename,
    the vnode is locked two times. This is problematic with non-recursive
    mutexes. Also the double checks for access are not needed. This commit
    adds a check to make sure in this case, only a single lock is done and
    redundant checks are avoided.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #888

commit 55cf96d011284e35fced79e8d8bac4934d0c8d6d
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 16:19:06 2023 +0200

    lib/ukswrand: Add missing errno include

    This commit adds an include for errno.h that might not be included
    otherwise and causes the build to fail.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #887

commit dfe489a4f27aff6c74b2c7c8b111e0afb73e5a96
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 14:00:38 2023 +0200

    lib/uk9p: Add workaround for QEMU WSTAT fsync bug

    This commit adds a workaround for a bug in QEMU where performing
    an fsync using the WSTAT command in 9P2000.u leads to a zero-sized
    response.

    Checkpatch-Ignore: SUSPECT_CODE_INDENT
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #886

commit d2c0ccd32602e337c12fb50867a2b24530fa0f8f
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 13:58:50 2023 +0200

    lib/9pfs: Fix wrong fid for fsync in 9P2000.u

    Performing an fsync with the 9P2000.u protocol version previously
    resulted in an I/O error. This is because we used the wrong fid
    in the request. This commit moves the implementation of setattr
    into a separate function that accepts the fid to use, and adjusts all
    callers to provide the fid.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #886

commit d7f598242afd95dceab42983d8d616885e618cbf
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Fri Feb 3 13:41:38 2023 +0200

    lib/nolibc: Add -ffreestanding flag

    GCC optimizes the use of `memcmp()` if the `-ffreestanding` flag is
    missing. In the current configuration, the flag is missing for GCC <= 9.
    The resulting optimization causes in an infinite loop for `lib/nolibc`.

    This commit fixes the issue by adding the `-ffreestanding` flag for
    `lib/nolibc`, irrespective of the GCC version.

    GitHub-Fixes: #728

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #740

commit 7eac25ea53ae833294652d6f38d04732612145b6
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 22:48:53 2023 +0300

    lib/posix-process: Fix debug printing of TIDs

    This commit makes so that the correct info will be printed when the current
    thread gets killed. Before, instead of the actual TID, the empty TID from
    the iterator would be printed.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit d4100c9dc4dfffdebd48ce8788d04ca3fa75d066
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 13:07:48 2023 +0300

    lib/posix-process: Reserve PID/TID 0 for kernel

    This commit marks the TID/PID as unavailable to mimic the behaviour of
    other kernels. This change also make pthread_rwlocks from glibc work in
    binary compatibility mode.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit a1c73be910b779b3b57a5ae79435d4f86b488fa2
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 12:44:58 2023 +0300

    lib/posix-process: Correct MAX_PID config option

    This commit changes the tid_map size to reflect the kernel
    reservation of the 0 TID/PID value. Before, the first thread
    would set the 0 position in all used structures. Now, because
    it will be already set, we need to make room for another.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit ddefe64f12ab4599f0ea3064bbbfedbf5205384f
Author: Andra Paraschiv <andra@unikraft.org>
Date:   Wed May 10 13:40:27 2023 +0300

    lib/vfscore: Fix file path resolution for 9pfs setup

    The path resolution doesn't correctly work for a set of file cases
    (e.g. symlinks to binaries or shared libraries).

    One setup example is using 9pfs and the entire root local filesystem,
    while running the "ls" binary and loading the shared libraries:

    unikraft/support/scripts/qemu-guest -k build/app-elfloader_qemu-x86_64
    -e / -a "/bin/ls /"

    A "/" character is omitted from the last part of the path e.g. "/binls"
    instead of "/bin/ls". Update the logic to include the missing character.

    Signed-off-by: Andra Paraschiv <andra@unikraft.org>
    Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #883

commit b2c2164eeb2745325489003dc6b52354c02a9a4d
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri May 5 15:44:28 2023 +0200

    lib/vfscore: `fs0` as default device name for 9PFS

    This commit changes the default device/tag name for an automatically
    mounted 9pfs root volume from `rootfs` to `fs0`. This is done for
    convenience because `fs0` is the tag name that the `qemu-guest` support
    script uses to name the first 9pfs share.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #875

commit 5784d007b1d2b727d3151f84ea70e5dd4683df32
Author: Andrei Tatar <andrei@unikraft.io>
Date:   Mon May 8 11:02:45 2023 +0200

    build: Disable compiler control flow protection

    Compiler flag -fcf-protection sets control-flow integrity measures
    that improve security, and sometimes defaults to enabled on distro
    compilers. Some aspects of this feature are implemented in the compiler
    header <cet.h> for e.g., stack unwinders. If this header is missing some
    programs fail to compile.
    Since we don't (yet) support pulling compiler headers into unikraft
    build, this change disables cf-protection globally.

    Signed-off-by: Andrei Tatar <andrei@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #881

commit cfc103cf6fc09add1291990a8b44a172a54195c5
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Sun May 7 13:53:19 2023 +0300

    plat/kvm/x86: Fix register names for clang

    `clang` does not understand the `rflags` register name, so the build
    will fail. On the other hand, `gcc` does not understand `flags`, so the
    register naming needs to be placed inside `#ifdef` guards.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #877

commit c04312c813a9ce47476f3ea7ece77f22cd888dcd
Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
Date:   Sun Apr 16 15:08:17 2023 +0200

    plat/*, lib/ukalloc: Use PAGE_ALIGN_UP(), PAGE_ALIGN_DOWN()

    We have PAGE_ALIGN_DOWN, PAGE_ALIGN_UP, and PAGE_ALIGN macros, but don't
    use them consistently. At places we still have code that does custom
    ALIGN_DOWN, ALIGN_UP, and masks. Use appropriate macros everywhere.

    This patch was generated by the following Coccinelle rule:

        @@
        expression E;
        @@

        - ALIGN_DOWN(E, __PAGE_SIZE)
        + PAGE_ALIGN_DOWN(E)

        @@
        expression E;
        type T;
        @@

        - ALIGN_DOWN(E, (T) __PAGE_SIZE)
        + PAGE_ALIGN_DOWN(E)

        @@
        expression E;
        @@

        - ALIGN_UP(E, __PAGE_SIZE)
        + PAGE_ALIGN_UP(E)

        @@
        expression E;
        type T;
        @@

        - ALIGN_UP(E, (T) __PAGE_SIZE)
        + PAGE_ALIGN_UP(E)

        @@
        expression E;
        @@

        - (E + PAGE_SIZE - 1) & PAGE_MASK
        + PAGE_ALIGN(E)

    Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
    Reviewed-by: Dragos Petre <dragos.petre27@gmailcom>
    Reviewed-by: Alexandru Calciu <alxcalciu@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #842

commit 5d9c4d702ec4a6e9de4e848a727db21e06d5d3b7
Author: Maria Sfiraiala <maria.sfiraiala@gmail.com>
Date:   Mon May 8 10:49:43 2023 +0300

    lib/{nolibc,isrlib}: Modify pointer comparison

    This commit typecasts `src` and `dst` strings from `memmove()` to ensure
    that their values are treated as pointers.

    It also modifies the function implementation to handle overlapping.

    Co-authored-by: Soumya Ranjan <ranjan42069@gmail.com>
    Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Signed-off-by: Soumya Ranjan <ranjan42069@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #880

commit 4e139b3164bb4ead5cec2760ea0f3fd4aecb762c
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Apr 12 11:09:26 2023 +0200

    build: Do not use segment annotations on linuxu

    For the linuxu platform we rely on the default linker script and only
    add some additional sections on top of that one. That also means that
    there aren't any segments defined. This makes the segment specification
    opt-in instead of assuming the segments are always defined.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: COMPLEX_MACRO
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #833

commit 7255b0ee1209d3309a610d8ea516fbc21ea84e27
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Apr 12 11:06:17 2023 +0200

    lib/ukdebug: Mark tracepoint sections as unallocated notes

    At runtime we don't care about the content of them, and we only need
    them on host side to decode the trace buffer.
    This also prevents the linker from adding a segment for these sections.
    Because the resulting segment sometimes only contained these two
    sections, the final `strip` step would end up with an empty segment.
    And in the case of the linuxu platform the resulting image was not
    working anymore.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #833

commit d57a4c7cd10ab8d781a089629cb310b8e8de3c91
Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
Date:   Wed May 10 14:12:39 2023 +0300

    plat/linuxu: Avoid re-initialization of the `heap` and `initrd`

    Keep a locally declared static variable `init` to cache the
    current amount of memory region descriptors. This way, whenever
    `ukplat_memregion_count` is called, `__linuxu_plat_heap_init` and
    `__linuxu_plat_initrd_init` do not have to be executed more than
    once.

    Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #878

commit 372475c140863dabab697f01ab485c971a3ba054
Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
Date:   Wed May 10 14:12:01 2023 +0300

    plat/linuxu: Add check for memory region index out of range

    Ensure that we do not try to fetch a memory region descriptor by an
    index that is larger than our current memory region descriptor count.

    Furthermore, this guarantees that `ukplat_memregion_count` is always
    called before `ukplat_memregion_get` is executed fully. This way we
    will always have the memory region descriptors as well as their count
    set up and available before we try to fetch one.

    Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
    GitHub-Fixes: #766
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #878

commit d39b30308e957893cd2bed2115aeb056f2b08b59
Author: Alexander Jung <alex@unikraft.io>
Date:   Mon May 8 07:43:37 2023 +0000

    support/scripts: Add additional recognised Git trailers to checkpatch

    This commit introduces 3 additional Git trailers to be recognised by the
    checkpatch program:

     - GitHub-Fixes   - Used to reference and address an open issue, often
                        a specific bug or problem. GitHub will automatically
                        close the issue once the commit with this Git
                        trailer is merged.
     - GitHub-Closes  - Used to reference an open issue or PR, which is not
                        specific to a particular bug.  For example, it can
                        be used to supercede another PR.  GitHub will
                        automatically close the referenced issue or PR once
                        a commit with this Git trailer is merged.
     - Co-authored-by - Similar to providing additional Signed-off-by's,
                        this trailer is recognised by GitHub and helps
                        attribute authorship, making the user's profile
                        more visible.
     - Approved-by    - Signifies the authoritive representative (usually a
                        project maintainer) who approved the commit.

    Additional adjustments to the checkpatch script are made in order to
    recognise non-standard Git trailer values (those from GitHub).

    Signed-off-by: Alexander Jung <alex@unikraft.io>
    Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #879

commit 47c243c394548b1198951f44af1c7101bd868589
Author: Aryan Verma <aryanvarma7272@gmail.com>
Date:   Thu Feb 16 15:19:32 2023 +0530

    doc: Add Codacy code quality status badge to README.md

    GitHub-Fixes: #650
    Signed-off-by: Aryan Verma <aryanvarma7272@gmail.com>
    Co-authored-by: Alexander Jung <alex@unikraft.io>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #764

commit 84172dbfbe07b91cade20eb6c88f2c4a1c2e6255
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Mon May 8 16:38:14 2023 +0200

    lib/uklibparam: Fixes for review PR #867

    Commits
     - 7741af97 "`UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`"
     - 1cc3a2f6 "Rewrite of parser"
     - 243f0c45 "Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S"
     - 910b9bef "Add linker scripts to link dependencies"
    should have been included with PR #867 but got merged by mistake with
    PR #868 due to a dependency.

    This commit addresses the comments provided with the review for PR #867.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #882

commit 275429893d983ff13d9874b310b4566c254631fe
Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
Date:   Sun Apr 16 11:57:44 2023 +0200

    plat/xen: Fix unchecked uk_palloc() value in x86/mm.c

    The return value of uk_palloc is not checked in _arch_init_p2m.

    Allocation failure at that point should never happen, but it's not a
    reason not to check.

    At this stage, in the event of a failure, we should probably abort the
    boot altogether.

    This bug was detected using the following Coccinelle spatch:

        @call@
        expression ptr;
        position p;
        @@

        ptr@p = uk_palloc(...);

        @ok@
        expression ptr;
        position call.p;
        @@

        ptr@p = uk_palloc(...);
        ... when != ptr
        (
         (ptr == NULL || ...)
        |
         (ptr != NULL || ...)
        )

        @depends on !ok@
        expression ptr;
        position call.p;
        @@

        ptr@p = uk_palloc(...);
        + if (ptr == NULL) return;

    Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Simon Kuenzer  <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #839

commit b240edc27abe95d22034d1b4ea7d582dd93098c2
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Mon May 1 19:13:55 2023 +0300

    lib/vfscore: Handle `FIONBIO` command in `pipe_ioctl()`

    The current `ioctl` implementation for pipes does not handle
    the `FIONBIO` command, which leads to a negative error value being
    returned. This commit introduces a simple case which sets the FNONBLOCK
    flag when such a command is passed.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
    Reviewed-by: Eduard-Florin Mihailescu <mihailescu.eduard@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #874

commit 0f75e55ba08647b2e398a19aea35f31b06c0da6a
Author: Andrei Tudor TOPALĂ (101668) <topala.andrei@gmail.com>
Date:   Fri Apr 15 00:36:51 2022 +0300

    plat/common: Add firecracker shutdown signal

    Firecracker emulates a PS/2 controller and detects attempted writes to
    the CPU reset line.

    Co-authored-by: Marco Schlumpp <marco@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 59111c4f28254c0614c62d56113e2048300a5549
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 11:19:33 2023 +0200

    plat/kvm: Include target hypervisor in image name

    This makes it more clear on what hypervisor the image works on.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 789cdba609d4c879e6b8bfc05c7b89cc85c1f3b7
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Tue Apr 11 17:58:08 2023 +0200

    plat/kvm/x86: Use position independent code for lxboot

    This should make it easier in the future to extend the entry point to
    support proper boot loaders such as the one in QEMU.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit f0ae44de725f698505060756d85558361fcd2abb
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:47:36 2023 +0100

    plat/kvm/x86: Workaround re-mapping low-mem areas

    The paging code currently does not unmap the memory area before the
    kernel image, but then tries to re-map any region in that area.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit e85a0cd860e4166b26269785e229c6676b175a30
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:43:51 2023 +0100

    plat/kvm/x86: Add an entry point for the firecracker hypervisor

    This is currently not conforming to the actual Linux boot protocol and
    only suitable for firecracker. The kernel image would have to include a
    proper Linux boot protocol header to allow loading with proper
    bootloaders such as the one in QEMU.

    Co-authored-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit ebb4795a3a41e8196f501f5b0b7d7a88361ad7f3
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:41:00 2023 +0100

    plat/kvm/x86: Add structures/definitions for the linux boot protocol

    This defines the necessary structures to parse the information passed by
    a linux boot protocol compatible bootloader.

    Co-authored-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit deef081dd04ee254c03266b431befb3ae4d2a329
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:38:27 2023 +0100

    plat/kvm: Add hypervisor/boot protocol configuration

    This allows the configuration of a target hypervisor. Depending on the
    hypervisor a suitable boot protocol is selected.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 7190449a7a0bdd0ffcd90c37fa0a8d2fc287c804
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Feb 13 16:58:19 2023 +0100

    plat/common: Extract non-multiboot specific memory region helpers

    The multiboot entry point had a few internal functions that are also
    useful for other entry points.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 70b260d0668eb0850465c525ac1ca6b697b23ce3
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Tue Apr 25 10:05:41 2023 +0200

    include/uk: Simplify RANGE_OVERLAP macro

    We can simplify the check by observing that there are only two
    conditions necessary to check whether a range does *not* overlap:
     - the end of range 0 is before the start of range 1
       [--0--) [--1--)
     - OR the start of range 0 is after the end of range 1
       [--1--) [--0--)
    Inverting this gives us a simple condition for checking whether ranges
    *do* overlap.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 7346338847c8449389316ffc2c554a5d3637ba69
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:34:39 2023 +0100

    plat/*: Introduce cmdline length to bootinfo

    Some boot protocols already have the length information and the internal
    command line handling works with non-null terminated strings anyway.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit ad684b5175f70e78dc37ed63d8a124c2b6e53d1c
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 13:09:03 2023 +0100

    plat/kvm/x86: Don't create fine-grained mapping for low memory

    Mapping all memory makes the page table more independent of the actual
    boot protocol. Firecracker currently puts the protocol information at a
    very low address (0x7000).

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit c7c221dc66b124752250a39a677e4a9bbe3f2c24
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Fri Feb 24 17:18:55 2023 +0100

    plat/kvm: Remove intermediate relocatable object step

    This object was previously used to hide all symbols except the entry
    point. But this step was removed making the relocatable object creation
    unnecessary.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #789

commit 195cc32f7e5e65d8929ae65b8fa9203ddf246ba6
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Thu Mar 16 14:13:06 2023 +0200

    plat/drivers/ofw: Fix search in `fdt_node_offset_by_compatible_list`

    The current implementation returns as soon as a node that matches a
    compatible string is found. However, we should iterate through all of
    the compatible list to make sure that we return the node with the least
    offset value such that future searches will not skip any matching nodes.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
    Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
    Approved-by: Michalis Pappas <michalis@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #805

commit dfbf3ffd2cf2542e97129e017f4a06afd65b079c
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Thu Mar 16 14:10:46 2023 +0200

    plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one`

    When a node is missing the "ranges" property, offset should be set to 0.
    The current implementation sets offset to the address to be translated,
    which ignores the fact that `fdt_default_translate`  is later called.
    The latter function adds the offset to the same address,
    resulting in doubling the effective address, when in fact a 1-to-1
    mapping is necessary.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
    Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
    Approved-by: Michalis Pappas <michalis@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #805

commit 4792af49d89c1c0e141b40720d4ec1b89530411a
Author: Takeru Wada <takew@asg.cs.tuat.ac.jp>
Date:   Mon Mar 13 14:37:51 2023 +0000

    lib/nolibc: Remove warnings of timespec

    This commit fixes the definition of pointer arguments in GCC >= 11.

    Signed-off-by: Takeru Wada <takew@asg.cs.tuat.ac.jp>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #800

commit ec2c285ea91fac0a178e6c550c122e6bc82f10dd
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Mar 16 17:31:42 2023 +0100

    lib/ukboot: Print environment variables before entering main

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 3f89855cf89e38a009d85da26b1355f167985ca8
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Tue Mar 14 15:18:12 2023 +0100

    lib/posix-environ: Symbol aliases for `environ`

    In order to comply with common libc behavior, we provide the following
    symbol aliases for environ`: `_environ`, `__environ`, `___environ`.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit fefaa0591880d69770a869cbc06f85b38872dc61
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 01:45:52 2023 +0100

    lib/posix-environ: Variables from kernel command line

    Introduces the ability to populate additional environment variables via the
    kernel command line.

    Checkpatch-Ignore: SPACING
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 6f2798a9f2a95d02c9aec763a3c6e7649350f104
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Wed Feb 15 00:32:29 2023 +0100

    lib/posix-environ: Compiled-in environment variables

    We introduce the ability to compile-in up to 16 environment variables.
    The values can be set via `menuconfig`. The initial `environ` array is
    automatically sized to match the number of compiled-in values.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit a46c0c1d63a71742e79b4fdd1bf690df560abf8d
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 9 21:54:40 2023 +0100

    lib/posix-environ: Register and make it compile

    This commit integrates and enables compiling of the imported environment
    helper functions (see previous commit).

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit e9b7d00e5407dc0c4cfeb912b2f3329cdc5ff28b
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Wed Feb 8 17:01:41 2023 +0100

    lib/posix-environ: Import from musl 1.2.3

    This commit imports needed code from musl 1.2.3. This concentrates mostly
    on the following helper functions for environment variables:
     - `clearenv()`
     - `getenv()`
     - `putenv()`
     - `setenv()`
     - `unsetenv()`

    Checkpatch-Ignore: FUNCTION_WITHOUT_ARGS
    Checkpatch-Ignore: LINE_SPACING
    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: TRAILING_STATEMENTS
    Checkpatch-Ignore: SIZEOF_PARENTHESIS
    Checkpatch-Ignore: TYPO_SPELLING
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 7741af977fd2c723272abfce8c166deb125cf6c6
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 01:42:55 2023 +0100

    lib/uklibparam: `UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`

    This commit provides `UK_LIBPARAM_PARAM_ALIAS()` and
    `UK_LIBPARAM_PARAM_ARR_ALIAS()` which are variants of `UK_LIBPARAM_PARAM()`
    and `UK_LIBPARAM_PARAM_ARR()`. These registration macros allow to set a
    custom parameter name instead of deriving it from the variable name.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 1cc3a2f6e33d1dbb390d24e79f73b86b34597b23
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 00:42:29 2023 +0100

    lib/uklibparam: Rewrite of parser

    This commit introduces a rewrite of `lib/uklibparam`. The rewrite ensures
    that it is errno-free, malloc-free, and TLS-free. This makes it ideal for
    processing library parameters early during boot. It includes an own and
    modified version of `strtoull` function that is used for parsing integer
    values from the command line.
    Additionally, the parser can handle arrays more intuitively (and for any
    data type of the elements) while fully utilizing pre-processed argument
    vectors. It relies on the fact that whitespacing and quoting is already
    handled (e.g., by `lib/ukargparse`). There are new types that are more
    inline with the ones defined by ukstore.

    This rewrite introduces the ability to provide a parameter description
    with updated parameter registration macros:
      UK_LIBPARAM_PARAM(variable, type, description)
      UK_LIBPARAM_PARAM_ARR(variable, type, count, description)
    The description is printed on the help output.

    The previous interfaces are kept for backwards compatibility. However,
    it is planned to remove them as soon as the code base is completely
    adopted.

    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: OPEN_BRACE
    Checkpatch-Ignore: MACRO_WITH_FLOW_CONTROL
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 243f0c45ca8060a230e0bde34783b75c0fefb47a
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 23 22:21:04 2023 +0100

    build: Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S

    .lds.S files are linker script files that use the C preprocessor in order
    to generate the final .lds file. This commit provides Unikraft's common
    declarations of `__LIBNAME__`, `__BASENAME__`, `__VARIANT__` to this
    pre-processing step so that they can be used for generating linker scripts.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 910b9befc07212f8b1313b234ce162dd6130e0d0
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 23 21:47:59 2023 +0100

    plat/*: Add linker scripts to link dependencies

    This commit adds needed linker scripts as dependency to the linking rule
    of the final image. This dependency was mostly indirectly covered via
    libraries. However, updates to platform linker scripts did not trigger
    relinking the final image.
    Additionally, pure API libraries (like `lib/ukfalloc`) would not even cause
    building a linker script that is shipped with the library or injected with
    an `EACHOLIB_SRCS` declaration. The library buildrule is generated but
    because no library object is generated, the linker script was never be part
    of a dependency list.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit ae0ee99ee2f79b8db511ab97a4f3d3f3218ca121
Author: calex257 <alexandru.calciu@stud.acs.upb.ro>
Date:   Sat Feb 25 17:53:56 2023 +0200

    lib/nolibc: Add README.md

    Add a brief description of nolibc, providing an overview
    of its purpose, usage and limitations.

    This commit also shows a relevant example of how to configure
    an application to use Unikraft-specific assertions or the ones
    implemented in nolibc.

    Signed-off-by: Alexandru Calciu <alexandru.calciu@stud.acs.upb.ro>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #778

commit 3e7a08afd4147f4f101a72765bf105968cce11f9
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:24:08 2023 +0200

    lib/vfscore: Cleanup sys_symlink

    This commit cleans up sys_symlink() according to the current coding
    conventions and uses separate jump labels for exits depending on
    if the vnode lock needs to be released or not.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 20a2f602813e407754f217b1804384b9289d21e2
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:19:05 2023 +0200

    lib/vfscore: Do not copy oldpath in symlink

    With the changes to the vnode ops definitions the symlink operation
    takes a constant string. We can thus just pass the input string on
    without having to copy it.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 429a017dcf3bd3b2429a87c55686cb47d81bb875
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:16:06 2023 +0200

    lib/ramfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 22c1a55814bd3763ea35285ae75a14ee5accf988
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:14:49 2023 +0200

    lib/devfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 3ab142f25240e39fe90c8fe97cbc0525e8ede89d
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:14:11 2023 +0200

    lib/9pfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit e04174a8eae7eaf16be08b93142ccd3266ce58d6
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:12:09 2023 +0200

    lib/vfscore: Make vnops strings constant

    The current vnode operations define strings as mutable, which
    makes it more difficult to do optimizations. Since no buffer size
    is supplied the strings can only be modified on a char-for-char
    basis anyways, which also limits the use-cases. In addition, no
    implementation of the vnode operations makes use of the
    mutability of the strings.

    This commit thus introduces the `const` keyword for all strings
    passed to vnode operations.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 7ef5bbccffa6592a0d6da0efedd3c63366ba3cbb
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 10:04:04 2023 +0200

    lib/posix-futex: Check for proper FUTEX_CLOCK_REALTIME usage

    The documentation specifies a list of operations which support this
    flag. This adds a check that explicitly rejects all invalid combinations
    and returns `ENOSYS` according to the documentation.

    Checkpatch-Ignore: ENOSYS
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 54d27549bfa6a0c3aaffe08d10c7e9a5101f8c0d
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 09:57:45 2023 +0200

    lib/posix-futex: Ignore FUTEX_PRIVATE_FLAG

    The flag can be specified for all operations and does not make a
    difference in the context of a single-process scenario. Therefore, we
    can ignore it.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit c905e263471c9081e457d1d0041a083dec53f828
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 16:44:35 2023 +0100

    lib/posix-futex: Implement subset of FUTEX_WAIT_BITSET

    Many modern applications use FUTEX_WAIT_BITSET to be able to set an
    absolute timeout. To accomplish that they set all bits in the val3/mask
    parameter, which makes the operation equivalent to a normal FUTEX_WAIT
    (except the absolute timeout value).

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 7683671942d29fb5c3cc4c6471f257f0dc290687
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 15:57:30 2023 +0100

    lib/uksched: Expose uk_thread_block_until

    This allows external API clients to specify an absolute deadline for
    waking up. This is potentially more precise because the `timeout` is
    relative to whenever uk_thread_block_timeout is actually taking the
    "current" time.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 5223ae6691e0d8ee449ece64f6f9bde3aaeb7643
Author: Nour-eddine Taleb <contact@noureddine.xyz>
Date:   Sat Mar 25 19:56:47 2023 +0000

    lib/uksched: fix docs

    Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #809

commit c00afb4d422af1377374bfee5d4ea52cec0cbea0
Author: Nour-eddine Taleb <contact@noureddine.xyz>
Date:   Thu Mar 23 23:15:24 2023 +0000

    lib/posix-futex/test: port the test cases to the new sched apis

    due to the changes in scheduling apis, it was necessary to update
    posix-futex tests which still relays on the old apis.

    GitHub-Fixes: #630
    Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #809

commit ce2e3dae5f8d876e38dcdcf0c3a83850cfb98dc8
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 11:22:18 2023 +0100

    plat/kvm/x86: Stop unwinding at _libkvmplat_entry2

    The _libkvmplat_entry2 function is called using assembler code that
    switches stacks. Therefore, a debugger can't unwind its frame. This
    inserts a CFI that marks the previous instruction pointer as undefined.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit 7f450a9834e4c31a938e8a59e72006ec9389cc18
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 15:15:52 2023 +0100

    plat/kvm/x86: Add unwinding information to interrupt/exception handlers

    This allows debuggers and profilers to unwind past interrupt/exception
    handlers.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit f87e378199fa87c07e77b36c5c979c9194fb1d93
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Dec 21 11:01:34 2022 +0100

    plat/x86: Add unwind information to system call handler

    Without this information debugging tools do not know how to properly
    unwind the _ukplat_syscall frame. For example, this causes them to
    output garbage output for back traces.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit b88c21a231243845cbc155e1c7f0bcccd181a1c5
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 11:40:13 2023 +0100

    arch/x86: Add helpers for CFI in assembler code

    This introduces helpers for maintaining frame information when using
    push and pop in assembler code.

    Checkpatch-Ignore: SPACING
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit 6d07539298dae30eb07f078942563af2be60acd9
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue May 24 20:17:14 2022 +0200

    lib/nolibc: Define u_(long|int|short_char) for _DEFAULT_SOURCE files

    These typedefs are commonly used in BSD code. Most libc libraries define
    them by default or for _DEFAULT_SOURCE files. Because unikraft is
    usually closer to Linux, this adopts the later approach.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.…
dragosp27 added a commit to dragosp27/unikraft that referenced this issue Jun 3, 2023
commit b0da6bfc5286027fd4b77256e4bef5725cbeaba9
Author: Alexander Jung <alex@nder.sh>
Date:   Mon May 15 23:09:49 2023 +0200

    Release: v0.13.0 Atlas

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Signed-off-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Signed-off-by: Alexander Jung <alex@unikraft.io>

commit 8da5cbb6cd6e973a4c6cdbb4b113d5fc222a57fb
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Mar 24 17:33:17 2023 +0100

    lib/ukargparse: Support escaping of quotes

    This commit introduces the support of escaping single (`'`) and double
    quotes (`"`) with the escape character `\`. The behaviour is similar to
    what one expects from Unix shells, like `sh` or `bash`.

    Single-quoted characters and character sequences preserve each character.
    Double-quoted characters and character sequences preserve each character
    except the backslash `\`. The backslash can be used to switch of the
    special meaning of a character, like the double quote (`\"`) or a
    backslash (`\\`).

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #893

commit 7279c2d240e92285aaf2e7ebd48813a70f3d20a7
Author: Costin Sin <sin.costinrobert@gmail.com>
Date:   Sat May 13 06:48:31 2023 +0000

    lib/posix-time: Add clock_nanosleep syscall

    clock_nanosleep syscall should mimic the nanosleep syscall
    when the clockid equals CLOCK_REALTIME and the TIMER_ABSTIME flag is
    missing.

    Signed-off-by: Costin Sin <sin.costinrobert@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #891

commit 8ea48c6f064f62ab007300d87de93bb8f61f854c
Author: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
Date:   Tue Apr 4 20:17:40 2023 +0000

    lib/vfscore: Dynamically allocate mount paths

    Currently `m_path` and `m_special` are statically-allocated arrays,
    meaning their storage spaces are wasted in `static struct mount`
    variables.  Dynamically allocate these variables to save on binary size.

    Also add initcalls to initialize `struct mounts` in lib/posix-event,
    lib/posix-socket and lib/vfscore.

    Signed-off-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #826

commit a7698597cd20b726dc15405368c3bf23050304c8
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Sat May 13 01:28:57 2023 +0300

    lib/vfscore: Initialize lists for stdio_vnode

    The VFS `struct vnode` structure has two `uk_list_head` members:
    `v_link` and `v_names`. These need to be initialized by a dedicated
    macro / function, such as `UK_LIST_HEAD_INIT`.

    The `stdio_vnode` variable (of type `struct vnode`) is not initializing
    these members (they are filled with zeros). This will cause crashes when
    using them.

    This commit fixes that by properly initializing the `v_link` and
    `v_names` members of the `stdio_vnode` variable.

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #889

commit 7b76234d3351c4d4414ba341c2d4fb9fd6220b62
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Sat May 13 01:45:43 2023 +0300

    lib/vfscore: Add semicolon to DPRINTF macro

    The `DPRINTF()` macro in `vfscore` requires a semicolon (`;`). If this
    is not present (once `DEBUG_VFS` is enabled), a build issue occurs.

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #890

commit cb35dfff57bdc7b7e2896922fd0743e4f25f5972
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Mon Mar 13 11:12:46 2023 +0530

    lib/uklock: Add SMP-safe reader-writer lock

    This commit introduces a reader-writer lock. To avoid
    starvation of readers and writer, the lock maintains the current
    count of readers and writers waiting for the lock. New readers give
    priority to waiting writers and writers give priority to readers on
    unlock.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit 362ddab80a491a4ed3a7d2354813f2fb94282086
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 15:49:53 2023 +0530

    lib/uklock: Make semaphore SMP safe

    On uniprocessor systems, it is sufficient to disable interrupts.
    In SMP environments, however, it is not because a thread executing on a
    different core can give rise to a race condition. Hence, to make the
    semaphore SMP safe, we use a spinlock.

    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit edda7dff6f86d94ef46342a3f71974158469826b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 15:06:02 2023 +0530

    lib/uklock: Make mutex SMP safe

    We can safely acquire a lock on uniprocessor systems by disabling the
    interrupts, but this does not work in an SMP environment. Hence, to
    make the mutex SMP safe, this commit uses atomic compare exchange.
    The commit also makes recursive locking optional (disabled by default).
    While this is a breaking change, recursive locks are discouraged and
    should only be used with caution. The current Unikraft core does not
    use recursive locks anywhere.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit f205fee3da57c467ce1cf9cf33f88d529e79875b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 12:22:01 2023 +0530

    lib/uklock: Provide irqf wrappers for uk_spinlock

    Holding a spinlock which is required by an interrupt handler, causes a
    deadlock. To avoid this, the programmer must disable the interrupt
    before acquiring such spinlocks. This involves saving the interrupt
    flags before acquiring the spinlock and restoring them after
    releasing the spinlock.

    This commit provides versions of the ukplat_spin_* macros for the
    uk_spinlock.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit d073d652299d53509d059b60706eee236d5c0d10
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Sun Mar 12 13:25:56 2023 +0530

    lib/uksched: Add unconditional wait and wakeup_one

    This commit adds an unconditional wait, which is required
    for reader-writer locks. The commit also adds an interface to
    wakeup only a single thread sleeping on a wait queue.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit a078828e0d7a5d33b3d2c4bd62b79e02ddcf7b9b
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 16:52:53 2023 +0530

    lib/uksched: Make wait queues SMP safe

    Wait queues use a linked list to store the threads waiting on a
    particular condition. But operations such as add to and remove
    from the list are not SMP safe. Hence, this commit associates
    a spin lock with each wait queue.

    Co-authored-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit 3970edf400001f0fb62a86a1dea898e323aafd3e
Author: Sairaj Kodilkar <skodilkar7@gmail.com>
Date:   Tue Jan 31 12:17:50 2023 +0530

    include/arch: Add macros for atomic add, sub, or

    This commit adds macros to atomically add, subtract, and
    perform a bitwise or based on the builtins provided by GCC.

    Signed-off-by: Sairaj Kodilkar <skodilkar7@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #476

commit dedc1b71eecc0ac25eb60a5d62a7a10f9b7b7c28
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 17:24:10 2023 +0200

    lib/vfscore: Avoid recursive locking in sys_rename

    If the source and destination directories are the same in sys_rename,
    the vnode is locked two times. This is problematic with non-recursive
    mutexes. Also the double checks for access are not needed. This commit
    adds a check to make sure in this case, only a single lock is done and
    redundant checks are avoided.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #888

commit 55cf96d011284e35fced79e8d8bac4934d0c8d6d
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 16:19:06 2023 +0200

    lib/ukswrand: Add missing errno include

    This commit adds an include for errno.h that might not be included
    otherwise and causes the build to fail.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #887

commit dfe489a4f27aff6c74b2c7c8b111e0afb73e5a96
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 14:00:38 2023 +0200

    lib/uk9p: Add workaround for QEMU WSTAT fsync bug

    This commit adds a workaround for a bug in QEMU where performing
    an fsync using the WSTAT command in 9P2000.u leads to a zero-sized
    response.

    Checkpatch-Ignore: SUSPECT_CODE_INDENT
    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #886

commit d2c0ccd32602e337c12fb50867a2b24530fa0f8f
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Fri May 12 13:58:50 2023 +0200

    lib/9pfs: Fix wrong fid for fsync in 9P2000.u

    Performing an fsync with the 9P2000.u protocol version previously
    resulted in an I/O error. This is because we used the wrong fid
    in the request. This commit moves the implementation of setattr
    into a separate function that accepts the fid to use, and adjusts all
    callers to provide the fid.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #886

commit d7f598242afd95dceab42983d8d616885e618cbf
Author: Razvan Deaconescu <razvand@unikraft.io>
Date:   Fri Feb 3 13:41:38 2023 +0200

    lib/nolibc: Add -ffreestanding flag

    GCC optimizes the use of `memcmp()` if the `-ffreestanding` flag is
    missing. In the current configuration, the flag is missing for GCC <= 9.
    The resulting optimization causes in an infinite loop for `lib/nolibc`.

    This commit fixes the issue by adding the `-ffreestanding` flag for
    `lib/nolibc`, irrespective of the GCC version.

    GitHub-Fixes: #728

    Signed-off-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #740

commit 7eac25ea53ae833294652d6f38d04732612145b6
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 22:48:53 2023 +0300

    lib/posix-process: Fix debug printing of TIDs

    This commit makes so that the correct info will be printed when the current
    thread gets killed. Before, instead of the actual TID, the empty TID from
    the iterator would be printed.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit d4100c9dc4dfffdebd48ce8788d04ca3fa75d066
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 13:07:48 2023 +0300

    lib/posix-process: Reserve PID/TID 0 for kernel

    This commit marks the TID/PID as unavailable to mimic the behaviour of
    other kernels. This change also make pthread_rwlocks from glibc work in
    binary compatibility mode.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit a1c73be910b779b3b57a5ae79435d4f86b488fa2
Author: Florin Postolache <florin.postolache.of@gmail.com>
Date:   Thu May 11 12:44:58 2023 +0300

    lib/posix-process: Correct MAX_PID config option

    This commit changes the tid_map size to reflect the kernel
    reservation of the 0 TID/PID value. Before, the first thread
    would set the 0 position in all used structures. Now, because
    it will be already set, we need to make room for another.

    Signed-off-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Andra Paraschiv <andra@unikraft.org>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #885

commit ddefe64f12ab4599f0ea3064bbbfedbf5205384f
Author: Andra Paraschiv <andra@unikraft.org>
Date:   Wed May 10 13:40:27 2023 +0300

    lib/vfscore: Fix file path resolution for 9pfs setup

    The path resolution doesn't correctly work for a set of file cases
    (e.g. symlinks to binaries or shared libraries).

    One setup example is using 9pfs and the entire root local filesystem,
    while running the "ls" binary and loading the shared libraries:

    unikraft/support/scripts/qemu-guest -k build/app-elfloader_qemu-x86_64
    -e / -a "/bin/ls /"

    A "/" character is omitted from the last part of the path e.g. "/binls"
    instead of "/bin/ls". Update the logic to include the missing character.

    Signed-off-by: Andra Paraschiv <andra@unikraft.org>
    Reviewed-by: Florin Postolache <florin.postolache.of@gmail.com>
    Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #883

commit b2c2164eeb2745325489003dc6b52354c02a9a4d
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri May 5 15:44:28 2023 +0200

    lib/vfscore: `fs0` as default device name for 9PFS

    This commit changes the default device/tag name for an automatically
    mounted 9pfs root volume from `rootfs` to `fs0`. This is done for
    convenience because `fs0` is the tag name that the `qemu-guest` support
    script uses to name the first 9pfs share.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #875

commit 5784d007b1d2b727d3151f84ea70e5dd4683df32
Author: Andrei Tatar <andrei@unikraft.io>
Date:   Mon May 8 11:02:45 2023 +0200

    build: Disable compiler control flow protection

    Compiler flag -fcf-protection sets control-flow integrity measures
    that improve security, and sometimes defaults to enabled on distro
    compilers. Some aspects of this feature are implemented in the compiler
    header <cet.h> for e.g., stack unwinders. If this header is missing some
    programs fail to compile.
    Since we don't (yet) support pulling compiler headers into unikraft
    build, this change disables cf-protection globally.

    Signed-off-by: Andrei Tatar <andrei@unikraft.io>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #881

commit cfc103cf6fc09add1291990a8b44a172a54195c5
Author: Stefan Jumarea <stefanjumarea02@gmail.com>
Date:   Sun May 7 13:53:19 2023 +0300

    plat/kvm/x86: Fix register names for clang

    `clang` does not understand the `rflags` register name, so the build
    will fail. On the other hand, `gcc` does not understand `flags`, so the
    register naming needs to be placed inside `#ifdef` guards.

    Signed-off-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Marco Schlumpp <marco@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #877

commit c04312c813a9ce47476f3ea7ece77f22cd888dcd
Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
Date:   Sun Apr 16 15:08:17 2023 +0200

    plat/*, lib/ukalloc: Use PAGE_ALIGN_UP(), PAGE_ALIGN_DOWN()

    We have PAGE_ALIGN_DOWN, PAGE_ALIGN_UP, and PAGE_ALIGN macros, but don't
    use them consistently. At places we still have code that does custom
    ALIGN_DOWN, ALIGN_UP, and masks. Use appropriate macros everywhere.

    This patch was generated by the following Coccinelle rule:

        @@
        expression E;
        @@

        - ALIGN_DOWN(E, __PAGE_SIZE)
        + PAGE_ALIGN_DOWN(E)

        @@
        expression E;
        type T;
        @@

        - ALIGN_DOWN(E, (T) __PAGE_SIZE)
        + PAGE_ALIGN_DOWN(E)

        @@
        expression E;
        @@

        - ALIGN_UP(E, __PAGE_SIZE)
        + PAGE_ALIGN_UP(E)

        @@
        expression E;
        type T;
        @@

        - ALIGN_UP(E, (T) __PAGE_SIZE)
        + PAGE_ALIGN_UP(E)

        @@
        expression E;
        @@

        - (E + PAGE_SIZE - 1) & PAGE_MASK
        + PAGE_ALIGN(E)

    Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
    Reviewed-by: Dragos Petre <dragos.petre27@gmailcom>
    Reviewed-by: Alexandru Calciu <alxcalciu@gmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #842

commit 5d9c4d702ec4a6e9de4e848a727db21e06d5d3b7
Author: Maria Sfiraiala <maria.sfiraiala@gmail.com>
Date:   Mon May 8 10:49:43 2023 +0300

    lib/{nolibc,isrlib}: Modify pointer comparison

    This commit typecasts `src` and `dst` strings from `memmove()` to ensure
    that their values are treated as pointers.

    It also modifies the function implementation to handle overlapping.

    Co-authored-by: Soumya Ranjan <ranjan42069@gmail.com>
    Signed-off-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Signed-off-by: Soumya Ranjan <ranjan42069@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #880

commit 4e139b3164bb4ead5cec2760ea0f3fd4aecb762c
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Apr 12 11:09:26 2023 +0200

    build: Do not use segment annotations on linuxu

    For the linuxu platform we rely on the default linker script and only
    add some additional sections on top of that one. That also means that
    there aren't any segments defined. This makes the segment specification
    opt-in instead of assuming the segments are always defined.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: COMPLEX_MACRO
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #833

commit 7255b0ee1209d3309a610d8ea516fbc21ea84e27
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Apr 12 11:06:17 2023 +0200

    lib/ukdebug: Mark tracepoint sections as unallocated notes

    At runtime we don't care about the content of them, and we only need
    them on host side to decode the trace buffer.
    This also prevents the linker from adding a segment for these sections.
    Because the resulting segment sometimes only contained these two
    sections, the final `strip` step would end up with an empty segment.
    And in the case of the linuxu platform the resulting image was not
    working anymore.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #833

commit d57a4c7cd10ab8d781a089629cb310b8e8de3c91
Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
Date:   Wed May 10 14:12:39 2023 +0300

    plat/linuxu: Avoid re-initialization of the `heap` and `initrd`

    Keep a locally declared static variable `init` to cache the
    current amount of memory region descriptors. This way, whenever
    `ukplat_memregion_count` is called, `__linuxu_plat_heap_init` and
    `__linuxu_plat_initrd_init` do not have to be executed more than
    once.

    Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #878

commit 372475c140863dabab697f01ab485c971a3ba054
Author: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
Date:   Wed May 10 14:12:01 2023 +0300

    plat/linuxu: Add check for memory region index out of range

    Ensure that we do not try to fetch a memory region descriptor by an
    index that is larger than our current memory region descriptor count.

    Furthermore, this guarantees that `ukplat_memregion_count` is always
    called before `ukplat_memregion_get` is executed fully. This way we
    will always have the memory region descriptors as well as their count
    set up and available before we try to fetch one.

    Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
    GitHub-Fixes: #766
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #878

commit d39b30308e957893cd2bed2115aeb056f2b08b59
Author: Alexander Jung <alex@unikraft.io>
Date:   Mon May 8 07:43:37 2023 +0000

    support/scripts: Add additional recognised Git trailers to checkpatch

    This commit introduces 3 additional Git trailers to be recognised by the
    checkpatch program:

     - GitHub-Fixes   - Used to reference and address an open issue, often
                        a specific bug or problem. GitHub will automatically
                        close the issue once the commit with this Git
                        trailer is merged.
     - GitHub-Closes  - Used to reference an open issue or PR, which is not
                        specific to a particular bug.  For example, it can
                        be used to supercede another PR.  GitHub will
                        automatically close the referenced issue or PR once
                        a commit with this Git trailer is merged.
     - Co-authored-by - Similar to providing additional Signed-off-by's,
                        this trailer is recognised by GitHub and helps
                        attribute authorship, making the user's profile
                        more visible.
     - Approved-by    - Signifies the authoritive representative (usually a
                        project maintainer) who approved the commit.

    Additional adjustments to the checkpatch script are made in order to
    recognise non-standard Git trailer values (those from GitHub).

    Signed-off-by: Alexander Jung <alex@unikraft.io>
    Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com>
    Reviewed-by: Radu Nichita <radunichita99@gmail.com>
    Reviewed-by: Gabi Mocanu <gabi.mocanu98@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #879

commit 47c243c394548b1198951f44af1c7101bd868589
Author: Aryan Verma <aryanvarma7272@gmail.com>
Date:   Thu Feb 16 15:19:32 2023 +0530

    doc: Add Codacy code quality status badge to README.md

    GitHub-Fixes: #650
    Signed-off-by: Aryan Verma <aryanvarma7272@gmail.com>
    Co-authored-by: Alexander Jung <alex@unikraft.io>
    Reviewed-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #764

commit 84172dbfbe07b91cade20eb6c88f2c4a1c2e6255
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Mon May 8 16:38:14 2023 +0200

    lib/uklibparam: Fixes for review PR #867

    Commits
     - 7741af97 "`UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`"
     - 1cc3a2f6 "Rewrite of parser"
     - 243f0c45 "Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S"
     - 910b9bef "Add linker scripts to link dependencies"
    should have been included with PR #867 but got merged by mistake with
    PR #868 due to a dependency.

    This commit addresses the comments provided with the review for PR #867.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #882

commit 275429893d983ff13d9874b310b4566c254631fe
Author: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
Date:   Sun Apr 16 11:57:44 2023 +0200

    plat/xen: Fix unchecked uk_palloc() value in x86/mm.c

    The return value of uk_palloc is not checked in _arch_init_p2m.

    Allocation failure at that point should never happen, but it's not a
    reason not to check.

    At this stage, in the event of a failure, we should probably abort the
    boot altogether.

    This bug was detected using the following Coccinelle spatch:

        @call@
        expression ptr;
        position p;
        @@

        ptr@p = uk_palloc(...);

        @ok@
        expression ptr;
        position call.p;
        @@

        ptr@p = uk_palloc(...);
        ... when != ptr
        (
         (ptr == NULL || ...)
        |
         (ptr != NULL || ...)
        )

        @depends on !ok@
        expression ptr;
        position call.p;
        @@

        ptr@p = uk_palloc(...);
        + if (ptr == NULL) return;

    Signed-off-by: Hugo Lefeuvre <hugo.lefeuvre@manchester.ac.uk>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Approved-by: Simon Kuenzer  <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #839

commit b240edc27abe95d22034d1b4ea7d582dd93098c2
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Mon May 1 19:13:55 2023 +0300

    lib/vfscore: Handle `FIONBIO` command in `pipe_ioctl()`

    The current `ioctl` implementation for pipes does not handle
    the `FIONBIO` command, which leads to a negative error value being
    returned. This commit introduces a simple case which sets the FNONBLOCK
    flag when such a command is passed.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Tu Dinh Ngoc <dinhngoc.tu@irit.fr>
    Reviewed-by: Eduard-Florin Mihailescu <mihailescu.eduard@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #874

commit 0f75e55ba08647b2e398a19aea35f31b06c0da6a
Author: Andrei Tudor TOPALĂ (101668) <topala.andrei@gmail.com>
Date:   Fri Apr 15 00:36:51 2022 +0300

    plat/common: Add firecracker shutdown signal

    Firecracker emulates a PS/2 controller and detects attempted writes to
    the CPU reset line.

    Co-authored-by: Marco Schlumpp <marco@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 59111c4f28254c0614c62d56113e2048300a5549
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 11:19:33 2023 +0200

    plat/kvm: Include target hypervisor in image name

    This makes it more clear on what hypervisor the image works on.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 789cdba609d4c879e6b8bfc05c7b89cc85c1f3b7
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Tue Apr 11 17:58:08 2023 +0200

    plat/kvm/x86: Use position independent code for lxboot

    This should make it easier in the future to extend the entry point to
    support proper boot loaders such as the one in QEMU.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit f0ae44de725f698505060756d85558361fcd2abb
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:47:36 2023 +0100

    plat/kvm/x86: Workaround re-mapping low-mem areas

    The paging code currently does not unmap the memory area before the
    kernel image, but then tries to re-map any region in that area.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit e85a0cd860e4166b26269785e229c6676b175a30
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:43:51 2023 +0100

    plat/kvm/x86: Add an entry point for the firecracker hypervisor

    This is currently not conforming to the actual Linux boot protocol and
    only suitable for firecracker. The kernel image would have to include a
    proper Linux boot protocol header to allow loading with proper
    bootloaders such as the one in QEMU.

    Co-authored-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit ebb4795a3a41e8196f501f5b0b7d7a88361ad7f3
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:41:00 2023 +0100

    plat/kvm/x86: Add structures/definitions for the linux boot protocol

    This defines the necessary structures to parse the information passed by
    a linux boot protocol compatible bootloader.

    Co-authored-by: Marc Rittinghaus <marc@unikraft.io>
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit deef081dd04ee254c03266b431befb3ae4d2a329
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:38:27 2023 +0100

    plat/kvm: Add hypervisor/boot protocol configuration

    This allows the configuration of a target hypervisor. Depending on the
    hypervisor a suitable boot protocol is selected.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 7190449a7a0bdd0ffcd90c37fa0a8d2fc287c804
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Feb 13 16:58:19 2023 +0100

    plat/common: Extract non-multiboot specific memory region helpers

    The multiboot entry point had a few internal functions that are also
    useful for other entry points.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 70b260d0668eb0850465c525ac1ca6b697b23ce3
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Tue Apr 25 10:05:41 2023 +0200

    include/uk: Simplify RANGE_OVERLAP macro

    We can simplify the check by observing that there are only two
    conditions necessary to check whether a range does *not* overlap:
     - the end of range 0 is before the start of range 1
       [--0--) [--1--)
     - OR the start of range 0 is after the end of range 1
       [--1--) [--0--)
    Inverting this gives us a simple condition for checking whether ranges
    *do* overlap.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit 7346338847c8449389316ffc2c554a5d3637ba69
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 14:34:39 2023 +0100

    plat/*: Introduce cmdline length to bootinfo

    Some boot protocols already have the length information and the internal
    command line handling works with non-null terminated strings anyway.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit ad684b5175f70e78dc37ed63d8a124c2b6e53d1c
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 13:09:03 2023 +0100

    plat/kvm/x86: Don't create fine-grained mapping for low memory

    Mapping all memory makes the page table more independent of the actual
    boot protocol. Firecracker currently puts the protocol information at a
    very low address (0x7000).

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #760

commit c7c221dc66b124752250a39a677e4a9bbe3f2c24
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Fri Feb 24 17:18:55 2023 +0100

    plat/kvm: Remove intermediate relocatable object step

    This object was previously used to hide all symbols except the entry
    point. But this step was removed making the relocatable object creation
    unnecessary.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #789

commit 195cc32f7e5e65d8929ae65b8fa9203ddf246ba6
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Thu Mar 16 14:13:06 2023 +0200

    plat/drivers/ofw: Fix search in `fdt_node_offset_by_compatible_list`

    The current implementation returns as soon as a node that matches a
    compatible string is found. However, we should iterate through all of
    the compatible list to make sure that we return the node with the least
    offset value such that future searches will not skip any matching nodes.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
    Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
    Approved-by: Michalis Pappas <michalis@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #805

commit dfbf3ffd2cf2542e97129e017f4a06afd65b079c
Author: Eduard Vintilă <eduard.vintila47@gmail.com>
Date:   Thu Mar 16 14:10:46 2023 +0200

    plat/drivers/ofw: Fix incorrect offset in `fdt_translate_one`

    When a node is missing the "ranges" property, offset should be set to 0.
    The current implementation sets offset to the address to be translated,
    which ignores the fact that `fdt_default_translate`  is later called.
    The latter function adds the offset to the same address,
    resulting in doubling the effective address, when in fact a 1-to-1
    mapping is necessary.

    Signed-off-by: Eduard Vintilă <eduard.vintila47@gmail.com>
    Reviewed-by: Robert Kuban <robert.kuban@opensynergy.com>
    Reviewed-by: Razvan Virtan <virtanrazvan@gmail.com>
    Approved-by: Michalis Pappas <michalis@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #805

commit 4792af49d89c1c0e141b40720d4ec1b89530411a
Author: Takeru Wada <takew@asg.cs.tuat.ac.jp>
Date:   Mon Mar 13 14:37:51 2023 +0000

    lib/nolibc: Remove warnings of timespec

    This commit fixes the definition of pointer arguments in GCC >= 11.

    Signed-off-by: Takeru Wada <takew@asg.cs.tuat.ac.jp>
    Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #800

commit ec2c285ea91fac0a178e6c550c122e6bc82f10dd
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Mar 16 17:31:42 2023 +0100

    lib/ukboot: Print environment variables before entering main

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 3f89855cf89e38a009d85da26b1355f167985ca8
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Tue Mar 14 15:18:12 2023 +0100

    lib/posix-environ: Symbol aliases for `environ`

    In order to comply with common libc behavior, we provide the following
    symbol aliases for environ`: `_environ`, `__environ`, `___environ`.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit fefaa0591880d69770a869cbc06f85b38872dc61
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 01:45:52 2023 +0100

    lib/posix-environ: Variables from kernel command line

    Introduces the ability to populate additional environment variables via the
    kernel command line.

    Checkpatch-Ignore: SPACING
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 6f2798a9f2a95d02c9aec763a3c6e7649350f104
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Wed Feb 15 00:32:29 2023 +0100

    lib/posix-environ: Compiled-in environment variables

    We introduce the ability to compile-in up to 16 environment variables.
    The values can be set via `menuconfig`. The initial `environ` array is
    automatically sized to match the number of compiled-in values.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit a46c0c1d63a71742e79b4fdd1bf690df560abf8d
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 9 21:54:40 2023 +0100

    lib/posix-environ: Register and make it compile

    This commit integrates and enables compiling of the imported environment
    helper functions (see previous commit).

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit e9b7d00e5407dc0c4cfeb912b2f3329cdc5ff28b
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Wed Feb 8 17:01:41 2023 +0100

    lib/posix-environ: Import from musl 1.2.3

    This commit imports needed code from musl 1.2.3. This concentrates mostly
    on the following helper functions for environment variables:
     - `clearenv()`
     - `getenv()`
     - `putenv()`
     - `setenv()`
     - `unsetenv()`

    Checkpatch-Ignore: FUNCTION_WITHOUT_ARGS
    Checkpatch-Ignore: LINE_SPACING
    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: TRAILING_STATEMENTS
    Checkpatch-Ignore: SIZEOF_PARENTHESIS
    Checkpatch-Ignore: TYPO_SPELLING
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 7741af977fd2c723272abfce8c166deb125cf6c6
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 01:42:55 2023 +0100

    lib/uklibparam: `UK_LIBPARAM_PARAM_ALIAS()`,`UK_LIBPARAM_PARAM_ARR_ALIAS()`

    This commit provides `UK_LIBPARAM_PARAM_ALIAS()` and
    `UK_LIBPARAM_PARAM_ARR_ALIAS()` which are variants of `UK_LIBPARAM_PARAM()`
    and `UK_LIBPARAM_PARAM_ARR()`. These registration macros allow to set a
    custom parameter name instead of deriving it from the variable name.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 1cc3a2f6e33d1dbb390d24e79f73b86b34597b23
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Fri Feb 24 00:42:29 2023 +0100

    lib/uklibparam: Rewrite of parser

    This commit introduces a rewrite of `lib/uklibparam`. The rewrite ensures
    that it is errno-free, malloc-free, and TLS-free. This makes it ideal for
    processing library parameters early during boot. It includes an own and
    modified version of `strtoull` function that is used for parsing integer
    values from the command line.
    Additionally, the parser can handle arrays more intuitively (and for any
    data type of the elements) while fully utilizing pre-processed argument
    vectors. It relies on the fact that whitespacing and quoting is already
    handled (e.g., by `lib/ukargparse`). There are new types that are more
    inline with the ones defined by ukstore.

    This rewrite introduces the ability to provide a parameter description
    with updated parameter registration macros:
      UK_LIBPARAM_PARAM(variable, type, description)
      UK_LIBPARAM_PARAM_ARR(variable, type, count, description)
    The description is printed on the help output.

    The previous interfaces are kept for backwards compatibility. However,
    it is planned to remove them as soon as the code base is completely
    adopted.

    Checkpatch-Ignore: SPACING
    Checkpatch-Ignore: OPEN_BRACE
    Checkpatch-Ignore: MACRO_WITH_FLOW_CONTROL
    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 243f0c45ca8060a230e0bde34783b75c0fefb47a
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 23 22:21:04 2023 +0100

    build: Declare __LIBNAME__, __BASENAME__ and __VARIANT__ for .lds.S

    .lds.S files are linker script files that use the C preprocessor in order
    to generate the final .lds file. This commit provides Unikraft's common
    declarations of `__LIBNAME__`, `__BASENAME__`, `__VARIANT__` to this
    pre-processing step so that they can be used for generating linker scripts.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit 910b9befc07212f8b1313b234ce162dd6130e0d0
Author: Simon Kuenzer <simon@unikraft.io>
Date:   Thu Feb 23 21:47:59 2023 +0100

    plat/*: Add linker scripts to link dependencies

    This commit adds needed linker scripts as dependency to the linking rule
    of the final image. This dependency was mostly indirectly covered via
    libraries. However, updates to platform linker scripts did not trigger
    relinking the final image.
    Additionally, pure API libraries (like `lib/ukfalloc`) would not even cause
    building a linker script that is shipped with the library or injected with
    an `EACHOLIB_SRCS` declaration. The library buildrule is generated but
    because no library object is generated, the linker script was never be part
    of a dependency list.

    Signed-off-by: Simon Kuenzer <simon@unikraft.io>
    Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #868

commit ae0ee99ee2f79b8db511ab97a4f3d3f3218ca121
Author: calex257 <alexandru.calciu@stud.acs.upb.ro>
Date:   Sat Feb 25 17:53:56 2023 +0200

    lib/nolibc: Add README.md

    Add a brief description of nolibc, providing an overview
    of its purpose, usage and limitations.

    This commit also shows a relevant example of how to configure
    an application to use Unikraft-specific assertions or the ones
    implemented in nolibc.

    Signed-off-by: Alexandru Calciu <alexandru.calciu@stud.acs.upb.ro>
    Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #778

commit 3e7a08afd4147f4f101a72765bf105968cce11f9
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:24:08 2023 +0200

    lib/vfscore: Cleanup sys_symlink

    This commit cleans up sys_symlink() according to the current coding
    conventions and uses separate jump labels for exits depending on
    if the vnode lock needs to be released or not.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 20a2f602813e407754f217b1804384b9289d21e2
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:19:05 2023 +0200

    lib/vfscore: Do not copy oldpath in symlink

    With the changes to the vnode ops definitions the symlink operation
    takes a constant string. We can thus just pass the input string on
    without having to copy it.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 429a017dcf3bd3b2429a87c55686cb47d81bb875
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:16:06 2023 +0200

    lib/ramfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 22c1a55814bd3763ea35285ae75a14ee5accf988
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:14:49 2023 +0200

    lib/devfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 3ab142f25240e39fe90c8fe97cbc0525e8ede89d
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:14:11 2023 +0200

    lib/9pfs: Switch to const strings for vnops

    This commit changes all vnode operations to accept constant
    string parameters to be inline with the changed definitions.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit e04174a8eae7eaf16be08b93142ccd3266ce58d6
Author: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Date:   Tue Apr 25 12:12:09 2023 +0200

    lib/vfscore: Make vnops strings constant

    The current vnode operations define strings as mutable, which
    makes it more difficult to do optimizations. Since no buffer size
    is supplied the strings can only be modified on a char-for-char
    basis anyways, which also limits the use-cases. In addition, no
    implementation of the vnode operations makes use of the
    mutability of the strings.

    This commit thus introduces the `const` keyword for all strings
    passed to vnode operations.

    Signed-off-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Reviewed-by: Sergiu Moga <sergiu.moga@protonmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #866

commit 7ef5bbccffa6592a0d6da0efedd3c63366ba3cbb
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 10:04:04 2023 +0200

    lib/posix-futex: Check for proper FUTEX_CLOCK_REALTIME usage

    The documentation specifies a list of operations which support this
    flag. This adds a check that explicitly rejects all invalid combinations
    and returns `ENOSYS` according to the documentation.

    Checkpatch-Ignore: ENOSYS
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 54d27549bfa6a0c3aaffe08d10c7e9a5101f8c0d
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Apr 17 09:57:45 2023 +0200

    lib/posix-futex: Ignore FUTEX_PRIVATE_FLAG

    The flag can be specified for all operations and does not make a
    difference in the context of a single-process scenario. Therefore, we
    can ignore it.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit c905e263471c9081e457d1d0041a083dec53f828
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 16:44:35 2023 +0100

    lib/posix-futex: Implement subset of FUTEX_WAIT_BITSET

    Many modern applications use FUTEX_WAIT_BITSET to be able to set an
    absolute timeout. To accomplish that they set all bits in the val3/mask
    parameter, which makes the operation equivalent to a normal FUTEX_WAIT
    (except the absolute timeout value).

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 7683671942d29fb5c3cc4c6471f257f0dc290687
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Thu Feb 9 15:57:30 2023 +0100

    lib/uksched: Expose uk_thread_block_until

    This allows external API clients to specify an absolute deadline for
    waking up. This is potentially more precise because the `timeout` is
    relative to whenever uk_thread_block_timeout is actually taking the
    "current" time.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Razvan Deaconescu <razvand@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #758

commit 5223ae6691e0d8ee449ece64f6f9bde3aaeb7643
Author: Nour-eddine Taleb <contact@noureddine.xyz>
Date:   Sat Mar 25 19:56:47 2023 +0000

    lib/uksched: fix docs

    Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #809

commit c00afb4d422af1377374bfee5d4ea52cec0cbea0
Author: Nour-eddine Taleb <contact@noureddine.xyz>
Date:   Thu Mar 23 23:15:24 2023 +0000

    lib/posix-futex/test: port the test cases to the new sched apis

    due to the changes in scheduling apis, it was necessary to update
    posix-futex tests which still relays on the old apis.

    GitHub-Fixes: #630
    Signed-off-by: Nour-eddine Taleb <contact@noureddine.xyz>
    Reviewed-by: Adina Smeu <adina.smeu@gmail.com>
    Approved-by: Cezar Craciunoiu <cezar.craciunoiu@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #809

commit ce2e3dae5f8d876e38dcdcf0c3a83850cfb98dc8
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 11:22:18 2023 +0100

    plat/kvm/x86: Stop unwinding at _libkvmplat_entry2

    The _libkvmplat_entry2 function is called using assembler code that
    switches stacks. Therefore, a debugger can't unwind its frame. This
    inserts a CFI that marks the previous instruction pointer as undefined.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit 7f450a9834e4c31a938e8a59e72006ec9389cc18
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 15:15:52 2023 +0100

    plat/kvm/x86: Add unwinding information to interrupt/exception handlers

    This allows debuggers and profilers to unwind past interrupt/exception
    handlers.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit f87e378199fa87c07e77b36c5c979c9194fb1d93
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Wed Dec 21 11:01:34 2022 +0100

    plat/x86: Add unwind information to system call handler

    Without this information debugging tools do not know how to properly
    unwind the _ukplat_syscall frame. For example, this causes them to
    output garbage output for back traces.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit b88c21a231243845cbc155e1c7f0bcccd181a1c5
Author: Marco Schlumpp <marco@unikraft.io>
Date:   Mon Jan 2 11:40:13 2023 +0100

    arch/x86: Add helpers for CFI in assembler code

    This introduces helpers for maintaining frame information when using
    push and pop in assembler code.

    Checkpatch-Ignore: SPACING
    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Simon Kuenzer <simon@unikraft.io>
    Approved-by: Simon Kuenzer <simon@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #700

commit 6d07539298dae30eb07f078942563af2be60acd9
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue May 24 20:17:14 2022 +0200

    lib/nolibc: Define u_(long|int|short_char) for _DEFAULT_SOURCE files

    These typedefs are commonly used in BSD code. Most libc libraries define
    them by default or for _DEFAULT_SOURCE files. Because unikraft is
    usually closer to Linux, this adopts the later approach.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit a391affca8dce75d51f487d43babb3551c03b0d1
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue Mar 29 17:32:46 2022 +0200

    lib/nolibc: Implement fputs and puts functions

    These functions were still missing from nolibc.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 721b9a91e651c0c37dd6b5618dea3f3692713bf9
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue Mar 29 15:25:17 2022 +0200

    lib/nolibc: Implement syslog functions

    These functions forward the messages to the ukdebug library.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit eac4a8dc00c62398eb6eaf54b6eb5f9440bc2230
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue Mar 29 14:23:52 2022 +0200

    lib/nolibc: Implement strsep function

    This function is an improvement of strtok that originates from BSD.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit f941a5add83e4023baab26ed1f1c374371bd4e38
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Fri Mar 25 17:23:57 2022 +0100

    lib/nolibc: Implement random/srandom

    These functions provide a PRNG and are based on the musl libc library.

    Signed-off-by: Marco Schlumpp <marco@unikraft.io>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 2188d8dcd394cca547de25e82905c200e5971a22
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Fri Mar 25 16:40:15 2022 +0100

    lib/nolibc: Implement exit function

    The behaviour is similar to returning a value from main.

    Checkpatch-Ignore: EMBEDDED_FUNCTION_NAME
    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 2d2104d9d056a50e6bf2dc0bc07b28cd1dc45796
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Fri Mar 25 16:31:43 2022 +0100

    lib/nolibc: Export abort function

    This function was already declared in the public stdlib header, but the
    symbol name was missing in the exportsyms.uk file.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit fb70e9f5e09d62cb5eca12702620047ff8e4982c
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Fri Mar 25 16:07:17 2022 +0100

    lib/nolibc: Implement isblank function

    This function determines whether the given character is a space or tab.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 3f0bc0e8705132f966347d07b0315c8a21fce347
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Thu Mar 24 17:06:03 2022 +0100

    lib/nolibc: Add atol function

    This function is basically atoi with a large output range.

    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit 6887b143c9cf7f654503895651d920825a2e535f
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Thu Mar 24 17:02:24 2022 +0100

    lib/nolibc: strcasecmp function

    This function compares two strings case insensitively. The
    implementation was taken from the MUSL libc.

    Checkpatch-Ignore: TRAILING_STATEMENTS
    Signed-off-by: Marco Schlumpp <marco.schlumpp@gmail.com>
    Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
    Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
    Tested-by: Unikraft CI <monkey@unikraft.io>
    GitHub-Closes: #627

commit a3c8bdeaedcb428015e53cd4398a3d91624f1cf0
Author: Marco Schlumpp <marco.schlumpp@gmail.com>
Date:   Tue Mar 22 12:01:57 2022 +0100

    lib/nolibc: Introduce strcat/bcopy/bzero functions

    The bcopy/bzero originate from BSD, but are often provided by libc on
    other systems for compati…
StefanJum pushed a commit to unikraft-upb/unikraft that referenced this issue Jun 5, 2023
Ensure that we do not try to fetch a memory region descriptor by an
index that is larger than our current memory region descriptor count.

Furthermore, this guarantees that `ukplat_memregion_count` is always
called before `ukplat_memregion_get` is executed fully. This way we
will always have the memory region descriptors as well as their count
set up and available before we try to fetch one.

Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
GitHub-Fixes: unikraft#766
Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: unikraft#878
razvanvirtan pushed a commit to razvanvirtan/unikraft that referenced this issue Jun 6, 2023
Ensure that we do not try to fetch a memory region descriptor by an
index that is larger than our current memory region descriptor count.

Furthermore, this guarantees that `ukplat_memregion_count` is always
called before `ukplat_memregion_get` is executed fully. This way we
will always have the memory region descriptors as well as their count
set up and available before we try to fetch one.

Co-authored-by: Sergiu Moga <sergiu.moga@protonmail.com>
Signed-off-by: Sergiu Moga <sergiu.moga@protonmail.com>
Signed-off-by: Diego Alejandro Parra Guzman <diego-alejandro.parra-guzman@tttech.com>
GitHub-Fixes: unikraft#766
Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: unikraft#878
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Something isn't working
Projects
Status: Done
Status: Done!
3 participants