~ehmry/sigil

c3385aedd09c8144ed083659d7c246289a38e37d — Emery Hemingway 4 years ago 1f53f25
genodeSources: 20.05 -> 20.08
M compositions/pc-drivers.dhall => compositions/pc-drivers.dhall +4 -4
@@ 30,7 30,7 @@ let drivers =
        , ServiceRoute.child "Block" "dynamic"
        , ServiceRoute.child "Usb" "usb_drv"
        , ServiceRoute.child "Platform" "platform_drv"
        , ServiceRoute.child "Input" "input_filter"
        , ServiceRoute.child "Input" "event_filter"
        ]
      , children = toMap
          { rom_reporter =


@@ 169,10 169,10 @@ let drivers =
                , provides = [ "Input" ]
                , routes = [ ServiceRoute.child "Platform" "platform_drv" ]
                }
          , input_filter =
          , event_filter =
              Child.flat
                Child.Attributes::{
                , binary = "input_filter"
                , binary = "event_filter"
                , priority = 1
                , resources = Resources::{ ram = Genode.units.MiB 2 }
                , provides = [ "Input" ]


@@ 180,7 180,7 @@ let drivers =
                  [ ServiceRoute.parentLabel
                      "ROM"
                      (Some "config")
                      (Some "input_filter.config")
                      (Some "event_filter.config")
                  , ServiceRoute.childLabel
                      "Input"
                      "ps2_drv"

M flake.nix => flake.nix +1 -81
@@ 136,31 136,7 @@
      checks =
        # Checks for continous testing
        forAllCrossSystems ({ system, localSystem, crossSystem }:
          let
            nixos = nixpkgs.lib.nixosSystem {
              system = localSystem;
              modules = [
                self.nixosModules.genodeHost
                ({ modulesPath, ... }: {
                  imports = [ "${modulesPath}/virtualisation/qemu-vm.nix" ];
                  boot.loader.grub.extraEntriesBeforeNixOS = true;
                  virtualisation = {
                    cores = 2;
                    memorySize = 1024;
                    useBootLoader = true;
                    qemu = {
                      options =
                        [ "-machine q35" "-cpu phenom" "-serial mon:stdio" ];
                      networkingOptions = [
                        "-net nic,netdev=user.0,model=e1000"
                        "-netdev user,id=user.0\${QEMU_NET_OPTS:+,$QEMU_NET_OPTS}"
                      ];
                    };
                  };
                })
              ];
            };
          in import ./tests {
          import ./tests {
            inherit self;
            apps = self.apps.${system};
            localPackages = nixpkgsFor.${localSystem};


@@ 176,62 152,6 @@
                self.packages.${system}.genodeSources.ports);
            };

            nixosModule = nixos.config.system.build.vm;
            nixosXML = nixos.config.system.build.genode.xml;

            nixosGuest = let
              nixos = nixpkgs.lib.nixosSystem {
                system = localSystem;
                modules = [
                  self.nixosModules.genodeHost
                  ({ modulesPath, ... }: {
                    imports = [ "${modulesPath}/virtualisation/qemu-vm.nix" ];
                    boot.loader.grub.extraEntriesBeforeNixOS = true;
                    virtualisation = {
                      cores = 2;
                      memorySize = 1024;
                      useBootLoader = true;
                      qemu = {
                        options =
                          [ "-machine q35" "-cpu phenom" "-serial mon:stdio" ];
                        networkingOptions = [
                          "-net nic,netdev=user.0,model=e1000"
                          "-netdev user,id=user.0\${QEMU_NET_OPTS:+,$QEMU_NET_OPTS}"
                        ];
                      };
                    };
                    genode.guests = {
                      flakeCheck = {
                        config = { config, lib, pkgs, ... }: {
                          networking.firewall.allowedTCPPorts = [ 80 ];
                          services.mingetty.autologinUser =
                            lib.mkDefault "root";
                          services.nginx.enable = true;
                          services.openssh.permitRootLogin =
                            lib.mkDefault "yes";
                          services.sshd.enable = true;
                          users.users.root.password = "nixos";
                          virtualbox.memorySize = 128;
                        };
                      };
                      azimuth = {
                        bootFormat = "vdi";
                        config = { config, lib, pkgs, ... }: {
                          services.cage = {
                            enable = true;
                            program = "${pkgs.azimuth}/bin/tor-azimuth";
                          };
                          users.users.demo.isNormalUser = true;
                          virtualbox.memorySize = 1024;
                        };
                      };
                    };

                  })
                ];
              };
            in nixos.config.system.build.vm;

          });

    };

