1. May 01, 2024
  2. Apr 26, 2024
  3. Apr 24, 2024
  4. Apr 18, 2024
  5. Mar 23, 2024
    • mylai-mtk's avatar
      Implement syscall readlinkat and readv (#318) · 9637e60b
      mylai-mtk authored
      * Implement syscall readlinkat
      
      * Implement syscall readv by read syscalls
      
      Since pk lacks kernel-space dynamic memory management, we implement readv with
      normal read syscalls rather than forwarding it to spike
      9637e60b
  6. Jan 29, 2024
  7. Nov 18, 2023
  8. May 17, 2023
  9. May 03, 2023
    • Mark Goncharov's avatar
      [GCC]: Fix fence.i bug (#296) · 54de960a
      Mark Goncharov authored
      There are many issues: 260, 285, 287 has to be solved
      
      This workaround helps to add neccessary zicsr and
      zifencei for cssr and fence.i accordingly.
      54de960a
  10. May 02, 2023
  11. Mar 28, 2023
  12. Jan 06, 2023
  13. Aug 06, 2022
  14. May 01, 2022
  15. Apr 21, 2022
  16. Apr 11, 2022
    • Andrew Waterman's avatar
      Handle unimplemented syscalls gracefully · ca69d69a
      Andrew Waterman authored
      We previously kernel-panicked because that made it more obvious when a
      syscall implementation was missing.  These days, it's more common that
      the C library will do something sensible in response to returning -ENOSYS.
      Favor that approach to avoid frustrating users.
      ca69d69a
  17. Apr 09, 2022
  18. Feb 18, 2022
  19. Feb 09, 2022
  20. Feb 08, 2022
  21. Jan 29, 2022
    • Andrew Waterman's avatar
      Merge branch 'compnerd-virtualize' · fb77b0c2
      Andrew Waterman authored
      fb77b0c2
    • Saleem Abdulrasool's avatar
      pk: thwart an attempt from the compiler to optimize · 1d6f1bd0
      Saleem Abdulrasool authored
      The memory manager maintains the first free page as the page after the
      `_end` synthetic emitted by the linker.  This value is stored in a
      translation unit local variable.  This value is only ever written to
      from `init_early_alloc` which is static and only ever invoked from
      `pk_vm_init`.  Furthermore, the value that `first_free_page` is ever set
      to is computed as a rounding of the _address_ of `_end`.  Because the
      address of the symbol cannot change during execution of a normal
      program, this is effectively a constant, making the computed value a
      "constant" which can be re-materialized.  Now, with the knowledge that
      the value is effectively a constant that can be re-materialized and the
      fact that the value is ever written to at a single position, we can
      simply re-materialize the value if it was ever changed in
      `free_page_addr`.  This will allow the 8-byte value to be truncated to
      1-byte.
      
      Now, we can inline `__early_pgalloc_align`, and because the combination
      of `__early_alloc` and `__early_pgalloc_align` is small, we can inline
      that again at the two sites locally.  This changes the
      `__augment_page_freelist` to re-materialize the constant when needed for
      the allocation.
      
      The re-materialization however uses a pc-relative addressing, which now
      computes a different value than expected - the address has become a VA
      rather than a PA.  This results in the address computed by
      `free_page_addr` (which is the result of the `__early_pgalloc_align`) to
      be a virtual address after the relocation, which then propagates through
      `__early_alloc` to the value in `__augment_page_freelist`, which is then
      consumed by `__page_alloc`, which will treat the now VA as a PA and
      perform an additional translation to a VA.
      
      Mark the value as `volatile` to indicate that the value must be read at
      all points to thwart the size optimization of the compiler resulting in
      a mis-compilation resulting in the eventual invalid memory access during
      the `memset` that follows the allocation.
      
      Thanks to @nzmichaelh for the help in tracking this down!
      1d6f1bd0
  22. Jan 10, 2022
    • Andrew Waterman's avatar
      fix file leak · 387e54a5
      Andrew Waterman authored
      Eliminate excess reference count when associating fd with file.
      
      Fixes #258
      387e54a5
  23. Nov 23, 2021
  24. Sep 21, 2021
  25. Sep 15, 2021
  26. Aug 28, 2021
    • Saleem Abdulrasool's avatar
      pk: correct the handling of SYS_getcwd (#250) · 2f3e6f53
      Saleem Abdulrasool authored
      `SYS_getcwd` is different from `getcwd` in that the return value is < 0
      on failure otherwise it is the length of the string.  The proxy kernel
      was treating 0 as success and all other values as error.  As a result,
      we would never return a valid value for `getcwd`.
      
      The following program now executes properly with the Proxy Kernel:
        ```c
        #include <stdio.h>
        #include <stdlib.h>
        #include <unistd.h>
      
        #include <linux/limits.h>
      
        int main(int argc, char **argv) {
          unsigned char buffer[PATH_MAX + 1] = {0};
          if (getcwd(buffer, PATH_MAX))
            printf("cwd: %s\n", buffer);
          return EXIT_SUCCESS;
        }
        ```
      2f3e6f53
  27. Aug 12, 2021
  28. Aug 05, 2021
  29. Jun 17, 2021