diff --git a/run.sh b/run.sh new file mode 100755 index 000000000..d1fc1b31b --- /dev/null +++ b/run.sh @@ -0,0 +1,73 @@ +#!/bin/bash + + +POSITIONAL_ARGS=() + +QEMU_OPTS="" + +while [[ $# -gt 0 ]]; do + case $1 in + -c) + CLEAN=true + shift + ;; + -r) + MODE="relwithdebinfo" + shift # past argument + ;; + -d) + MODE="debug" + shift + ;; + -gw) + # wait for gdb + QEMU_OPTS="$QEMU_OPTS -S" + shift + ;; + -s) + if [ $TERM_USED ]; then + echo "Conflicting options!"; # (todo: there must be a way to use both...) + exit 1 + fi + TERM_USED=true + # serial + QEMU_OPTS="$QEMU_OPTS -serial stdio" + shift + ;; + -int) + if [ $TERM_USED ]; then + echo "Conflicting options!"; # (todo: there must be a way to use both...) + exit 1 + fi + TERM_USED=true + # serial + QEMU_OPTS="$QEMU_OPTS -d int" + shift + ;; + -*|--*) + echo "Unknown option $1" + exit 1 + ;; + *) + POSITIONAL_ARGS+=("$1") # save positional arg + shift # past argument + ;; + esac +done + +set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters + +set -exo pipefail + +if [[ $BASH_SOURCE = */* ]]; then + cd -- "${BASH_SOURCE%/*}/" || exit +fi + +if [ $CLEAN ]; then + cmake --build cmake-build-$MODE --target clean +fi + +cmake --build cmake-build-$MODE --target iso + +qemu-system-x86_64 -s $QEMU_OPTS -cdrom cmake-build-relwithdebinfo/src/iso/os2.iso + diff --git a/src/kernel/VMA.cpp b/src/kernel/VMA.cpp index b5a40b65c..ac2d31e8c 100644 --- a/src/kernel/VMA.cpp +++ b/src/kernel/VMA.cpp @@ -55,6 +55,7 @@ void *VMA::mmap_mem(void *v_addr, size_t length, int prot, int flags) { for (auto &n: regions) { if (n.data.available && n.data.length >= length) { found = n.data; + break; } } }