M nixos-modules/default.nix => nixos-modules/default.nix +5 -5
@@ 99,23 99,23 @@

      bootDescription = buildBootDescription {
        inherit initConfig;
        imageInputs = [ legacyPackages'.bash pkgs'.show_input ]
          ++ map pkgs'.genodeSources.depot ([
        imageInputs = [ legacyPackages'.bash ] ++ map pkgs'.genodeSources.depot
          ([
            "acpi_drv"
            "ahci_drv"
            "cached_fs_rom"
            "chroot"
            "decorator"
            "event_filter"
            "fs_log"
            "gui_fb"
            "init"
            "input_filter"
            "ipxe_nic_drv"
            "libc"
            "libiconv"
            "log_core"
            "nit_fb"
            "nitpicker"
            "nic_router"
            "nitpicker"
            "part_block"
            "platform_drv"
            "posix"

M nixos-modules/dhall/console.dhall => nixos-modules/dhall/console.dhall +17 -18
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Prelude = Genode.Prelude


@@ 13,8 12,8 @@ let Resources = Init.Resources

let ServiceRoute = Init.ServiceRoute

in    λ(params : { bash : Text, coreutils : Text, path : Text })
    → let init =
in  λ(params : { bash : Text, coreutils : Text, path : Text }) →
      let init =
            Init::{
            , verbose = True
            , routes =


@@ 22,12 21,12 @@ in    λ(params : { bash : Text, coreutils : Text, path : Text })
                  Text
                  Init.ServiceRoute.Type
                  Init.ServiceRoute.parent
                  [ "Nitpicker", "Rtc", "Timer" ]
                  [ "Gui", "Rtc", "Timer" ]
            , children = toMap
                { nit_fb =
                { gui_fb =
                    Child.flat
                      Child.Attributes::{
                      , binary = "nit_fb"
                      , binary = "gui_fb"
                      , config = Init.Config::{
                        , attributes = toMap
                            { xpos = "10"


@@ 71,8 70,8 @@ in    λ(params : { bash : Text, coreutils : Text, path : Text })
                        , ram = Genode.units.MiB 4
                        }
                      , routes =
                        [ ServiceRoute.child "Framebuffer" "nit_fb"
                        , ServiceRoute.child "Input" "nit_fb"
                        [ ServiceRoute.child "Framebuffer" "gui_fb"
                        , ServiceRoute.child "Input" "gui_fb"
                        , ServiceRoute.parent "File_system"
                        ]
                      }


@@ 141,8 140,8 @@ in    λ(params : { bash : Text, coreutils : Text, path : Text })
                            # Prelude.List.map
                                Text
                                XML.Type
                                (   λ(x : Text)
                                  → XML.leaf
                                ( λ(x : Text) →
                                    XML.leaf
                                      { name = "arg"
                                      , attributes = toMap { value = x }
                                      }


@@ 157,13 156,13 @@ in    λ(params : { bash : Text, coreutils : Text, path : Text })
                      , routes =
                        [ Init.ServiceRoute.child "File_system" "vfs"
                        , { service =
                              { name = "ROM"
                              , label =
                                  Init.LabelSelector.Type.Partial
                                    { prefix = Some "/nix/store/"
                                    , suffix = None Text
                                    }
                              }
                            { name = "ROM"
                            , label =
                                Init.LabelSelector.Type.Partial
                                  { prefix = Some "/nix/store/"
                                  , suffix = None Text
                                  }
                            }
                          , route =
                              Init.Route.Type.Child
                                { name = "store_rom"


@@ 181,7 180,7 @@ in    λ(params : { bash : Text, coreutils : Text, path : Text })
            Init.Attributes::{
            , routes =
              [ ServiceRoute.parent "File_system"
              , ServiceRoute.parent "Nitpicker"
              , ServiceRoute.parent "Gui"
              , ServiceRoute.parent "Rtc"
              , ServiceRoute.parent "Timer"
              ]

M nixos-modules/dhall/fs-log.dhall => nixos-modules/dhall/fs-log.dhall +0 -1
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Init = Genode.Init

M nixos-modules/dhall/graphical-log.dhall => nixos-modules/dhall/graphical-log.dhall +5 -6
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Prelude = Genode.Prelude


@@ 23,12 22,12 @@ in  Init::{
          Text
          Init.ServiceRoute.Type
          Init.ServiceRoute.parent
          [ "Nitpicker", "Rtc", "Timer" ]
          [ "Gui", "Rtc", "Timer" ]
    , children = toMap
        { nit_fb =
        { gui_fb =
            Child.flat
              Child.Attributes::{
              , binary = "nit_fb"
              , binary = "gui_fb"
              , config = Init.Config::{
                , attributes = toMap
                    { initial_width = "600", initial_height = "600" }


@@ 64,8 63,8 @@ in  Init::{
              , provides = [ "Terminal" ]
              , resources = Resources::{ caps = 256, ram = Genode.units.MiB 4 }
              , routes =
                [ ServiceRoute.child "Framebuffer" "nit_fb"
                , ServiceRoute.child "Input" "nit_fb"
                [ ServiceRoute.child "Framebuffer" "gui_fb"
                , ServiceRoute.child "Input" "gui_fb"
                , ServiceRoute.parent "File_system"
                ]
              }

M nixos-modules/dhall/qwerty.chargen.dhall => nixos-modules/dhall/qwerty.chargen.dhall +8 -8
@@ 20,18 20,18 @@ let Map =
let boolToAttr = λ(_ : Bool) → if _ then "yes" else "no"

let keyToXML =
        λ(x : Prelude.Map.Entry Text Key)
      → XML.leaf
      λ(x : Prelude.Map.Entry Text Key) →
        XML.leaf
          { name = "key"
          , attributes =
            [ merge
                { Ascii =
                      λ(_ : Natural)
                    → { mapKey = "ascii", mapValue = Prelude.Natural.show _ }
                    λ(_ : Natural) →
                      { mapKey = "ascii", mapValue = Prelude.Natural.show _ }
                , Char = λ(_ : Text) → { mapKey = "char", mapValue = _ }
                , Code =
                      λ(_ : Natural)
                    → { mapKey = "code", mapValue = Prelude.Natural.show _ }
                    λ(_ : Natural) →
                      { mapKey = "code", mapValue = Prelude.Natural.show _ }
                }
                x.mapValue
            , { mapKey = "name", mapValue = x.mapKey }


@@ 39,8 39,8 @@ let keyToXML =
          }

let mapToXML =
        λ(map : Map.Type)
      → XML.element
      λ(map : Map.Type) →
        XML.element
          { name = "map"
          , attributes = toMap
              { mod1 = boolToAttr map.mod1

M nixos-modules/dhall/root.dhall => nixos-modules/dhall/root.dhall +45 -47
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Prelude = Genode.Prelude


@@ 20,22 19,22 @@ let DefaultPolicy = Init.Config.DefaultPolicy
let LabelSelector = Init.LabelSelector

let label =
        λ(label : Text)
      → { local = label, route = label } : Child.Attributes.Label
      λ(label : Text) →
        { local = label, route = label } : Child.Attributes.Label

let rootInit =
        λ ( params
          : { fbDriver : Init.Child.Type
            , guests : Init.Children.Type
            , inputFilterChargens : List XML.Type
            , partitionType : Text
            , wm : Init.Type
            , graphical-log : Init.Type
            , fs-log : Init.Type
            , systemLabel : Text
            }
          )
      → Init::{
      λ ( params
        : { fbDriver : Init.Child.Type
          , guests : Init.Children.Type
          , inputFilterChargens : List XML.Type
          , partitionType : Text
          , wm : Init.Type
          , graphical-log : Init.Type
          , fs-log : Init.Type
          , systemLabel : Text
          }
        ) →
        Init::{
        , children = toMap
            { timer =
                Child.flat


@@ 113,8 112,8 @@ let rootInit =
                            # Prelude.List.map
                                PciPolicy/Type
                                XML.Type
                                (   λ(policy : PciPolicy/Type)
                                  → XML.element
                                ( λ(policy : PciPolicy/Type) →
                                    XML.element
                                      { name = "policy"
                                      , attributes = toMap
                                          { label_suffix = policy.labelSuffix }


@@ 141,24 140,22 @@ let rootInit =
                    }
                  }
            , framebuffer = params.fbDriver
            , input_filter =
            , event_filter =
                Child.flat
                  Child.Attributes::{
                  , binary = "input_filter"
                  , binary = "event_filter"
                  , config =
                      let key =
                              λ(name : Text)
                            → XML.leaf
                                { name = "key"
                                , attributes = toMap { name = name }
                                }
                            λ(name : Text) →
                              XML.leaf
                                { name = "key", attributes = toMap { name } }

                      let remap =
                              λ(name : Text)
                            → λ(to : Text)
                            → XML.leaf
                            λ(name : Text) →
                            λ(to : Text) →
                              XML.leaf
                                { name = "key"
                                , attributes = toMap { name = name, to = to }
                                , attributes = toMap { name, to }
                                }

                      in  Init.Config::{


@@ 243,7 240,7 @@ let rootInit =
                    [ ServiceRoute.parentLabel
                        "ROM"
                        (Some "config")
                        (Some "config -> input_filter.config")
                        (Some "config -> event_filter.config")
                    , ServiceRoute.childLabel
                        "Input"
                        "ps2_drv"


@@ 254,6 251,7 @@ let rootInit =
                        "usb_drv"
                        (Some "usb")
                        (None Text)
                    , ServiceRoute.child "Capture" "nitpicker"
                    ]
                  }
            , ps2_drv =


@@ 303,11 301,11 @@ let rootInit =
                Init.toChild
                  params.wm
                  Init.Attributes::{
                  , provides = [ "Nitpicker", "Report", "ROM" ]
                  , provides = [ "Capture", "Event", "Gui", "Report", "ROM" ]
                  , romReports = [ label "clipboard", label "shape" ]
                  , routes =
                    [ ServiceRoute.child "Framebuffer" "framebuffer"
                    , ServiceRoute.child "Input" "input_filter"
                    , ServiceRoute.child "Input" "event_filter"
                    ]
                  }
            , fonts_fs =


@@ 408,7 406,7 @@ let rootInit =
                  params.graphical-log
                  Init.Attributes::{
                  , routes =
                    [ ServiceRoute.child "Nitpicker" "wm"
                    [ ServiceRoute.child "Gui" "wm"
                    , ServiceRoute.child "File_system" "fonts_fs"
                    ]
                  }


@@ 474,8 472,8 @@ let rootInit =
                          Prelude.List.map
                            Natural
                            XML.Type
                            (   λ(i : Natural)
                              → XML.leaf
                            ( λ(i : Natural) →
                                XML.leaf
                                  { name = "policy"
                                  , attributes =
                                      let partition =


@@ 483,7 481,7 @@ let rootInit =

                                      in  toMap
                                            { label_suffix = " ${partition}"
                                            , partition = partition
                                            , partition
                                            , writeable = "yes"
                                            }
                                  }


@@ 663,8 661,8 @@ let rootInit =
                              # Prelude.List.map
                                  Text
                                  XML.Type
                                  (   λ(proto : Text)
                                    → XML.element
                                  ( λ(proto : Text) →
                                      XML.element
                                        { name = proto
                                        , attributes = toMap
                                            { dst = "0.0.0.0/0"


@@ 696,11 694,11 @@ let rootInit =
                  Init.Attributes::{
                  , routes =
                    [ ServiceRoute.parent "VM"
                    , ServiceRoute.child "Nitpicker" "wm"
                    , ServiceRoute.child "Gui" "wm"
                    , { service =
                          { name = "File_system"
                          , label = LabelSelector.last "fonts"
                          }
                        { name = "File_system"
                        , label = LabelSelector.last "fonts"
                        }
                      , route =
                          Init.Route.Type.Child
                            { name = "fonts_fs"


@@ 709,9 707,9 @@ let rootInit =
                            }
                      }
                    , { service =
                          { name = "File_system"
                          , label = LabelSelector.suffix "nix/store"
                          }
                        { name = "File_system"
                        , label = LabelSelector.suffix "nix/store"
                        }
                      , route =
                          Init.Route.Type.Child
                            { name = "file_system"


@@ 720,9 718,9 @@ let rootInit =
                            }
                      }
                    , { service =
                          { name = "File_system"
                          , label = LabelSelector.prefix "console"
                          }
                        { name = "File_system"
                        , label = LabelSelector.prefix "console"
                        }
                      , route =
                          Init.Route.Type.Child
                            { name = "file_system"

M nixos-modules/dhall/show_input.dhall => nixos-modules/dhall/show_input.dhall +1 -2
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Prelude = Genode.Prelude


@@ 38,5 37,5 @@ in  Child.flat
        }
      , resources = Resources::{ ram = Genode.units.MiB 32 }
      , routes =
        [ ServiceRoute.parent "File_system", ServiceRoute.parent "Nitpicker" ]
        [ ServiceRoute.parent "File_system", ServiceRoute.parent "Gui" ]
      }

M nixos-modules/dhall/vbox-guest.dhall => nixos-modules/dhall/vbox-guest.dhall +10 -13
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Prelude = Genode.Prelude


@@ 14,11 13,11 @@ let Resources = Init.Resources
let ServiceRoute = Init.ServiceRoute

let Vfs/inline =
        λ(name : Text)
      → λ(body : Text)
      → XML.element
      λ(name : Text) →
      λ(body : Text) →
        XML.element
          { name = "inline"
          , attributes = toMap { name = name }
          , attributes = toMap { name }
          , content = [ XML.text body ]
          }



@@ 35,8 34,8 @@ let Params
      }

let toVbox =
        λ(params : Params)
      → let vboxConfig =
      λ(params : Params) →
        let vboxConfig =
              let hardDisks =
                    merge
                      { ISO = XML.text ""


@@ 158,11 157,9 @@ let toVbox =
                      , attributes = XML.emptyAttributes
                      , content =
                          let tag =
                                  λ(name : Text)
                                → XML.leaf
                                    { name = name
                                    , attributes = XML.emptyAttributes
                                    }
                                λ(name : Text) →
                                  XML.leaf
                                    { name, attributes = XML.emptyAttributes }

                          let mutableVfs =
                                let fsNode =


@@ 224,7 221,7 @@ let toVbox =
              , routes =
                [ ServiceRoute.parent "File_system"
                , ServiceRoute.parent "Nic"
                , ServiceRoute.parent "Nitpicker"
                , ServiceRoute.parent "Gui"
                , ServiceRoute.parent "Rtc"
                , ServiceRoute.parent "Timer"
                , ServiceRoute.parent "VM"

M nixos-modules/dhall/wm.dhall => nixos-modules/dhall/wm.dhall +14 -13
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Prelude = Genode.Prelude


@@ 20,8 19,8 @@ let DefaultPolicy = Init.Config.DefaultPolicy
let LabelSelector = Init.LabelSelector

let label =
        λ(label : Text)
      → { local = label, route = label } : Child.Attributes.Label
      λ(label : Text) →
        { local = label, route = label } : Child.Attributes.Label

in  Init::{
    , children = toMap


@@ 64,7 63,7 @@ in  Init::{
                  , attributes = toMap { domain = "default" }
                  }
                }
              , provides = [ "Nitpicker" ]
              , provides = [ "Gui", "Capture", "Event" ]
              , resources = Resources::{ caps = 256, ram = Genode.units.MiB 64 }
              , routes =
                [ ServiceRoute.parent "Framebuffer"


@@ 75,7 74,7 @@ in  Init::{
            Child.flat
              Child.Attributes::{
              , binary = "pointer"
              , routes = [ ServiceRoute.child "Nitpicker" "nitpicker" ]
              , routes = [ ServiceRoute.child "Gui" "nitpicker" ]
              }
        , wm =
            Child.flat


@@ 94,7 93,7 @@ in  Init::{
                  ]
                , defaultPolicy = Some DefaultPolicy::{=}
                }
              , provides = [ "Nitpicker", "Report", "ROM" ]
              , provides = [ "Gui", "Report", "ROM" ]
              , reportRoms = [ label "focus", label "resize_request" ]
              , romReports =
                [ label "focus_request"


@@ 108,11 107,11 @@ in  Init::{
                }
              , routes =
                [ ServiceRoute.childLabel
                    "Nitpicker"
                    "Gui"
                    "nitpicker"
                    (Some "")
                    (Some "focus")
                , ServiceRoute.child "Nitpicker" "nitpicker"
                , ServiceRoute.child "Gui" "nitpicker"
                , ServiceRoute.parentLabel
                    "Report"
                    (Some "clipboard")


@@ 175,7 174,7 @@ in  Init::{
                      ''
                  ]
                }
              , provides = [ "Nitpicker", "Report", "ROM" ]
              , provides = [ "Gui", "Report", "ROM" ]
              , romReports =
                [ label "focus"
                , label "resize_request"


@@ 194,7 193,7 @@ in  Init::{
                , caps = 256
                , ram = Genode.units.MiB 8
                }
              , routes = [ ServiceRoute.child "Nitpicker" "wm" ]
              , routes = [ ServiceRoute.child "Gui" "wm" ]
              }
        , decorator =
            Child.flat


@@ 217,20 216,22 @@ in  Init::{
                  ]
                , defaultPolicy = Some DefaultPolicy::{=}
                }
              , provides = [ "Nitpicker", "Report", "ROM" ]
              , provides = [ "Gui", "Report", "ROM" ]
              , reportRoms = [ label "window_layout", label "pointer" ]
              , romReports = [ label "decorator_margins", label "hover" ]
              , resources = Init.Resources::{
                , caps = 128
                , ram = Genode.units.MiB 12
                }
              , routes = [ ServiceRoute.child "Nitpicker" "wm" ]
              , routes = [ ServiceRoute.child "Gui" "wm" ]
              }
        }
    , routes = [ ServiceRoute.parent "Timer" ]
    , services =
      [ ServiceRoute.child "Nitpicker" "wm"
      [ ServiceRoute.child "Gui" "wm"
      , ServiceRoute.child "Report" "wm"
      , ServiceRoute.child "ROM" "wm"
      , ServiceRoute.child "Event" "Nitpicker"
      , ServiceRoute.child "Capture" "Nitpicker"
      ]
    }

M nixos-modules/dhall/workman.chargen.dhall => nixos-modules/dhall/workman.chargen.dhall +8 -8
@@ 20,18 20,18 @@ let Map =
let boolToAttr = λ(_ : Bool) → if _ then "yes" else "no"

let keyToXML =
        λ(x : Prelude.Map.Entry Text Key)
      → XML.leaf
      λ(x : Prelude.Map.Entry Text Key) →
        XML.leaf
          { name = "key"
          , attributes =
            [ merge
                { Ascii =
                      λ(_ : Natural)
                    → { mapKey = "ascii", mapValue = Prelude.Natural.show _ }
                    λ(_ : Natural) →
                      { mapKey = "ascii", mapValue = Prelude.Natural.show _ }
                , Char = λ(_ : Text) → { mapKey = "char", mapValue = _ }
                , Code =
                      λ(_ : Natural)
                    → { mapKey = "code", mapValue = Prelude.Natural.show _ }
                    λ(_ : Natural) →
                      { mapKey = "code", mapValue = Prelude.Natural.show _ }
                }
                x.mapValue
            , { mapKey = "name", mapValue = x.mapKey }


@@ 39,8 39,8 @@ let keyToXML =
          }

let mapToXML =
        λ(map : Map.Type)
      → XML.element
      λ(map : Map.Type) →
        XML.element
          { name = "map"
          , attributes = toMap
              { mod1 = boolToAttr map.mod1

M packages/genodelabs/LIB.patch => packages/genodelabs/LIB.patch +24 -11
@@ 1,6 1,6 @@
commit 2db637f21b83701d21aa66295cd35c737649ecdc
commit b7d219220e10699dedb2c90e2d4010cbfab74a86
Author: Emery Hemingway <ehmry@posteo.net>
Date:   Tue May 5 21:39:21 2020 +0530
Date:   Sun Aug 30 10:47:51 2020 +0200

    Produce libraries with conventional names



@@ 33,10 33,10 @@ index 190dd92aa1..6611d05d2a 100644
 	  echo "endif") >> $(LIB_DEP_FILE)
 #
diff --git a/repos/base/mk/generic.mk b/repos/base/mk/generic.mk
index d551ac205b..e23fade62f 100644
index 0531c08d58..4eefc6822c 100644
--- a/repos/base/mk/generic.mk
+++ b/repos/base/mk/generic.mk
@@ -129,7 +129,7 @@ binary_%.o: %
@@ -139,7 +139,7 @@ binary_%.o: %
 # This is a problem in situations where the undefined symbol is resolved by an
 # archive rather than the target. I.e., when linking posix.lib.a (which
 # provides 'Libc::Component::construct'), the 'construct' function is merely


@@ 45,7 45,7 @@ index d551ac205b..e23fade62f 100644
 # reference apparently does not suffice to keep the posix.lib.a's symbol. By
 # adding a hard dependency, we force the linker to resolve the symbol and don't
 # drop posix.lib.a.
@@ -164,12 +164,17 @@ endif
@@ -174,12 +174,17 @@ endif
 # time a user of the library is linked, the ABI stub should be used instead of
 # the library.
 #


@@ 67,10 67,23 @@ index d551ac205b..e23fade62f 100644
-	$(VERBOSE)ln -sf $(call select_so,$@) $@
+	$(VERBOSE)ln -sf $(call select_so,$@) $(patsubst liblib%,lib%,$@)
diff --git a/repos/base/mk/lib.mk b/repos/base/mk/lib.mk
index bfee2c7420..fac49c7298 100644
index c8ac049563..776aea82aa 100644
--- a/repos/base/mk/lib.mk
+++ b/repos/base/mk/lib.mk
@@ -123,14 +123,20 @@ message:
@@ -95,7 +95,12 @@ endif
 #
 ifneq ($(SYMBOLS),)
 ABI_SO := $(addsuffix .abi.so,$(LIB))
+ifeq ($(LIB),ld)
 ABI_SONAME := $(addsuffix .lib.so,$(LIB))
+else
+ABI_SONAME := $(addsuffix .so,$(addprefix lib,$(patsubst lib%,%,$(LIB))))
+endif
+
 
 $(LIB).symbols:
 	$(VERBOSE)ln -sf $(SYMBOLS) $@
@@ -124,14 +129,20 @@ message:
 include $(BASE_DIR)/mk/generic.mk
 
 #


@@ 93,7 106,7 @@ index bfee2c7420..fac49c7298 100644
   INSTALL_SO := $(INSTALL_DIR)/$(LIB_SO)
   DEBUG_SO   := $(DEBUG_DIR)/$(LIB_SO)
  endif
@@ -150,7 +156,7 @@ ifneq ($(LIB_SO),)
@@ -151,7 +162,7 @@ ifneq ($(LIB_SO),)
 endif
 
 #


@@ 102,7 115,7 @@ index bfee2c7420..fac49c7298 100644
 #
 LIB_TAG := $(addsuffix .lib.tag,$(LIB))
 all: $(LIB_TAG)
@@ -203,7 +209,7 @@ STATIC_LIBS       := $(sort $(foreach l,$(ARCHIVES:.lib.a=),$(LIB_CACHE_DIR)/$l/
@@ -204,7 +215,7 @@ STATIC_LIBS       := $(sort $(foreach l,$(ARCHIVES:.lib.a=),$(LIB_CACHE_DIR)/$l/
 STATIC_LIBS_BRIEF := $(subst $(LIB_CACHE_DIR),$$libs,$(STATIC_LIBS))
 
 #


@@ 162,10 175,10 @@ index 73fd407db7..554d943763 100644
 
 
diff --git a/repos/libports/src/lib/libc/kernel.cc b/repos/libports/src/lib/libc/kernel.cc
index 5dd4b2a2d6..430295e7d5 100644
index b1bca7c80f..a4bebaeae1 100644
--- a/repos/libports/src/lib/libc/kernel.cc
+++ b/repos/libports/src/lib/libc/kernel.cc
@@ -308,10 +308,10 @@ void Libc::Kernel::_clone_state_from_parent()
@@ -418,10 +418,10 @@ void Libc::Kernel::_clone_state_from_parent()
 			 * regular startup of the child.
 			 */
 			bool const blacklisted = (name == "ld.lib.so")

M packages/genodelabs/default.nix => packages/genodelabs/default.nix +2 -2
@@ 1,7 1,7 @@
{ buildPackages, targetPackages }:

let
  version = "20.05";
  version = "20.08";
  # Update ./port-versions.nix bumping the version and updateing the sources.

  platform = targetPackages.targetPlatform;


@@ 32,7 32,7 @@ let
      inherit version;
      src = fetchurl {
        url = "https://github.com/genodelabs/genode/archive/${version}.tar.gz";
        hash = "sha256-5Fd8ywGbDtQF+9yDZ5xAQ7l1Vzh1jQAQeqVj+EtO1us=";
        hash = "sha256-tFuLVuaN5F9lAEtn0lpd0MgPQpOcFixOtOsQ/z4TwPI=";
      };
      nativeBuildInputs = [ expect gnumake tcl ];
      patches = [ ./LIB.patch ./binary-labels.patch ];

R packages/genodelabs/input_filter.patch => packages/genodelabs/event_filter.patch +4 -4
@@ 6,11 6,11 @@ Date:   Wed Apr 29 03:34:15 2020 +0530

diff --git a/repos/os/src/server/input_filter/chargen_source.h b/repos/os/src/server/input_filter/chargen_source.h
index 06fc657c25..3525fd6f34 100644
--- a/repos/os/src/server/input_filter/chargen_source.h
+++ b/repos/os/src/server/input_filter/chargen_source.h
--- a/repos/os/src/server/event_filter/chargen_source.h
+++ b/repos/os/src/server/event_filter/chargen_source.h
@@ -684,9 +684,10 @@ class Input_filter::Chargen_source : public Source, Source::Sink
 			node.for_each_sub_node("key", [&] (Xml_node key_node) {
 

 				Key_name const name = key_node.attribute_value("name", Key_name());
-				Input::Keycode const key = key_code_by_name(name);
-


@@ 20,5 20,5 @@ index 06fc657c25..3525fd6f34 100644
+					new (_alloc) Modifier(_modifiers, id, key);
+				} catch (Unknown_key) { warning("unrecognized key name ", name); }
 			});
 

 			node.for_each_sub_node("rom", [&] (Xml_node rom_node) {

M packages/genodelabs/libc.patch => packages/genodelabs/libc.patch +0 -27
@@ 85,30 85,3 @@ index 150640ddf3..e511897600 100644
 DUMMY(int   , -1, getpriority, (int, int))
 DUMMY(int   , -1, getrusage, (int, rusage *))
 DUMMY_SILENT(uid_t ,  0, getuid, (void))
commit c3d87d0a79f9e30aebdf26d3b684c6b1b2214c51
Author: Emery Hemingway <ehmry@posteo.net>
Date:   Wed Jun 10 20:15:44 2020 +0530

    libc: add newlocale and freelocale dummies
    
    Fix #3777

diff --git a/repos/libports/src/lib/libc/nolocale.cc b/repos/libports/src/lib/libc/nolocale.cc
index 9d43c35acb..ec37b81336 100644
--- a/repos/libports/src/lib/libc/nolocale.cc
+++ b/repos/libports/src/lib/libc/nolocale.cc
@@ -64,4 +64,14 @@ char *setlocale(int, const char *)
 	return (char*)"C";
 }
 
+
+locale_t newlocale(int, const char *locale, locale_t)
+{
+	Genode::warning("cannot set \"", locale, "\" locale, not implemented");
+	return NULL;
+}
+
+
+void freelocale(locale_t) { }
+
 }

M packages/genodelabs/port-versions.nix => packages/genodelabs/port-versions.nix +9 -13
@@ 1,8 1,7 @@
# The file is generated by the "genodeSources" derivation.
{
  acpica = "5c1c54";
  ada-runtime = "db8987";
  arora = "e8f003";
  ada-runtime = "fabce1";
  bash = "02edac";
  bbl = "b9358c";
  binutils = "62d309";


@@ 14,7 13,6 @@
  dde_ipxe = "b68f4e";
  dde_linux = "173719";
  dde_rump = "9afe56";
  dde_zircon = "49e3d9";
  diffutils = "ee502a";
  drm = "01858a";
  e2fsprogs = "2a09cd";


@@ 31,23 29,22 @@
  gcc = "20345a";
  gcov = "a6f852";
  gdb = "8eddf0";
  getdns = "030233";
  gmp = "855680";
  gnupg = "c784d4";
  grep = "b96a88";
  grub2 = "8cf62c";
  grub2 = "856f99";
  icu = "62f13b";
  jbig2dec = "682269";
  jitterentropy = "6017e1";
  jpeg = "5effdd";
  less = "e7a42c";
  libarchive = "7ce310";
  libc = "2e544d";
  libc = "771dcc";
  libdrm = "c1cce0";
  libgcrypt = "37159a";
  libiconv = "3f5ca3";
  libpng = "ac05f3";
  libsparkcrypto = "d479dc";
  libsparkcrypto = "924de3";
  libssh = "a475cc";
  libusb = "633358";
  libyaml = "1cde80";


@@ 74,23 71,22 @@
  pistachio = "68c8c3";
  qemu-usb = "2ff18f";
  qoost = "014d68";
  qt5 = "084385";
  qt5-host = "ad5edc";
  qt5 = "1b1c56";
  qt5-host = "21e078";
  readline = "a0bfb0";
  sanitizer = "181889";
  sanitizer = "3ac05b";
  sed = "459979";
  sel4 = "793548";
  sel4_tools = "4ee1b9";
  seoul = "e8d696";
  solo5 = "55dd4f";
  stb = "ab8f50";
  stdcxx = "79ad88";
  stdcxx = "722e94";
  tar = "19aea4";
  tcl = "842b1a";
  ttf-bitstream-vera = "cd3684";
  uboot = "f3fd6b";
  vim = "53caaa";
  virtualbox5 = "e93407";
  virtualbox5 = "e60d97";
  which = "91c953";
  x86emu = "8a1c3a";
  xz = "45203f";

M packages/genodelabs/ports.nix => packages/genodelabs/ports.nix +4 -4
@@ 4,7 4,7 @@
{ buildPackages }:
with buildPackages; {
  binutils = {
    hash = "sha256-gTYP9YNx+x6KVfIMjTD+UAReWwUg93TCkJIWwAau9eA=";
    hash = "sha256-Y6EwEb2uFNzJ/6Q+7Jia7LZu5iRt1XkzkogUxiC93t8=";
    nativeBuildInputs = [ autoconf ];
  };
  dde_bsd.hash = "sha256-Z2piyoOrNmXyEEp+kX5w/q4JTylYdSOocUrFeqjz13A=";


@@ 26,7 26,7 @@ with buildPackages; {
  jitterentropy.hash = "sha256-6KS732GxtUMz0xPYKtshdn039DgdJq11vTDQesZn4Ds=";
  jpeg.hash = "sha256-RLVnlrnYGrhqr3Feikoi/BNditCaKN0u3t9/UDpl2wQ=";
  libc = {
    hash = "sha256-ONmUhqY7rVtH6Z+K7VCY0OMLNi1SF1XCHFjiVY3MW3c=";
    hash = "sha256-bD0Kqho7ABMHxFYOAkQlvJgzSIsomy5OTtpKE+JAVUY=";
    nativeBuildInputs = [ buildPackages.gcc ];
  };
  libiconv.hash = "sha256-25YcW5zo1fE33ZolGQroR+KZO8wHEdN1QXa7+MhwS78=";


@@ 44,9 44,9 @@ with buildPackages; {
  openssl.hash = "sha256-epRL3SobYQ7xf8qwp6D5xu/Ms2T/LhUjjs273ywWRWg=";
  qemu-usb.hash = "sha256-F4ZXeH5sx3FOcD42zFOxKFMsqGookKdav1NJ7YgVw98=";
  stb.hash = "sha256-9LSH1i8jcEvjRAmTvgtK+Axy9hO7uiSzmSgBvs0zkTc=";
  stdcxx.hash = "sha256-iiE009fL1yE3XJ7HkaJakOiS++m7qONwwGrdJjBXQ7k=";
  stdcxx.hash = "sha256-4Gn/TyA/q83kyO8f5Wr+gv8fNYR5YPDNZIk7+Ty5fn4=";
  virtualbox5 = {
    hash = "sha256-HLga/0pHQkjdMH7mU194B7pTFJoOoww69Yii4Ixmkxo=";
    hash = "sha256-ERI+j2thvyMj+TJSHDdA9sOQdIxrXfNfMNJIa8VRE0M=";
    nativeBuildInputs = [ iasl libxslt unzip yasm ];
  };
  x86emu.hash = "sha256-QY6OL+cDVjQ67JItP1rS4ufPRGZf43AZtWxwza/0q0w=";

M packages/genodelabs/targets.nix => packages/genodelabs/targets.nix +1 -4
@@ 11,13 11,10 @@ let

  vbox5' = {
    nativeBuildInputs = with buildPackages; [ iasl yasm ];
    patches = [ ./vbox-framebuffer-fail-on-fail.patch ];
    portInputs = [ libc libiconv qemu-usb stdcxx virtualbox5 ];
  };
in {

  cached_fs_rom.patches = [ ./cached_fs_rom.patch ];

  fb_sdl = with buildPackages; {
    nativeBuildInputs = [ pkgconfig ];
    buildInputs = [ SDL ];


@@ 28,7 25,7 @@ in {

  init.patches = [ ./sandbox.patch ];

  input_filter.patches = [ ./input_filter.patch ];
  event_filter.patches = [ ./event_filter.patch ];

  intel_fb_drv = {
    BOARD = "pc";

D packages/genodelabs/vbox-framebuffer-fail-on-fail.patch => packages/genodelabs/vbox-framebuffer-fail-on-fail.patch +0 -126
@@ 1,126 0,0 @@
commit d2a28a33f6a2bda7000ce201d52ff99714895640
Author: Emery Hemingway <ehmry@posteo.net>
Date:   Fri May 15 11:28:10 2020 +0530

    vbox: use Nitpicker mode for initial resolution

diff --git a/repos/ports/src/virtualbox5/frontend/fb.h b/repos/ports/src/virtualbox5/frontend/fb.h
index 95a7db8602..bf2d65d7c1 100644
--- a/repos/ports/src/virtualbox5/frontend/fb.h
+++ b/repos/ports/src/virtualbox5/frontend/fb.h
@@ -40,7 +40,7 @@ class Genodefb :
 		Nitpicker::Connection &_nitpicker;
 		Fb_Genode::Session    &_fb { *_nitpicker.framebuffer() };
 		View_handle            _view;
-		Fb_Genode::Mode        _fb_mode { 1024, 768, Fb_Genode::Mode::RGB565 };
+		Fb_Genode::Mode        _fb_mode { _nitpicker.mode() };
 
 		/*
 		 * The mode currently used by the VM. Can be smaller than the

commit b6bf91067a4c1c6d5b3508aedd949c8e1a7fe4b3
Author: Emery Hemingway <ehmry@posteo.net>
Date:   Fri May 15 11:20:47 2020 +0530

    vbox: fail on invalid framebuffer dataspace
    
    VirtualBox can hang during initialization if Nitpicker returns an
    invalid dataspace due to insufficient server-side resources. Make
    an invalid dataspace a critical rather than silent error.

diff --git a/repos/ports/src/virtualbox5/frontend/fb.h b/repos/ports/src/virtualbox5/frontend/fb.h
index dce00fe4eb..95a7db8602 100644
--- a/repos/ports/src/virtualbox5/frontend/fb.h
+++ b/repos/ports/src/virtualbox5/frontend/fb.h
@@ -21,6 +21,9 @@
 #include <os/texture_rgb888.h>
 #include <os/dither_painter.h>
 
+#include <base/attached_dataspace.h>
+#include <util/reconstructible.h>
+
 /* VirtualBox includes */
 
 #include "Global.h"
@@ -35,7 +38,7 @@ class Genodefb :
 
 		Genode::Env           &_env;
 		Nitpicker::Connection &_nitpicker;
-		Fb_Genode::Session    &_fb;
+		Fb_Genode::Session    &_fb { *_nitpicker.framebuffer() };
 		View_handle            _view;
 		Fb_Genode::Mode        _fb_mode { 1024, 768, Fb_Genode::Mode::RGB565 };
 
@@ -43,18 +46,18 @@ class Genodefb :
 		 * The mode currently used by the VM. Can be smaller than the
 		 * framebuffer mode.
 		 */
-		Fb_Genode::Mode        _virtual_fb_mode;
+		Fb_Genode::Mode        _virtual_fb_mode { _initial_setup() };
+
+		Genode::Reconstructible<Genode::Attached_dataspace>
+		                       _fb_dataspace { _env.rm(), _fb.dataspace() };
 
-		void                  *_fb_base;
 		RTCRITSECT             _fb_lock;
 
 		void _clear_screen()
 		{
-			if (!_fb_base) return;
-
 			size_t const max_h = Genode::min(_fb_mode.height(), _virtual_fb_mode.height());
 			size_t const num_pixels = _fb_mode.width() * max_h;
-			memset(_fb_base, 0, num_pixels * _fb_mode.bytes_per_pixel());
+			memset(_fb_dataspace->local_addr<char>(), 0, num_pixels * _fb_mode.bytes_per_pixel());
 			_fb.refresh(0, 0, _virtual_fb_mode.width(), _virtual_fb_mode.height());
 		}
 
@@ -91,10 +94,7 @@ class Genodefb :
 		Genodefb (Genode::Env &env, Nitpicker::Connection &nitpicker)
 		:
 			_env(env),
-			_nitpicker(nitpicker),
-			_fb(*nitpicker.framebuffer()),
-			_virtual_fb_mode(_initial_setup()),
-			_fb_base(env.rm().attach(_fb.dataspace()))
+			_nitpicker(nitpicker)
 		{
 			int rc = RTCritSectInit(&_fb_lock);
 			Assert(rc == VINF_SUCCESS);
@@ -109,16 +109,11 @@ class Genodefb :
 
 			_fb_mode = mode;
 
-			if (_fb_base)
-				_env.rm().detach(_fb_base);
+			_fb_dataspace.destruct();
 
 			_adjust_buffer();
 
-			try {
-				_fb_base = _env.rm().attach(_fb.dataspace());
-			} catch (...) {
-				_fb_base = nullptr;
-			}
+			_fb_dataspace.construct(_env.rm(), _fb.dataspace());
 
 			Unlock();
 		}
@@ -201,8 +196,6 @@ class Genodefb :
 		                               PRUint32 imageSize,
 		                               PRUint8 *image) override
 		{
-			if (!_fb_base) return S_OK;
-
 			Lock();
 
 			Nitpicker::Area const area_fb = Nitpicker::Area(_fb_mode.width(),
@@ -215,7 +208,7 @@ class Genodefb :
 			typedef Pixel_rgb565 Pixel_dst;
 
 			Texture<Pixel_src> texture((Pixel_src *)image, nullptr, area_vm);
-			Surface<Pixel_dst> surface((Pixel_dst *)_fb_base, area_fb);
+			Surface<Pixel_dst> surface(_fb_dataspace->local_addr<Pixel_dst>(), area_fb);
 
 			Dither_painter::paint(surface, texture, Surface_base::Point(o_x, o_y));
 

D tests/driver_manager.dhall => tests/driver_manager.dhall +0 -153
@@ 1,153 0,0 @@

let Test = ./test.dhall ? env:DHALL_GENODE_TEST

let drivers = env:drivers ? ../compositions/pc-drivers.dhall

let Genode = Test.Genode

let Init = Genode.Init

let Child = Init.Child

let Resources = Init.Resources

let ServiceRoute = Init.ServiceRoute

let parentRomRoute =
        λ(from : Text)
      → λ(to : Text)
      → ServiceRoute.parentLabel "ROM" (Some from) (Some to)

let childRomRoute =
        λ(child : Text)
      → λ(from : Text)
      → ServiceRoute.childLabel "ROM" child (Some from) (None Text)

let label = λ(_ : Text) → { local = _, route = _ }

let init =
      Init::{
      , verbose = True
      , routes = [ ServiceRoute.parent "Timer" ]
      , children = toMap
          { drivers =
              Init.toChild
                drivers
                Init.Attributes::{
                , provides = [ "Block", "Framebuffer", "Input" ]
                , resources = Init.Resources::{ ram = Genode.units.MiB 4 }
                , romReports = [ label "block_devices" ]
                , routes =
                  [ parentRomRoute "managed/input_filter" "input_filter.config"
                  , parentRomRoute " numlock_remap" "numlock_remap.config"
                  , childRomRoute "dynamic_rom" "capslock"
                  , childRomRoute "dynamic_rom" "numlock"
                  , childRomRoute "dynamic_rom" "system"
                  , ServiceRoute.child "Report" "_report_rom"
                  , ServiceRoute.parent "IRQ"
                  , ServiceRoute.parent "IO_MEM"
                  , ServiceRoute.parent "IO_PORT"
                  , ServiceRoute.parent "Timer"
                  ]
                }
          , dynamic_rom =
              Child.flat
                Child.Attributes::{
                , binary = "dynamic_rom"
                , resources = Resources::{ ram = Genode.units.MiB 4 }
                , provides = [ "ROM" ]
                , config = Genode.Init.Config::{
                  , content =
                    [ Genode.Prelude.XML.text
                        ''
                        <rom name="system">
                          <inline>
                            <system state=""/>
                          </inline>
                          <sleep milliseconds="10000"/>
                        </rom>
                        ''
                    ]
                  }
                }
          , test-driver_manager =
              Child.flat
                Child.Attributes::{
                , binary = "test-driver_manager"
                , config = Init.Config::{
                  , content =
                    [ Genode.Prelude.XML.text
                        ''
                        <check_ahci_block_device label="ahci-1" block_count="65536" block_size="512" model="QEMU HARDDISK"/>
                        <check_input/>
                        <check_framebuffer/>
                        ''
                    ]
                  }
                , reportRoms = [ label "block_devices" ]
                , routes =
                  [ ServiceRoute.child "Block" "drivers"
                  , ServiceRoute.child "Framebuffer" "drivers"
                  , ServiceRoute.child "Input" "drivers"
                  ]
                }
          }
      }

let rom =
      Genode.Boot.toRomTexts
        (   toMap
              { capslock = "<feature_creep/>"
              , numlock = "<feature_creep/>"
              , usb_policy = "<usb/>"
              }
          # [ { mapKey = "fb_drv.config"
              , mapValue =
                  ''
                  <config width="1024" height="768" buffered="yes"/>
                  	<report connectors="yes"/>
                  </config>
                  ''
              }
            , { mapKey = "input_filter.config"
              , mapValue =
                  ''
                  <config>
                  	<input label="ps2"/>
                  	<input label="usb"/>
                  	<output>
                  		<chargen>
                  			<remap>
                  				<key name="KEY_F11"      to="KEY_RESTART"/>
                  				<key name="KEY_F12"      to="KEY_DASHBOARD"/>
                  				<key name="KEY_LEFTMETA" to="KEY_SCREEN"/>
                  				<merge>
                  					<accelerate max="50" sensitivity_percent="1000" curve="127">
                  						<button-scroll>
                  							<input name="ps2"/>
                  							<vertical   button="BTN_MIDDLE" speed_percent="-10"/>
                  							<horizontal button="BTN_MIDDLE" speed_percent="-10"/>
                  						</button-scroll>
                  					</accelerate>
                  					<input name="usb"/>
                  				</merge>
                  			</remap>
                  			<mod1>
                  				<key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/>
                  			</mod1>
                  			<mod2>
                  				<key name="KEY_LEFTCTRL"/> <key name="KEY_RIGHTCTRL"/>
                  			</mod2>
                  			<mod3>
                  				<key name="KEY_RIGHTALT"/> <!-- AltGr -->
                  			</mod3>
                  			<repeat delay_ms="230" rate_ms="40"/>
                  		</chargen>
                  	</output>
                  </config>
                  ''
              }
            ]
        )

in  Test::{ children = Test.initToChildren init, rom = rom }

M tests/log.dhall => tests/log.dhall +0 -1
@@ 1,4 1,3 @@

let Test = ./test.dhall ? env:DHALL_GENODE_TEST

let Genode = Test.Genode

M tests/posix.dhall => tests/posix.dhall +11 -12
@@ 1,4 1,3 @@

let Test = ./test.dhall ? env:DHALL_GENODE_TEST

let Genode = Test.Genode


@@ 11,8 10,8 @@ let Init = Genode.Init

let Child = Init.Child

in    λ(params : { bash : Text, coreutils : Text, script : Text })
    → let init =
in  λ(params : { bash : Text, coreutils : Text, script : Text }) →
      let init =
            Init::{
            , verbose = True
            , routes =


@@ 83,8 82,8 @@ in    λ(params : { bash : Text, coreutils : Text, script : Text })
                            # Prelude.List.map
                                Text
                                XML.Type
                                (   λ(x : Text)
                                  → XML.leaf
                                ( λ(x : Text) →
                                    XML.leaf
                                      { name = "arg"
                                      , attributes = toMap { value = x }
                                      }


@@ 99,13 98,13 @@ in    λ(params : { bash : Text, coreutils : Text, script : Text })
                      , routes =
                        [ Init.ServiceRoute.child "File_system" "vfs"
                        , { service =
                              { name = "ROM"
                              , label =
                                  Init.LabelSelector.Type.Partial
                                    { prefix = Some "/nix/store/"
                                    , suffix = None Text
                                    }
                              }
                            { name = "ROM"
                            , label =
                                Init.LabelSelector.Type.Partial
                                  { prefix = Some "/nix/store/"
                                  , suffix = None Text
                                  }
                            }
                          , route =
                              Init.Route.Type.Child
                                { name = "store_rom"

M tests/solo5/blk.dhall => tests/solo5/blk.dhall +17 -4
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Init = Genode.Init


@@ 25,11 24,25 @@ let init =
          , block =
              Child.flat
                Child.Attributes::{
                , binary = "ram_block"
                , binary = "vfs_block"
                , provides = [ "Block" ]
                , resources = Init.Resources::{ ram = Genode.units.MiB 9 }
                , resources = Init.Resources::{ ram = Genode.units.MiB 12 }
                , config = Init.Config::{
                  , attributes = toMap { size = "8M", block_size = "4096" }
                  , content =
                    [ Genode.Prelude.XML.text
                        ''
                        <vfs>
                          <ram/>
                          <import>
                            <zero name="block.raw" size="8M"/>
                          </import>
                        </vfs>
                        ''
                    ]
                  , defaultPolicy = Some Init.Config.DefaultPolicy::{
                    , attributes = toMap
                        { file = "block.raw", writeable = "yes" }
                    }
                  }
                }
          }

M tests/solo5/default.nix => tests/solo5/default.nix +2 -1
@@ 21,10 21,11 @@ in map solo5Test [
          if pkgs.stdenv.hostPlatform.isAarch64 then "True" else "False"
        } }";
      inputs = map genodeMake [ "app/ping" ] ++ (map genodeDepot [
        "ram_block"
        "nic_bridge"
        "nic_loopback"
        "sequence"
        "vfs_block"
        "vfs_import"
      ]);
    };
  }

M tests/solo5/net.dhall => tests/solo5/net.dhall +0 -1
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Init = Genode.Init

M tests/solo5/net_2if.dhall => tests/solo5/net_2if.dhall +0 -1
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Init = Genode.Init

M tests/solo5/solo5.dhall => tests/solo5/solo5.dhall +5 -8
@@ 1,4 1,3 @@

let Test = ../test.dhall ? env:DHALL_GENODE_TEST

let Genode = Test.Genode


@@ 12,8 11,8 @@ let Child = Init.Child
let Config = Init.Config

let toSimple =
        λ(testName : Text)
      → Child.flat
      λ(testName : Text) →
        Child.flat
          Child.Attributes::{
          , binary = "solo5-test_${testName}"
          , resources = Init.Resources::{ caps = 256, ram = Genode.units.MiB 3 }


@@ 28,8 27,8 @@ let toSimple =
            }
          }

in    λ(params : { isAarch64 : Bool })
    → let tests
in  λ(params : { isAarch64 : Bool }) →
      let tests
          : Prelude.Map.Type Text Child.Type
          =   toMap
                { quiet = toSimple "quiet"


@@ 40,10 39,8 @@ in    λ(params : { isAarch64 : Bool })
                , net = ./net.dhall
                , net_2if = ./net_2if.dhall
                }
            # (       if params.isAarch64

            # ( if    params.isAarch64
                then  Prelude.Map.empty Text Child.Type

                else  toMap { fpu = toSimple "fpu" }
              )


M tests/solo5/ssp.dhall => tests/solo5/ssp.dhall +0 -1
@@ 1,4 1,3 @@

let Test = ../test.dhall ? env:DHALL_GENODE_TEST

let Child = Test.Genode.Init.Child

M tests/solo5/time.dhall => tests/solo5/time.dhall +0 -1
@@ 1,4 1,3 @@

let Genode = env:DHALL_GENODE

let Init = Genode.Init

M tests/test-wrapper.dhall => tests/test-wrapper.dhall +18 -19
@@ 1,4 1,3 @@

let Test = ./test.dhall ? env:DHALL_GENODE_TEST

let Genode = Test.Genode


@@ 18,15 17,15 @@ let Children = TextMapType Child.Type
let Manifest/Type = TextMapType (TextMapType Text)

let Manifest/toRoutes =
        λ(manifest : Manifest/Type)
      → Prelude.List.map
      λ(manifest : Manifest/Type) →
        Prelude.List.map
          (Prelude.Map.Entry Text Text)
          Init.ServiceRoute.Type
          (   λ(entry : Prelude.Map.Entry Text Text)
            → { service =
                  { name = "ROM"
                  , label = Init.LabelSelector.Type.Last entry.mapKey
                  }
          ( λ(entry : Prelude.Map.Entry Text Text) →
              { service =
                { name = "ROM"
                , label = Init.LabelSelector.Type.Last entry.mapKey
                }
              , route =
                  Init.Route.Type.Child
                    { name = "store_rom"


@@ 44,9 43,9 @@ let parentROMs =
      Prelude.List.map
        Text
        Init.ServiceRoute.Type
        (   λ(label : Text)
          → { service =
                { name = "ROM", label = Init.LabelSelector.Type.Last label }
        ( λ(label : Text) →
            { service =
              { name = "ROM", label = Init.LabelSelector.Type.Last label }
            , route =
                Init.Route.Type.Parent { label = Some label, diag = None Bool }
            }


@@ 54,9 53,9 @@ let parentROMs =

let wrapHarness
    : Children → Manifest/Type → Child.Type
    =   λ(children : Children)
      → λ(manifest : Manifest/Type)
      → Child.nested
    = λ(children : Children) →
      λ(manifest : Manifest/Type) →
        Child.nested
          children
          Child.Attributes::{
          , binary = "sotest-harness"


@@ 88,11 87,11 @@ let wrapHarness
              # Manifest/toRoutes manifest
          }

in    λ(test : Test.Type)
    → λ(storeSize : Natural)
    → λ(storeManifest : Manifest/Type)
    → λ(bootManifest : Manifest/Type)
    → Genode.Boot::{
in  λ(test : Test.Type) →
    λ(storeSize : Natural) →
    λ(storeManifest : Manifest/Type) →
    λ(bootManifest : Manifest/Type) →
      Genode.Boot::{
      , config = Init::{
        , children =
          [ { mapKey = "timer"

M tests/test.dhall => tests/test.dhall +3 -4
@@ 1,19 1,18 @@

let Genode = env:DHALL_GENODE

let Prelude = Genode.Prelude

let Init = Genode.Init

in  { Genode = Genode
in  { Genode
    , Type =
        { children : Prelude.Map.Type Text Init.Child.Type
        , rom : Genode.BootModules.Type
        }
    , default.rom = [] : Genode.BootModules.Type
    , initToChildren =
          λ(init : Init.Type)
        → toMap
        λ(init : Init.Type) →
          toMap
            { init =
                Init.toChild
                  init

M tests/vmm_arm.dhall => tests/vmm_arm.dhall +3 -4
@@ 1,4 1,3 @@

let Test = ./test.dhall ? env:DHALL_GENODE_TEST

let Genode = Test.Genode


@@ 11,8 10,8 @@ let ServiceRoute = Init.ServiceRoute

let Child = Init.Child

in    λ(guest : { linux : Text, dtb : Text, initrd : Text })
    → let init =
in  λ(guest : { linux : Text, dtb : Text, initrd : Text }) →
      let init =
            Init::{
            , children = toMap
                { nic =


@@ 38,7 37,7 @@ in    λ(guest : { linux : Text, dtb : Text, initrd : Text })
                                ]
                              }
                          ]
                        , defaultPolicy = Some Init.Config.Policy::{
                        , defaultPolicy = Some Init.Config.DefaultPolicy::{
                          , attributes = toMap { domain = "default" }
                          }
                        }

M tests/vmm_x86.dhall => tests/vmm_x86.dhall +1 -2
@@ 1,4 1,3 @@

let Test = ./test.dhall ? env:DHALL_GENODE_TEST

let Genode = Test.Genode


@@ 18,4 17,4 @@ let vmm =
        , routes = [ Genode.Init.ServiceRoute.parent "VM" ]
        }

in  Test::{ children = toMap { vmm = vmm } }
in  Test::{ children = toMap { vmm } }

M tests/x86.dhall => tests/x86.dhall +1 -2
@@ 1,4 1,3 @@

let Test = ./test.dhall ? env:DHALL_GENODE_TEST

let Genode = Test.Genode


@@ 83,7 82,7 @@ let pciInit =
                            , attributes = toMap { class = "ALL" }
                            }
                        ]
                      , label = Init.LabelSelector.Type.Scoped "test-pci"
                      , label = Init.LabelSelector.prefix "test-pci"
                      }
                    ]
                  }