From efe0887247294a71e70cbea95ab730ac4bd89e69 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 13 Jun 2019 14:35:33 +0200 Subject: [PATCH 01/67] tool: fix BOARD_RUN_OPT for arm_v8 --- tool/builddir/build.conf/run_arm_v7 | 2 +- tool/builddir/build.conf/run_arm_v8 | 6 ++---- tool/builddir/build.conf/run_riscv | 2 +- tool/builddir/build.conf/run_x86_32 | 2 +- tool/builddir/build.conf/run_x86_64 | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/tool/builddir/build.conf/run_arm_v7 b/tool/builddir/build.conf/run_arm_v7 index 18b89dba444..a83a48b14ae 100644 --- a/tool/builddir/build.conf/run_arm_v7 +++ b/tool/builddir/build.conf/run_arm_v7 @@ -9,7 +9,7 @@ QEMU_RUN_OPT := --include power_on/qemu --include log/qemu # wand_quad, or zynq_qemu) #BOARD ?= pbxa9 -# local varible for run-tool arguments that depend on the used board +# local variable for run-tool arguments that depend on the used board BOARD_RUN_OPT(pbxa9) = $(QEMU_RUN_OPT) BOARD_RUN_OPT(zynq_qemu) = $(QEMU_RUN_OPT) diff --git a/tool/builddir/build.conf/run_arm_v8 b/tool/builddir/build.conf/run_arm_v8 index ef7e085a527..dd6a6e70591 100644 --- a/tool/builddir/build.conf/run_arm_v8 +++ b/tool/builddir/build.conf/run_arm_v8 @@ -7,10 +7,8 @@ QEMU_RUN_OPT := --include power_on/qemu --include log/qemu # board to use (rpi3) #BOARD ?= rpi3 -# local varible for run-tool arguments that depend on the used kernel -KERNEL_RUN_OPT(hw) := $(QEMU_RUN_OPT) -KERNEL_RUN_OPT(foc) := $(QEMU_RUN_OPT) -KERNEL_RUN_OPT(sel4) := $(QEMU_RUN_OPT) +# local variable for run-tool arguments that depend on the used board +BOARD_RUN_OPT(rpi3) := $(QEMU_RUN_OPT) ## ## Qemu arguments, effective when using the run tool's 'power_on/qemu' back end diff --git a/tool/builddir/build.conf/run_riscv b/tool/builddir/build.conf/run_riscv index b8b5c5466a8..50c0a91827c 100644 --- a/tool/builddir/build.conf/run_riscv +++ b/tool/builddir/build.conf/run_riscv @@ -4,6 +4,6 @@ KERNEL ?= hw # board to use BOARD ?= spike -# local varible for run-tool arguments that depend on the used board +# local variable for run-tool arguments that depend on the used board BOARD_RUN_OPT(spike) = --include image/bbl --include power_on/spike --include log/spike diff --git a/tool/builddir/build.conf/run_x86_32 b/tool/builddir/build.conf/run_x86_32 index 40f53d037b4..7a0691eb71f 100644 --- a/tool/builddir/build.conf/run_x86_32 +++ b/tool/builddir/build.conf/run_x86_32 @@ -4,7 +4,7 @@ # board to use (pc, or linux) BOARD ?= pc -# local varible for run-tool arguments that depend on the used board +# local variable for run-tool arguments that depend on the used board BOARD_RUN_OPT(pc) = $(QEMU_RUN_OPT) BOARD_RUN_OPT(linux) = --include power_on/linux --include log/linux diff --git a/tool/builddir/build.conf/run_x86_64 b/tool/builddir/build.conf/run_x86_64 index 507faacacba..54dc1e93d2c 100644 --- a/tool/builddir/build.conf/run_x86_64 +++ b/tool/builddir/build.conf/run_x86_64 @@ -4,7 +4,7 @@ # board to use (pc, linux, or muen) BOARD ?= pc -# local varible for run-tool arguments that depend on the used board +# local variable for run-tool arguments that depend on the used board BOARD_RUN_OPT(muen) = --include image/muen BOARD_RUN_OPT(muen) += --image-muen-hardware hardware/lenovo-t430s.xml BOARD_RUN_OPT(muen) += --image-muen-platform platform/lenovo-t430s.xml From 0ecc48e6de7111692f13352696f3f357d1de6b60 Mon Sep 17 00:00:00 2001 From: Tomasz Gajewski Date: Thu, 31 Jan 2019 23:09:54 +0100 Subject: [PATCH 02/67] Mini UART driver for Rpi3 Ref #3405 --- .../base/include/drivers/uart/bcm2835_mini.h | 247 ++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 repos/base/include/drivers/uart/bcm2835_mini.h diff --git a/repos/base/include/drivers/uart/bcm2835_mini.h b/repos/base/include/drivers/uart/bcm2835_mini.h new file mode 100644 index 00000000000..0d0041d71ba --- /dev/null +++ b/repos/base/include/drivers/uart/bcm2835_mini.h @@ -0,0 +1,247 @@ +/* + * \brief Driver for the MINI UART for Rpi3 + * \author Tomasz Gajewski + * \date 2019-01-30 + */ + +/* + * Copyright (C) 2011-2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _INCLUDE__DRIVERS__UART__BCM2835_MINI_H_ +#define _INCLUDE__DRIVERS__UART__BCM2835_MINI_H_ + +/* Genode includes */ +#include + +namespace Genode { class Bcm2835_mini_uart; } + + +/** + * Driver base for the PrimeCell UART MINI Revision r1p3 + */ +class Genode::Bcm2835_mini_uart : Mmio +{ + protected: + + enum { MAX_BAUD_RATE = 0xfffffff }; + + /** + * Auxiliary Interrupt status + */ + struct AuxIrq : public Register<0x00, 32> + { + struct MiniUartIrq : Bitfield<0,1> { }; /* read only */ + struct Spi1Irq : Bitfield<1,1> { }; /* read only */ + struct Spi2Irq : Bitfield<2,1> { }; /* read only */ + }; + + /** + * Auxiliary enables + */ + struct AuxEnables : public Register<0x04, 32> + { + struct MiniUartEnable : Bitfield<0,1> { }; + struct Spi1Enable : Bitfield<1,1> { }; + struct Spi2Enable : Bitfield<2,1> { }; + }; + + /** + * Mini Uart I/O Data + */ + struct AuxMuIoReg : public Register<0x40, 32> + { + struct TransmitReceive : Bitfield<0,8> { }; + + struct DLABLS8BitsBaudrate : Bitfield<0,8> { }; + }; + + /** + * Mini Uart Interrupt Enable + */ + struct AuxMuIerReg : public Register<0x44, 32> + { + struct EnableReceiveInterrupt : Bitfield<0,1> { }; + struct EnableTransmitInterrupt : Bitfield<1,1> { }; + + struct DLABMS8BitsBaudrate : Bitfield<0,8> { }; + }; + + /** + * Mini Uart Interrupt Identify + */ + struct AuxMuIirReg : public Register<0x48, 32> + { + struct InterruptPending : Bitfield<0,1> { }; + struct InterruptId : Bitfield<1,2> { /* read only */ + enum { + NO_INTERRUPTS = 0, + TRANSMIT_HOLDING_REGISTER_EMPTY = 1, + RECEIVER_HOLDS_VALID_BYTE = 2, + }; + + }; + struct FifoClear : Bitfield<1,2> { /* write only */ + enum { + CLEAR_RECEIVE_FIFO = 1, + CLEAR_TRANSMIT_FIFO = 2, + CLEAR_BOTH_FIFOS = 3, + }; + }; + }; + + /** + * Mini Uart Line Control + */ + struct AuxMuLcrReg : public Register<0x4C, 32> + { + struct DataSize : Bitfield<0,1> { }; + struct Break : Bitfield<6,1> { }; + struct DLAB : Bitfield<7,1> { }; + }; + + /** + * Mini Uart Modem Control + */ + struct AuxMuMcrReg : public Register<0x50, 32> + { + struct RTS : Bitfield<1,1> { }; + }; + + /** + * Mini Uart Line Status + */ + struct AuxMuLsrReg : public Register<0x54, 32> + { + struct DataReady : Bitfield<0,1> { }; + struct ReceiverOverrun : Bitfield<1,1> { }; /* read/clear only */ + struct TransmitterEmpty : Bitfield<5,1> { }; /* read only */ + struct TransmitterIdle : Bitfield<6,1> { }; /* read only */ + }; + + /** + * Mini Uart Modem Status + */ + struct AuxMuMsrReg : public Register<0x58, 32> + { + struct CtsStatus : Bitfield<5,1> { }; /* read only */ + }; + + /** + * Mini Uart Scratch + */ + struct AuxMuScratch : public Register<0x5C, 32> + { + struct Scratch : Bitfield<0,8> { }; + }; + + /** + * Mini Uart Extra Control + */ + struct AuxMuCntlReg : public Register<0x60, 32> + { + struct ReceiverEnable : Bitfield<0,1> { }; + struct TransmitterEnable : Bitfield<1,1> { }; + struct EnableReceiveAutoFlowRTSControl : Bitfield<2,1> { }; + struct EnableTransmitAutoFlowCTSControl : Bitfield<3,1> { }; + struct RTSAutoFlowLevel : Bitfield<4,2> { + enum { + DE_ASSERT_RTS_RECEIVE_FIFO_3 = 0, + DE_ASSERT_RTS_RECEIVE_FIFO_2 = 1, + DE_ASSERT_RTS_RECEIVE_FIFO_1 = 2, + DE_ASSERT_RTS_RECEIVE_FIFO_4 = 3, + }; + }; + struct RTSAssertLevel : Bitfield<6,1> { }; + struct CTSAssertLevel : Bitfield<7,1> { }; + }; + + /** + * Mini Uart Extra Status + */ + struct AuxMuStatReg : public Register<0x64, 32> + { + struct SymbolAvailable : Bitfield<0, 1> { }; /* read only */ + struct SpaceAvailable : Bitfield<1, 1> { }; /* read only */ + struct ReceiverIsIdle : Bitfield<2, 1> { }; /* read only */ + struct TransmitterIsIdle : Bitfield<3, 1> { }; /* read only */ + struct ReceiverOverrun : Bitfield<4, 1> { }; /* read only */ + struct TransmitFifoIsFull : Bitfield<5, 1> { }; /* read only */ + struct RTSStatus : Bitfield<6, 1> { }; /* read only */ + struct CTSLine : Bitfield<7, 1> { }; /* read only */ + struct TransmitFifoIsEmpty : Bitfield<8, 1> { }; /* read only */ + struct TransmitterDone : Bitfield<9, 1> { }; /* read only */ + struct ReceiveFifoFillLevel : Bitfield<16,4> { }; /* read only */ + struct TransmitFifoFillLevel : Bitfield<24,4> { }; /* read only */ + }; + + /** + * Mini Uart Baudrate + */ + struct AuxMuBaudReg : public Register<0x68, 32> + { + struct Baudrate : Bitfield<0,16> { }; + }; + + /** + * Idle until the device is ready for action + */ + void _wait_until_ready() { + do { + asm volatile("nop"); + } while (!read()) ; + } + + public: + + /** + * Constructor + * \param base device MMIO base + * \param clock device reference clock frequency + * \param baud_rate targeted UART baud rate + */ + inline Bcm2835_mini_uart(addr_t const base, uint32_t const clock, + uint32_t const baud_rate); + + /** + * Send ASCII char 'c' over the UART interface + */ + inline void put_char(char const c); +}; + + +Genode::Bcm2835_mini_uart::Bcm2835_mini_uart(addr_t const base, + uint32_t const clock, + uint32_t const baud_rate) +: Mmio(base) +{ + /* enable UART1, AUX mini uart */ + write(read() | + AuxEnables::MiniUartEnable::bits(1)); + + write(0); + write(3); + write(0); + write(0); + write(0xc6); + uint32_t const adjusted_br = ((clock / baud_rate) / 8) - 1; + write(AuxMuBaudReg::Baudrate::bits(adjusted_br)); + write(3); + _wait_until_ready(); +} + + +void Genode::Bcm2835_mini_uart::put_char(char const c) +{ + _wait_until_ready(); + + /* transmit character */ + write(c); + _wait_until_ready(); +} + + +#endif /* _INCLUDE__DRIVERS__UART__BCM2835_MINI_H_ */ From d9a0f76e7af9477a209c37c02d924ab83fe9f931 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 4 Jun 2019 16:08:53 +0200 Subject: [PATCH 03/67] hw: extend long-descriptor page table format Ref #3405 --- repos/base-hw/src/include/hw/spec/arm/lpae.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/repos/base-hw/src/include/hw/spec/arm/lpae.h b/repos/base-hw/src/include/hw/spec/arm/lpae.h index 481098c93e5..7e78eecfd07 100644 --- a/repos/base-hw/src/include/hw/spec/arm/lpae.h +++ b/repos/base-hw/src/include/hw/spec/arm/lpae.h @@ -28,6 +28,7 @@ namespace Hw { SIZE_LOG2_1GB = 30, SIZE_LOG2_4GB = 32, SIZE_LOG2_256GB = 38, + SIZE_LOG2_512GB = 39, }; /** @@ -93,7 +94,7 @@ namespace Hw { STAGE1, SIZE_LOG2_1GB>; using Level_1_stage_1_translation_table = Level_x_translation_table; + STAGE1, SIZE_LOG2_512GB>; using Level_3_stage_2_translation_table = Level_3_translation_table; using Level_2_stage_2_translation_table = @@ -162,7 +163,7 @@ class Hw::Long_translation_table struct Output_address : Descriptor::template Bitfield { }; + 47 - BLOCK_SIZE_LOG2> { }; /** * Indicates that 16 adjacent entries point to contiguous @@ -176,7 +177,7 @@ class Hw::Long_translation_table struct Table_descriptor : Descriptor { - struct Next_table : Descriptor::template Bitfield<12, 27> { }; + struct Next_table : Descriptor::template Bitfield<12, 36> { }; static typename Descriptor::access_t create(void * const pa) { @@ -293,8 +294,10 @@ class Hw::Long_translation_table template void _range_op(addr_t vo, addr_t pa, size_t size, FUNC &&func) { - for (size_t i = vo >> BLOCK_SIZE_LOG2; size > 0; - i = vo >> BLOCK_SIZE_LOG2) { + auto idx = [] (addr_t v) -> addr_t { + return (v >> BLOCK_SIZE_LOG2) & (MAX_ENTRIES-1); }; + + for (size_t i = idx(vo); size > 0; i = idx(vo)) { addr_t end = (vo + BLOCK_SIZE) & BLOCK_MASK; size_t sz = Genode::min(size, end-vo); From 87015df66c4e032540466eb0b9316c4081046898 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 12 Jun 2019 22:33:02 +0200 Subject: [PATCH 04/67] hw: change update_pd to invalidate_tlb In the past, the core-only privileged syscall `update_pd` was used only to invalidate the TLB after removal of page-table entries. By now, the whole TLB at least for one protection domain got invalidated, but in preparation for optimization and upcomingARM v8 support, it is necessary to deliver the virtual memory region that needs to get invalidated. Moreover, the name of the call shall represent explicitely that it is used to invalidate the TLB. Ref #3405 --- .../base-hw/src/core/kernel/core_interface.h | 17 ++++++----------- repos/base-hw/src/core/kernel/pd.h | 2 +- repos/base-hw/src/core/kernel/thread.cc | 16 ++++++++++------ repos/base-hw/src/core/kernel/thread.h | 19 ++++++++++--------- repos/base-hw/src/core/platform_pd.cc | 4 +--- repos/base-hw/src/core/spec/arm/kernel/pd.cc | 2 +- .../src/core/spec/arm/kernel/thread.cc | 2 +- .../base-hw/src/core/spec/riscv/kernel/pd.cc | 2 +- .../src/core/spec/riscv/kernel/thread.cc | 2 +- .../base-hw/src/core/spec/x86_64/kernel/pd.cc | 2 +- .../src/core/spec/x86_64/kernel/thread.cc | 2 +- 11 files changed, 34 insertions(+), 36 deletions(-) diff --git a/repos/base-hw/src/core/kernel/core_interface.h b/repos/base-hw/src/core/kernel/core_interface.h index 1ea3154e0f0..81848c5d484 100644 --- a/repos/base-hw/src/core/kernel/core_interface.h +++ b/repos/base-hw/src/core/kernel/core_interface.h @@ -42,7 +42,7 @@ namespace Kernel constexpr Call_arg call_id_resume_thread() { return 104; } constexpr Call_arg call_id_thread_pager() { return 105; } constexpr Call_arg call_id_thread_quota() { return 106; } - constexpr Call_arg call_id_update_pd() { return 107; } + constexpr Call_arg call_id_invalidate_tlb() { return 107; } constexpr Call_arg call_id_new_pd() { return 108; } constexpr Call_arg call_id_delete_pd() { return 109; } constexpr Call_arg call_id_new_signal_receiver() { return 110; } @@ -62,18 +62,13 @@ namespace Kernel constexpr Call_arg call_id_new_core_thread() { return 124; } /** - * Update locally effective domain configuration to in-memory state - * - * \param pd pointer to pd kernel object - * - * Kernel and/or hardware may cache parts of a domain configuration. This - * function ensures that the in-memory state of the targeted domain gets - * CPU-locally effective. The calling thread must not be destroyed while - * in this syscall. + * Invalidate TLB entries for the `pd` in region `addr`, `sz` */ - inline void update_pd(Pd * const pd) + inline void invalidate_tlb(Pd * const pd, addr_t const addr, + size_t const sz) { - call(call_id_update_pd(), (Call_arg)pd); + call(call_id_invalidate_tlb(), (Call_arg)pd, (Call_arg)addr, + (Call_arg)sz); } diff --git a/repos/base-hw/src/core/kernel/pd.h b/repos/base-hw/src/core/kernel/pd.h index 3ffd5f1377b..3eb1754a41d 100644 --- a/repos/base-hw/src/core/kernel/pd.h +++ b/repos/base-hw/src/core/kernel/pd.h @@ -92,7 +92,7 @@ class Kernel::Pd : public Kernel::Object * Check whether the given 'cpu' needs to do some maintainance * work, after this pd has had changes in its page-tables */ - bool update(Cpu & cpu); + bool invalidate_tlb(Cpu & cpu, addr_t addr, size_t size); /*************** diff --git a/repos/base-hw/src/core/kernel/thread.cc b/repos/base-hw/src/core/kernel/thread.cc index cdfe0b20e66..2f716faf896 100644 --- a/repos/base-hw/src/core/kernel/thread.cc +++ b/repos/base-hw/src/core/kernel/thread.cc @@ -38,8 +38,10 @@ extern "C" void _core_start(void); using namespace Kernel; -Thread::Pd_update::Pd_update(Thread & caller, Pd & pd, unsigned cnt) -: caller(caller), pd(pd), cnt(cnt) +Thread::Tlb_invalidation::Tlb_invalidation(Thread & caller, Pd & pd, + addr_t addr, size_t size, + unsigned cnt) +: caller(caller), pd(pd), addr(addr), size(size), cnt(cnt) { cpu_pool().work_list().insert(&_le); caller._become_inactive(AWAITS_RESTART); @@ -626,17 +628,19 @@ void Thread::_call_delete_cap() } -void Kernel::Thread::_call_update_pd() +void Kernel::Thread::_call_invalidate_tlb() { Pd * const pd = (Pd *) user_arg_1(); + addr_t addr = (addr_t) user_arg_2(); + size_t size = (size_t) user_arg_3(); unsigned cnt = 0; cpu_pool().for_each_cpu([&] (Cpu & cpu) { /* if a cpu needs to update increase the counter */ - if (pd->update(cpu)) cnt++; }); + if (pd->invalidate_tlb(cpu, addr, size)) cnt++; }); /* insert the work item in the list if there are outstanding cpus */ - if (cnt) _pd_update.construct(*this, *pd, cnt); + if (cnt) _tlb_invalidation.construct(*this, *pd, addr, size, cnt); } @@ -685,7 +689,7 @@ void Thread::_call() case call_id_resume_thread(): _call_resume_thread(); return; case call_id_cancel_thread_blocking(): _call_cancel_thread_blocking(); return; case call_id_thread_pager(): _call_pager(); return; - case call_id_update_pd(): _call_update_pd(); return; + case call_id_invalidate_tlb(): _call_invalidate_tlb(); return; case call_id_new_pd(): _call_new(*(Hw::Page_table *) user_arg_2(), *(Genode::Platform_pd *) user_arg_3()); diff --git a/repos/base-hw/src/core/kernel/thread.h b/repos/base-hw/src/core/kernel/thread.h index ce5ab678254..7fa857eedda 100644 --- a/repos/base-hw/src/core/kernel/thread.h +++ b/repos/base-hw/src/core/kernel/thread.h @@ -63,17 +63,18 @@ class Kernel::Thread Thread &operator = (Thread const &); /** - * An update of page-table entries that requires architecture-wise - * maintainance operations, e.g., a TLB invalidation needs - * cross-cpu synchronization + * A TLB invalidation may need cross-cpu synchronization */ - struct Pd_update : Inter_processor_work + struct Tlb_invalidation : Inter_processor_work { Thread & caller; /* the caller gets blocked until all finished */ Pd & pd; /* the corresponding pd */ + addr_t addr; + size_t size; unsigned cnt; /* count of cpus left */ - Pd_update(Thread & caller, Pd & pd, unsigned cnt); + Tlb_invalidation(Thread & caller, Pd & pd, addr_t addr, size_t size, + unsigned cnt); /************************************ ** Inter_processor_work interface ** @@ -100,7 +101,7 @@ class Kernel::Thread void execute() override; }; - friend void Pd_update::execute(); + friend void Tlb_invalidation::execute(); friend void Destroy::execute(); protected: @@ -128,8 +129,8 @@ class Kernel::Thread bool _cancel_next_await_signal = false; bool const _core = false; - Genode::Constructible _pd_update {}; - Genode::Constructible _destroy {}; + Genode::Constructible _tlb_invalidation {}; + Genode::Constructible _destroy {}; /** * Notice that another thread yielded the CPU to this thread @@ -211,7 +212,7 @@ class Kernel::Thread void _call_await_request_msg(); void _call_send_request_msg(); void _call_send_reply_msg(); - void _call_update_pd(); + void _call_invalidate_tlb(); void _call_update_data_region(); void _call_update_instr_region(); void _call_print_char(); diff --git a/repos/base-hw/src/core/platform_pd.cc b/repos/base-hw/src/core/platform_pd.cc index ebeb1c504b1..a130ed1ffd8 100644 --- a/repos/base-hw/src/core/platform_pd.cc +++ b/repos/base-hw/src/core/platform_pd.cc @@ -69,9 +69,7 @@ void Hw::Address_space::flush(addr_t virt, size_t size, Core_local_addr) try { _tt.remove_translation(virt, size, _tt_alloc); - - /* update translation caches */ - Kernel::update_pd(&_kernel_pd); + Kernel::invalidate_tlb(&_kernel_pd, virt, size); } catch(...) { error("tried to remove invalid region!"); } diff --git a/repos/base-hw/src/core/spec/arm/kernel/pd.cc b/repos/base-hw/src/core/spec/arm/kernel/pd.cc index 65d68fa8866..3f3d233a591 100644 --- a/repos/base-hw/src/core/spec/arm/kernel/pd.cc +++ b/repos/base-hw/src/core/spec/arm/kernel/pd.cc @@ -14,7 +14,7 @@ #include #include -bool Kernel::Pd::update(Cpu & cpu) +bool Kernel::Pd::invalidate_tlb(Cpu & cpu, addr_t, size_t) { /* invalidate the TLB on the local CPU only */ if (cpu.id() == Cpu::executing_id()) { diff --git a/repos/base-hw/src/core/spec/arm/kernel/thread.cc b/repos/base-hw/src/core/spec/arm/kernel/thread.cc index 62cce671663..cd3d61391ad 100644 --- a/repos/base-hw/src/core/spec/arm/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/arm/kernel/thread.cc @@ -80,7 +80,7 @@ void Kernel::Thread::_call_update_instr_region() * coprocessor registers (there might be ARM SoCs where this is not valid, * with several shareability domains, but until now we do not support them) */ -void Kernel::Thread::Pd_update::execute() { }; +void Kernel::Thread::Tlb_invalidation::execute() { }; void Thread::proceed(Cpu & cpu) diff --git a/repos/base-hw/src/core/spec/riscv/kernel/pd.cc b/repos/base-hw/src/core/spec/riscv/kernel/pd.cc index ea33568da39..a9d03b2248c 100644 --- a/repos/base-hw/src/core/spec/riscv/kernel/pd.cc +++ b/repos/base-hw/src/core/spec/riscv/kernel/pd.cc @@ -13,7 +13,7 @@ #include -bool Kernel::Pd::update(Kernel::Cpu&) +bool Kernel::Pd::invalidate_tlb(Kernel::Cpu&, addr_t, size_t) { Genode::Cpu::sfence(); return false; diff --git a/repos/base-hw/src/core/spec/riscv/kernel/thread.cc b/repos/base-hw/src/core/spec/riscv/kernel/thread.cc index 3bf3d9bd8af..e843499cedc 100644 --- a/repos/base-hw/src/core/spec/riscv/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/riscv/kernel/thread.cc @@ -18,7 +18,7 @@ using namespace Kernel; -void Thread::Pd_update::execute() {} +void Thread::Tlb_invalidation::execute() {} void Thread::exception(Cpu & cpu) diff --git a/repos/base-hw/src/core/spec/x86_64/kernel/pd.cc b/repos/base-hw/src/core/spec/x86_64/kernel/pd.cc index d98f17569c2..e3a97b1f371 100644 --- a/repos/base-hw/src/core/spec/x86_64/kernel/pd.cc +++ b/repos/base-hw/src/core/spec/x86_64/kernel/pd.cc @@ -15,7 +15,7 @@ #include -bool Kernel::Pd::update(Cpu & cpu) +bool Kernel::Pd::invalidate_tlb(Cpu & cpu, addr_t, size_t) { /* on the current CPU invalidate the TLB */ if (cpu.id() == Cpu::executing_id()) { diff --git a/repos/base-hw/src/core/spec/x86_64/kernel/thread.cc b/repos/base-hw/src/core/spec/x86_64/kernel/thread.cc index d1df6e5104b..27084e78c38 100644 --- a/repos/base-hw/src/core/spec/x86_64/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/x86_64/kernel/thread.cc @@ -18,7 +18,7 @@ #include #include -void Kernel::Thread::Pd_update::execute() +void Kernel::Thread::Tlb_invalidation::execute() { /* invalidate cpu-local TLB */ Cpu::invalidate_tlb(); From 90d07741aa3483ef9e6f0e3d878588e33e224bd0 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 21 May 2019 16:27:37 +0200 Subject: [PATCH 05/67] hw: support for ARM64 Raspberry Pi 3 Restriction: enables only cpu core 0 and the timer interrupt by now. Fix #3405 --- .../spec/arm_64/kernel/interface_support.h | 27 +++ .../base-hw/lib/mk/spec/arm_64/startup-hw.mk | 3 + .../base-hw/lib/mk/spec/arm_64/syscall-hw.mk | 3 + .../lib/mk/spec/arm_v8/bootstrap-hw-rpi3.mk | 10 + .../lib/mk/spec/arm_v8/core-hw-rpi3.mk | 24 +++ repos/base-hw/lib/mk/spec/arm_v8/ld-hw.mk | 3 + .../base-hw/src/bootstrap/spec/arm_64/crt0.s | 64 +++++++ repos/base-hw/src/bootstrap/spec/rpi3/board.h | 30 +++ .../src/bootstrap/spec/rpi3/platform.cc | 144 ++++++++++++++ repos/base-hw/src/core/spec/arm_v8/cpu.cc | 96 ++++++++++ repos/base-hw/src/core/spec/arm_v8/cpu.h | 93 +++++++++ repos/base-hw/src/core/spec/arm_v8/crt0.s | 56 ++++++ .../src/core/spec/arm_v8/exception_vector.s | 132 +++++++++++++ .../src/core/spec/arm_v8/kernel/cpu.cc | 21 ++ .../src/core/spec/arm_v8/kernel/thread.cc | 141 ++++++++++++++ .../src/core/spec/arm_v8/translation_table.h | 20 ++ repos/base-hw/src/core/spec/rpi3/board.h | 25 +++ repos/base-hw/src/core/spec/rpi3/pic.cc | 58 ++++++ repos/base-hw/src/core/spec/rpi3/pic.h | 69 +++++++ repos/base-hw/src/core/spec/rpi3/timer.cc | 60 ++++++ .../base-hw/src/core/spec/rpi3/timer_driver.h | 34 ++++ .../base-hw/src/include/hw/spec/arm_64/cpu.h | 179 ++++++++++++++++++ .../src/include/hw/spec/arm_64/rpi3_board.h | 41 ++++ .../src/lib/base/arm_64/kernel/interface.cc | 125 ++++++++++++ repos/base/include/drivers/defs/rpi.h | 5 + tool/run/boot_dir/hw | 3 +- 26 files changed, 1465 insertions(+), 1 deletion(-) create mode 100644 repos/base-hw/include/spec/arm_64/kernel/interface_support.h create mode 100644 repos/base-hw/lib/mk/spec/arm_64/startup-hw.mk create mode 100644 repos/base-hw/lib/mk/spec/arm_64/syscall-hw.mk create mode 100644 repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-rpi3.mk create mode 100644 repos/base-hw/lib/mk/spec/arm_v8/core-hw-rpi3.mk create mode 100644 repos/base-hw/lib/mk/spec/arm_v8/ld-hw.mk create mode 100644 repos/base-hw/src/bootstrap/spec/arm_64/crt0.s create mode 100644 repos/base-hw/src/bootstrap/spec/rpi3/board.h create mode 100644 repos/base-hw/src/bootstrap/spec/rpi3/platform.cc create mode 100644 repos/base-hw/src/core/spec/arm_v8/cpu.cc create mode 100644 repos/base-hw/src/core/spec/arm_v8/cpu.h create mode 100644 repos/base-hw/src/core/spec/arm_v8/crt0.s create mode 100644 repos/base-hw/src/core/spec/arm_v8/exception_vector.s create mode 100644 repos/base-hw/src/core/spec/arm_v8/kernel/cpu.cc create mode 100644 repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc create mode 100644 repos/base-hw/src/core/spec/arm_v8/translation_table.h create mode 100644 repos/base-hw/src/core/spec/rpi3/board.h create mode 100644 repos/base-hw/src/core/spec/rpi3/pic.cc create mode 100644 repos/base-hw/src/core/spec/rpi3/pic.h create mode 100644 repos/base-hw/src/core/spec/rpi3/timer.cc create mode 100644 repos/base-hw/src/core/spec/rpi3/timer_driver.h create mode 100644 repos/base-hw/src/include/hw/spec/arm_64/cpu.h create mode 100644 repos/base-hw/src/include/hw/spec/arm_64/rpi3_board.h create mode 100644 repos/base-hw/src/lib/base/arm_64/kernel/interface.cc diff --git a/repos/base-hw/include/spec/arm_64/kernel/interface_support.h b/repos/base-hw/include/spec/arm_64/kernel/interface_support.h new file mode 100644 index 00000000000..16e4fafeef2 --- /dev/null +++ b/repos/base-hw/include/spec/arm_64/kernel/interface_support.h @@ -0,0 +1,27 @@ +/* + * \brief Interface between kernel and userland + * \author Stefan Kalkowski + * \date 2019-05-09 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _INCLUDE__SPEC__ARM_64__KERNEL__INTERFACE_SUPPORT_H_ +#define _INCLUDE__SPEC__ARM_64__KERNEL__INTERFACE_SUPPORT_H_ + +/* Genode includes */ +#include + +namespace Kernel +{ + typedef Genode::uint64_t Call_arg; + typedef Genode::uint64_t Call_ret; + typedef Genode::uint64_t Call_ret_64; +} + +#endif /* _INCLUDE__SPEC__ARM_64__KERNEL__INTERFACE_SUPPORT_H_ */ diff --git a/repos/base-hw/lib/mk/spec/arm_64/startup-hw.mk b/repos/base-hw/lib/mk/spec/arm_64/startup-hw.mk new file mode 100644 index 00000000000..613d1207421 --- /dev/null +++ b/repos/base-hw/lib/mk/spec/arm_64/startup-hw.mk @@ -0,0 +1,3 @@ +include $(BASE_DIR)/lib/mk/startup.inc + +vpath crt0.s $(BASE_DIR)/src/lib/startup/spec/arm_64 diff --git a/repos/base-hw/lib/mk/spec/arm_64/syscall-hw.mk b/repos/base-hw/lib/mk/spec/arm_64/syscall-hw.mk new file mode 100644 index 00000000000..e77c96c1fd6 --- /dev/null +++ b/repos/base-hw/lib/mk/spec/arm_64/syscall-hw.mk @@ -0,0 +1,3 @@ +SRC_CC += kernel/interface.cc + +vpath kernel/interface.cc $(REP_DIR)/src/lib/base/arm_64 diff --git a/repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-rpi3.mk b/repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-rpi3.mk new file mode 100644 index 00000000000..d05f8d1a738 --- /dev/null +++ b/repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-rpi3.mk @@ -0,0 +1,10 @@ +INC_DIR += $(BASE_DIR)/../base-hw/src/bootstrap/spec/rpi3 + +SRC_CC += lib/base/arm_64/kernel/interface.cc +SRC_CC += spec/64bit/memory_map.cc +SRC_CC += bootstrap/spec/rpi3/platform.cc +SRC_S += bootstrap/spec/arm_64/crt0.s + +vpath spec/64bit/memory_map.cc $(BASE_DIR)/../base-hw/src/lib/hw + +include $(BASE_DIR)/../base-hw/lib/mk/bootstrap-hw.inc diff --git a/repos/base-hw/lib/mk/spec/arm_v8/core-hw-rpi3.mk b/repos/base-hw/lib/mk/spec/arm_v8/core-hw-rpi3.mk new file mode 100644 index 00000000000..4c75401c75e --- /dev/null +++ b/repos/base-hw/lib/mk/spec/arm_v8/core-hw-rpi3.mk @@ -0,0 +1,24 @@ +INC_DIR += $(REP_DIR)/src/core/spec/rpi3 +INC_DIR += $(REP_DIR)/src/core/spec/arm_v8 + +# add C++ sources +SRC_CC += platform_services.cc +SRC_CC += kernel/vm_thread_off.cc +SRC_CC += kernel/cpu_up.cc +SRC_CC += kernel/lock.cc +SRC_CC += spec/arm_v8/cpu.cc +SRC_CC += spec/arm_v8/kernel/thread.cc +SRC_CC += spec/arm_v8/kernel/cpu.cc +SRC_CC += spec/arm/platform_support.cc +SRC_CC += spec/rpi3/pic.cc +SRC_CC += spec/rpi3/timer.cc +SRC_CC += spec/64bit/memory_map.cc + +#add assembly sources +SRC_S += spec/arm_v8/exception_vector.s +SRC_S += spec/arm_v8/crt0.s + +vpath spec/64bit/memory_map.cc $(BASE_DIR)/../base-hw/src/lib/hw + +# include less specific configuration +include $(REP_DIR)/lib/mk/core-hw.inc diff --git a/repos/base-hw/lib/mk/spec/arm_v8/ld-hw.mk b/repos/base-hw/lib/mk/spec/arm_v8/ld-hw.mk new file mode 100644 index 00000000000..c79c372e285 --- /dev/null +++ b/repos/base-hw/lib/mk/spec/arm_v8/ld-hw.mk @@ -0,0 +1,3 @@ +BASE_LIBS += base-hw-common base-hw + +include $(BASE_DIR)/lib/mk/spec/arm_64/ld-platform.inc diff --git a/repos/base-hw/src/bootstrap/spec/arm_64/crt0.s b/repos/base-hw/src/bootstrap/spec/arm_64/crt0.s new file mode 100644 index 00000000000..98de01e6703 --- /dev/null +++ b/repos/base-hw/src/bootstrap/spec/arm_64/crt0.s @@ -0,0 +1,64 @@ +/* + * \brief Startup code for bootstrap + * \author Stefan Kalkowski + * \date 2019-05-11 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +.section ".text.crt0" + + .global _start + _start: + + /*********************** + ** Detect CPU number ** + ***********************/ + + mrs x0, mpidr_el1 + and x0, x0, #0b11111111 + cbz x0, _crt0_fill_bss_zero + wfe + b _start + + + /*************************** + ** Zero-fill BSS segment ** + ***************************/ + + _crt0_fill_bss_zero: + ldr x0, =_bss_start + ldr x1, =_bss_end + 1: + cmp x1, x0 + b.eq _crt0_enable_fpu + str xzr, [x0], #8 + b 1b + + + /**************** + ** Enable FPU ** + ****************/ + + _crt0_enable_fpu: + mov x0, #0b11 + lsl x0, x0, #20 + msr cpacr_el1, x0 + + + /********************** + ** Initialize stack ** + **********************/ + + ldr x0, =_crt0_start_stack + mov sp, x0 + bl init + + .p2align 4 + .space 0x4000 + _crt0_start_stack: diff --git a/repos/base-hw/src/bootstrap/spec/rpi3/board.h b/repos/base-hw/src/bootstrap/spec/rpi3/board.h new file mode 100644 index 00000000000..d2a30a65ce5 --- /dev/null +++ b/repos/base-hw/src/bootstrap/spec/rpi3/board.h @@ -0,0 +1,30 @@ +/* + * \brief Board driver for bootstrap + * \author Stefan Kalkowski + * \date 2019-05-10 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _BOOTSTRAP__SPEC__RPI3__BOARD_H_ +#define _BOOTSTRAP__SPEC__RPI3__BOARD_H_ + +#include +#include +#include + +namespace Bootstrap { + using Cpu = Hw::Arm_64_cpu; + struct Pic {}; +}; + +namespace Board { + using namespace Hw::Rpi3_board; +}; + +#endif /* _BOOTSTRAP__SPEC__RPI3__BOARD_H_ */ diff --git a/repos/base-hw/src/bootstrap/spec/rpi3/platform.cc b/repos/base-hw/src/bootstrap/spec/rpi3/platform.cc new file mode 100644 index 00000000000..a015a355be5 --- /dev/null +++ b/repos/base-hw/src/bootstrap/spec/rpi3/platform.cc @@ -0,0 +1,144 @@ +/* + * \brief Platform implementations specific for base-hw and Raspberry Pi3 + * \author Stefan Kalkowski + * \date 2019-05-11 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include + +using Bootstrap::Cpu; + + +/** + * Leave out the first page (being 0x0) from bootstraps RAM allocator, + * some code does not feel happy with addresses being zero + */ +Bootstrap::Platform::Board::Board() +: early_ram_regions(Memory_region { ::Board::RAM_BASE + 0x1000, + ::Board::RAM_SIZE - 0x1000 }), + late_ram_regions(Memory_region { ::Board::RAM_BASE, 0x1000 }), + core_mmio(Memory_region { ::Board::UART_BASE, ::Board::UART_SIZE }, + Memory_region { ::Board::LOCAL_IRQ_CONTROLLER_BASE, + ::Board::LOCAL_IRQ_CONTROLLER_SIZE }, + Memory_region { ::Board::IRQ_CONTROLLER_BASE, + ::Board::IRQ_CONTROLLER_SIZE }) {} + + +static inline void prepare_non_secure_world() +{ + bool el2 = Cpu::Id_pfr0::El2::get(Cpu::Id_pfr0::read()); + + Cpu::Scr::access_t scr = Cpu::Scr::read(); + Cpu::Scr::Ns::set(scr, 1); /* set non-secure bit */ + Cpu::Scr::Rw::set(scr, 1); /* exec in aarch64 */ + Cpu::Scr::Smd::set(scr, 1); /* disable smc call */ + Cpu::Scr::write(scr); + + Cpu::Spsr::access_t pstate = 0; + Cpu::Spsr::Sp::set(pstate, 1); /* select non-el0 stack pointer */ + Cpu::Spsr::El::set(pstate, el2 ? Cpu::Current_el::EL2 + : Cpu::Current_el::EL1); + Cpu::Spsr::F::set(pstate, 1); + Cpu::Spsr::I::set(pstate, 1); + Cpu::Spsr::A::set(pstate, 1); + Cpu::Spsr::D::set(pstate, 1); + Cpu::Spsr_el3::write(pstate); + +#ifndef SWITCH_TO_ELX +#define SWITCH_TO_ELX(el) \ + "mov x0, sp \n" \ + "msr sp_" #el ", x0 \n" \ + "adr x0, 1f \n" \ + "msr elr_el3, x0 \n" \ + "eret \n" \ + "1:" + + if (el2) + asm volatile(SWITCH_TO_ELX(el2) ::: "x0"); + else + asm volatile(SWITCH_TO_ELX(el1) ::: "x0"); +#undef SWITCH_TO_ELX +#else +#error "macro SWITCH_TO_ELX already defined" +#endif +} + + +static inline void prepare_hypervisor() +{ + Cpu::Hcr::access_t scr = Cpu::Hcr::read(); + Cpu::Hcr::Rw::set(scr, 1); /* exec in aarch64 */ + Cpu::Hcr::write(scr); + + Cpu::Spsr::access_t pstate = 0; + Cpu::Spsr::Sp::set(pstate, 1); /* select non-el0 stack pointer */ + Cpu::Spsr::El::set(pstate, Cpu::Current_el::EL1); + Cpu::Spsr::F::set(pstate, 1); + Cpu::Spsr::I::set(pstate, 1); + Cpu::Spsr::A::set(pstate, 1); + Cpu::Spsr::D::set(pstate, 1); + Cpu::Spsr_el2::write(pstate); + + asm volatile("mov x0, sp \n" + "msr sp_el1, x0 \n" + "adr x0, 1f \n" + "msr elr_el2, x0 \n" + "eret \n" + "1:"); +} + + +unsigned Bootstrap::Platform::enable_mmu() +{ + while (Cpu::current_privilege_level() > Cpu::Current_el::EL1) { + if (Cpu::current_privilege_level() == Cpu::Current_el::EL3) + prepare_non_secure_world(); + else + prepare_hypervisor(); + } + + Cpu::Vbar_el1::write(Hw::Mm::supervisor_exception_vector().base); + + /* set memory attributes in indirection register */ + Cpu::Mair::access_t mair = 0; + Cpu::Mair::Attr0::set(mair, Cpu::Mair::NORMAL_MEMORY_UNCACHED); + Cpu::Mair::Attr1::set(mair, Cpu::Mair::DEVICE_MEMORY); + Cpu::Mair::Attr2::set(mair, Cpu::Mair::NORMAL_MEMORY_CACHED); + Cpu::Mair::Attr3::set(mair, Cpu::Mair::DEVICE_MEMORY); + Cpu::Mair::write(mair); + + Cpu::Ttbr::access_t ttbr = Cpu::Ttbr::Baddr::masked((Genode::addr_t)core_pd->table_base); + Cpu::Ttbr0_el1::write(ttbr); + Cpu::Ttbr1_el1::write(ttbr); + + Cpu::Tcr_el1::access_t tcr = 0; + Cpu::Tcr_el1::T0sz::set(tcr, 25); + Cpu::Tcr_el1::T1sz::set(tcr, 25); + Cpu::Tcr_el1::Irgn0::set(tcr, 1); + Cpu::Tcr_el1::Irgn1::set(tcr, 1); + Cpu::Tcr_el1::Orgn0::set(tcr, 1); + Cpu::Tcr_el1::Orgn1::set(tcr, 1); + Cpu::Tcr_el1::Sh0::set(tcr, 0b10); + Cpu::Tcr_el1::Sh1::set(tcr, 0b10); + Cpu::Tcr_el1::Ips::set(tcr, 0b10); + Cpu::Tcr_el1::As::set(tcr, 1); + Cpu::Tcr_el1::write(tcr); + + Cpu::Sctlr_el1::access_t sctlr = Cpu::Sctlr_el1::read(); + Cpu::Sctlr_el1::C::set(sctlr, 1); + Cpu::Sctlr_el1::I::set(sctlr, 1); + Cpu::Sctlr_el1::A::set(sctlr, 0); + Cpu::Sctlr_el1::M::set(sctlr, 1); + Cpu::Sctlr_el1::Sa0::set(sctlr, 1); + Cpu::Sctlr_el1::Sa::set(sctlr, 0); + Cpu::Sctlr_el1::write(sctlr); + + return 0; +} diff --git a/repos/base-hw/src/core/spec/arm_v8/cpu.cc b/repos/base-hw/src/core/spec/arm_v8/cpu.cc new file mode 100644 index 00000000000..57cfbd48028 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v8/cpu.cc @@ -0,0 +1,96 @@ +/* + * \brief ARMv8 cpu context initialization + * \author Stefan Kalkowski + * \date 2017-04-12 + */ + +/* + * Copyright (C) 2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include +#include +#include + + +Genode::Cpu::Context::Context(bool privileged) +{ + Spsr::El::set(pstate, privileged ? 1 : 0); +} + + +void Genode::Cpu::switch_to(Context&, Mmu_context & mmu_context) +{ + if (mmu_context.id() == 0) return; + + if (mmu_context.id() != Ttbr::Asid::get(Ttbr0_el1::read())) + Ttbr0_el1::write(mmu_context.ttbr); +} + + +void Genode::Cpu::mmu_fault(Genode::Cpu::Context &, + Kernel::Thread_fault & fault) +{ + Esr::access_t esr = Esr_el1::read(); + + fault.addr = Far_el1::read(); + + switch (Esr::Iss::Abort::Fsc::get(Esr::Iss::get(esr))) { + case Esr::Iss::Abort::Fsc::TRANSLATION: + fault.type = Kernel::Thread_fault::PAGE_MISSING; + return; + case Esr::Iss::Abort::Fsc::PERMISSION: + fault.type = Esr::Iss::Abort::Write::get(Esr::Iss::get(esr)) + ? Kernel::Thread_fault::WRITE : Kernel::Thread_fault::EXEC; + return; + default: + Genode::raw("MMU-fault not handled ESR=", Genode::Hex(esr)); + fault.type = Kernel::Thread_fault::UNKNOWN; + }; +} + + +using Asid_allocator = Genode::Bit_allocator<65536>; + +static Asid_allocator &alloc() { + return *unmanaged_singleton(); } + + +Genode::Cpu::Mmu_context::Mmu_context(addr_t table) +: ttbr(Ttbr::Baddr::masked(table)) +{ + Ttbr::Asid::set(ttbr, (Genode::uint16_t)alloc().alloc()); +} + + +Genode::Cpu::Mmu_context::~Mmu_context() +{ + alloc().free(id()); +} + + +static constexpr Genode::addr_t line_size = 1 << Board::CACHE_LINE_SIZE_LOG2; +static constexpr Genode::addr_t line_align_mask = ~(line_size - 1); + + +void Genode::Cpu::clean_data_cache_by_virt_region(addr_t base, size_t sz) +{ + addr_t const top = base + sz; + base &= line_align_mask; + for (; base < top; base += line_size) { + asm volatile("dc cvau, %0" :: "r" (base)); } +} + + +void Genode::Cpu::invalidate_instr_cache_by_virt_region(addr_t base, + size_t size) +{ + addr_t const top = base + size; + base &= line_align_mask; + for (; base < top; base += line_size) { + asm volatile("ic ivau, %0" :: "r" (base)); } +} diff --git a/repos/base-hw/src/core/spec/arm_v8/cpu.h b/repos/base-hw/src/core/spec/arm_v8/cpu.h new file mode 100644 index 00000000000..337f332fa61 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v8/cpu.h @@ -0,0 +1,93 @@ +/* + * \brief CPU driver for core + * \author Stefan Kalkowski + * \date 2019-05-10 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CORE__SPEC__ARM_V8__CPU_H_ +#define _CORE__SPEC__ARM_V8__CPU_H_ + +/* Genode includes */ +#include +#include +#include +#include + +namespace Kernel { struct Thread_fault; } + +namespace Genode { + struct Cpu; + using sizet_arithm_t = __uint128_t; + using uint128_t = __uint128_t; +} + +struct Genode::Cpu : Hw::Arm_64_cpu +{ + enum Exception_entry { + SYNC_LEVEL_EL1 = 0x000, + IRQ_LEVEL_EL1 = 0x080, + FIQ_LEVEL_EL1 = 0x100, + SERR_LEVEL_EL1 = 0x180, + SYNC_LEVEL_EL1_EXC_MODE = 0x200, + IRQ_LEVEL_EL1_EXC_MODE = 0x280, + FIQ_LEVEL_EL1_EXC_MODE = 0x300, + SERR_LEVEL_EL1_EXC_MODE = 0x380, + SYNC_LEVEL_EL0 = 0x400, + IRQ_LEVEL_EL0 = 0x480, + FIQ_LEVEL_EL0 = 0x500, + SERR_LEVEL_EL0 = 0x580, + AARCH32_SYNC_LEVEL_EL0 = 0x600, + AARCH32_IRQ_LEVEL_EL0 = 0x680, + AARCH32_FIQ_LEVEL_EL0 = 0x700, + AARCH32_SERR_LEVEL_EL0 = 0x780, + RESET = 0x800 + }; + + struct alignas(16) Fpu_state + { + Genode::uint128_t q[32]; + Genode::uint32_t fpsr; + }; + + struct alignas(8) Context : Cpu_state + { + Genode::uint64_t pstate { }; + Genode::uint64_t exception_type { RESET }; + Fpu_state fpu_state { }; + + Context(bool privileged); + }; + + struct Mmu_context + { + Ttbr::access_t ttbr; + + Mmu_context(addr_t page_table_base); + ~Mmu_context(); + + Genode::uint16_t id() { + return Ttbr::Asid::get(ttbr); } + }; + + void switch_to(Context&, Mmu_context &); + + static void mmu_fault(Context &, Kernel::Thread_fault &); + + /** + * Return kernel name of the executing CPU + */ + static unsigned executing_id() { return 0; } + + + static void clean_data_cache_by_virt_region(addr_t, size_t); + static void invalidate_instr_cache_by_virt_region(addr_t, size_t); +}; + +#endif /* _CORE__SPEC__ARM_V8__CPU_H_ */ diff --git a/repos/base-hw/src/core/spec/arm_v8/crt0.s b/repos/base-hw/src/core/spec/arm_v8/crt0.s new file mode 100644 index 00000000000..9adb479fbd9 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v8/crt0.s @@ -0,0 +1,56 @@ +/** + * \brief Startup code for core on ARM + * \author Stefan Kalkowski + * \date 2015-03-06 + */ + +/* + * Copyright (C) 2015-2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +.section ".text" + + /*********************** + ** kernel entry code ** + ***********************/ + + .global _start + _start: + + /* switch to cpu-specific kernel stack */ + /*adr r1, _kernel_stack + adr r2, _kernel_stack_size + ldr r1, [r1] + ldr r2, [r2] + ldr r2, [r2] + add r0, #1 + mul r0, r0, r2 + add sp, r1, r0*/ + + /* jump into init C code */ + b kernel_init + + _kernel_stack: .quad kernel_stack + _kernel_stack_size: .quad kernel_stack_size + + + /********************************* + ** core main thread entry code ** + *********************************/ + + .global _core_start + _core_start: + + /* create proper environment for main thread */ + bl init_main_thread + + /* apply environment that was created by init_main_thread */ + ldr x0, =init_main_thread_result + ldr x0, [x0] + mov sp, x0 + + /* jump into init C code instead of calling it as it should never return */ + b _main diff --git a/repos/base-hw/src/core/spec/arm_v8/exception_vector.s b/repos/base-hw/src/core/spec/arm_v8/exception_vector.s new file mode 100644 index 00000000000..d96c35e5900 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v8/exception_vector.s @@ -0,0 +1,132 @@ +/* + * \brief Exception vector for ARMv8 + * \author Stefan Kalkowski + * \date 2019-05-11 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +.section .text.crt0 + + .rept 16 + str x0, [sp, #-32] + ldr x0, [sp, #-16] + add x0, x0, #8 + stp x1, x2, [x0], #16 + stp x3, x4, [x0], #16 + stp x5, x6, [x0], #16 + stp x7, x8, [x0], #16 + stp x9, x10, [x0], #16 + stp x11, x12, [x0], #16 + stp x13, x14, [x0], #16 + stp x15, x16, [x0], #16 + stp x17, x18, [x0], #16 + stp x19, x20, [x0], #16 + stp x21, x22, [x0], #16 + stp x23, x24, [x0], #16 + stp x25, x26, [x0], #16 + stp x27, x28, [x0], #16 + stp x29, x30, [x0], #16 + mrs x1, sp_el0 + mrs x2, elr_el1 + mrs x3, spsr_el1 + adr x4, . + and x4, x4, #0xf80 + stp x1, x2, [x0], #16 + stp x3, x4, [x0], #16 + b _kernel_entry + .balign 128 + .endr + +_kernel_entry: + stp q0, q1, [x0], #32 + stp q2, q3, [x0], #32 + stp q4, q5, [x0], #32 + stp q6, q7, [x0], #32 + stp q8, q9, [x0], #32 + stp q10, q11, [x0], #32 + stp q12, q13, [x0], #32 + stp q14, q15, [x0], #32 + stp q16, q17, [x0], #32 + stp q18, q19, [x0], #32 + stp q20, q21, [x0], #32 + stp q22, q23, [x0], #32 + stp q24, q25, [x0], #32 + stp q26, q27, [x0], #32 + stp q28, q29, [x0], #32 + stp q30, q31, [x0], #32 + mrs x2, fpsr + str x2, [x0] + msr fpsr, xzr + ldr x0, [sp, #-16] + ldr x1, [sp, #-32] + str x1, [x0] + bl kernel + + +.section .text + + /******************************* + ** idle loop for idle thread ** + *******************************/ + + .global idle_thread_main + idle_thread_main: + b idle_thread_main + + + /***************************** + ** kernel to userland switch ** + *******************************/ + + .global kernel_to_user_context_switch + kernel_to_user_context_switch: + mov sp, x1 /* reset stack */ + str x0, [sp, #-16] /* store cpu state pointer */ + add x1, x0, #8*31 + ldp x2, x3, [x1], #16 /* load sp, ip */ + ldr x4, [x1], #16 /* load pstate */ + msr sp_el0, x2 + msr elr_el1, x3 + msr spsr_el1, x4 + ldp q0, q1, [x1], #32 + ldp q2, q3, [x1], #32 + ldp q4, q5, [x1], #32 + ldp q6, q7, [x1], #32 + ldp q8, q9, [x1], #32 + ldp q10, q11, [x1], #32 + ldp q12, q13, [x1], #32 + ldp q14, q15, [x1], #32 + ldp q16, q17, [x1], #32 + ldp q18, q19, [x1], #32 + ldp q20, q21, [x1], #32 + ldp q22, q23, [x1], #32 + ldp q24, q25, [x1], #32 + ldp q26, q27, [x1], #32 + ldp q28, q29, [x1], #32 + ldp q30, q31, [x1], #32 + ldr x1, [x1] + msr fpsr, x1 + add x0, x0, #8 + ldp x1, x2, [x0], #16 + ldp x3, x4, [x0], #16 + ldp x5, x6, [x0], #16 + ldp x7, x8, [x0], #16 + ldp x9, x10, [x0], #16 + ldp x11, x12, [x0], #16 + ldp x13, x14, [x0], #16 + ldp x15, x16, [x0], #16 + ldp x17, x18, [x0], #16 + ldp x19, x20, [x0], #16 + ldp x21, x22, [x0], #16 + ldp x23, x24, [x0], #16 + ldp x25, x26, [x0], #16 + ldp x27, x28, [x0], #16 + ldp x29, x30, [x0] + ldr x0, [x0, #-29*8] + eret diff --git a/repos/base-hw/src/core/spec/arm_v8/kernel/cpu.cc b/repos/base-hw/src/core/spec/arm_v8/kernel/cpu.cc new file mode 100644 index 00000000000..6954642b089 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v8/kernel/cpu.cc @@ -0,0 +1,21 @@ +/* + * \brief Kernel cpu driver implementations specific to ARMv8 + * \author Stefan Kalkowski + * \date 2019-05-11 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* core includes */ +#include + +void Kernel::Cpu::_arch_init() +{ + /* enable timer interrupt */ + _pic.unmask(_timer.interrupt_id(), id()); +} diff --git a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc new file mode 100644 index 00000000000..1f021cc3f64 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc @@ -0,0 +1,141 @@ +/* + * \brief Kernel backend for execution contexts in userland + * \author Stefan Kalkowski + * \date 2019-05-11 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include +#include +#include + +#include + +extern "C" void kernel_to_user_context_switch(void *, void *); + +using namespace Kernel; + +void Thread::exception(Cpu & cpu) +{ + switch (regs->exception_type) { + case Cpu::RESET: return; + case Cpu::IRQ_LEVEL_EL0: [[fallthrough]] + case Cpu::IRQ_LEVEL_EL1: [[fallthrough]] + case Cpu::FIQ_LEVEL_EL0: [[fallthrough]] + case Cpu::FIQ_LEVEL_EL1: + _interrupt(cpu.id()); + return; + case Cpu::SYNC_LEVEL_EL0: [[fallthrough]] + case Cpu::SYNC_LEVEL_EL1: + { + Cpu::Esr::access_t esr = Cpu::Esr_el1::read(); + switch (Cpu::Esr::Ec::get(esr)) { + case Cpu::Esr::Ec::SVC: + _call(); + return; + case Cpu::Esr::Ec::INST_ABORT_SAME_LEVEL: [[fallthrough]]; + case Cpu::Esr::Ec::DATA_ABORT_SAME_LEVEL: + Genode::raw("Fault in kernel/core ESR=", Genode::Hex(esr)); + [[fallthrough]]; + case Cpu::Esr::Ec::INST_ABORT_LOW_LEVEL: [[fallthrough]]; + case Cpu::Esr::Ec::DATA_ABORT_LOW_LEVEL: + _mmu_exception(); + return; + default: + Genode::raw("Unknown cpu exception EC=", Cpu::Esr::Ec::get(esr), + " ISS=", Cpu::Esr::Iss::get(esr), + " ip=", (void*)regs->ip); + }; + break; + } + default: + Genode::raw("Exception vector: ", (void*)regs->exception_type, + " not implemented!"); + }; + + while (1) { ; } +} + + +/** + * on ARM with multiprocessing extensions, maintainance operations on TLB, + * and caches typically work coherently across CPUs when using the correct + * coprocessor registers (there might be ARM SoCs where this is not valid, + * with several shareability domains, but until now we do not support them) + */ +void Kernel::Thread::Tlb_invalidation::execute() { }; + + +bool Kernel::Pd::invalidate_tlb(Cpu &, addr_t addr, size_t size) +{ + using namespace Genode; + + /** + * The kernel part of the address space is mapped as global + * therefore we have to invalidate it differently + */ + if (addr >= Hw::Mm::supervisor_exception_vector().base) { + for (addr_t end = addr+size; addr < end; addr += get_page_size()) + asm volatile ("tlbi vaae1is, %0" :: "r" (addr >> 12)); + return false; + } + + /** + * Too big mappings will result in long running invalidation loops, + * just invalidate the whole tlb for the ASID then. + */ + if (size > 8 * get_page_size()) { + asm volatile ("tlbi aside1is, %0" + :: "r" ((uint64_t)mmu_regs.id() << 48)); + return false; + } + + for (addr_t end = addr+size; addr < end; addr += get_page_size()) + asm volatile ("tlbi vae1is, %0" + :: "r" (addr >> 12 | (uint64_t)mmu_regs.id() << 48)); + return false; +} + + +void Kernel::Thread::_call_update_data_region() +{ + Genode::raw(__func__, " not implemented yet!"); +} + + +void Kernel::Thread::_call_update_instr_region() +{ + addr_t const base = (addr_t)user_arg_1(); + size_t const size = (size_t)user_arg_2(); + Cpu::clean_data_cache_by_virt_region(base, size); + Cpu::invalidate_instr_cache_by_virt_region(base, size); +} + + +void Thread::proceed(Cpu & cpu) +{ + cpu.switch_to(*regs, pd().mmu_regs); + kernel_to_user_context_switch((static_cast(&*regs)), + (void*)cpu.stack_start()); +} + + +void Thread::user_ret_time(Kernel::time_t const t) { regs->r[0] = t; } +void Thread::user_arg_0(Kernel::Call_arg const arg) { regs->r[0] = arg; } +void Thread::user_arg_1(Kernel::Call_arg const arg) { regs->r[1] = arg; } +void Thread::user_arg_2(Kernel::Call_arg const arg) { regs->r[2] = arg; } +void Thread::user_arg_3(Kernel::Call_arg const arg) { regs->r[3] = arg; } +void Thread::user_arg_4(Kernel::Call_arg const arg) { regs->r[4] = arg; } + +Kernel::Call_arg Thread::user_arg_0() const { return regs->r[0]; } +Kernel::Call_arg Thread::user_arg_1() const { return regs->r[1]; } +Kernel::Call_arg Thread::user_arg_2() const { return regs->r[2]; } +Kernel::Call_arg Thread::user_arg_3() const { return regs->r[3]; } +Kernel::Call_arg Thread::user_arg_4() const { return regs->r[4]; } diff --git a/repos/base-hw/src/core/spec/arm_v8/translation_table.h b/repos/base-hw/src/core/spec/arm_v8/translation_table.h new file mode 100644 index 00000000000..56fb10f8561 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v8/translation_table.h @@ -0,0 +1,20 @@ +/* + * \brief Translation table definitions for core + * \author Stefan Kalkowski + * \date 2019-05-10 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CORE__SPEC__ARM_V8__TRANSLATION_TABLE_H_ +#define _CORE__SPEC__ARM_V8__TRANSLATION_TABLE_H_ + +/* core includes */ +#include + +#endif /* _CORE__SPEC__ARM_V8__TRANSLATION_TABLE_H_ */ diff --git a/repos/base-hw/src/core/spec/rpi3/board.h b/repos/base-hw/src/core/spec/rpi3/board.h new file mode 100644 index 00000000000..2b3c0e35ce3 --- /dev/null +++ b/repos/base-hw/src/core/spec/rpi3/board.h @@ -0,0 +1,25 @@ +/* + * \brief Board driver for core + * \author Stefan Kalkowski + * \date 2019-05-10 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CORE__SPEC__RPI3__BOARD_H_ +#define _CORE__SPEC__RPI3__BOARD_H_ + +#include + +namespace Board { + using namespace Hw::Rpi3_board; + + static constexpr bool SMP = true; +}; + +#endif /* _CORE__SPEC__RPI3__BOARD_H_ */ diff --git a/repos/base-hw/src/core/spec/rpi3/pic.cc b/repos/base-hw/src/core/spec/rpi3/pic.cc new file mode 100644 index 00000000000..3c464add5dc --- /dev/null +++ b/repos/base-hw/src/core/spec/rpi3/pic.cc @@ -0,0 +1,58 @@ +/* + * \brief Pic implementation specific to Rpi3 + * \author Stefan Kalkowski + * \date 2019-05-27 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include + + +Genode::Pic::Pic() +: Mmio(Platform::mmio_to_virt(Board::LOCAL_IRQ_CONTROLLER_BASE)) { } + + +bool Genode::Pic::take_request(unsigned & irq) +{ + Core0_irq_source::access_t src = read(); + if ((1 << TIMER_IRQ) & src) { + irq = TIMER_IRQ; + return true; + } + return false; +} + + +void Genode::Pic::mask() { } + + +void Genode::Pic::unmask(unsigned const i, unsigned cpu) +{ + if (cpu > 0) + Genode::raw("multi-core irq controller not implemented yet"); + + if (i == TIMER_IRQ) { + write(1); + return; + } + + Genode::raw("irq of peripherals != timer not implemented yet!"); +} + + +void Genode::Pic::mask(unsigned const i) +{ + if (i == TIMER_IRQ) { + write(0); + return; + } + + Genode::raw("irq of peripherals != timer not implemented yet!"); +} diff --git a/repos/base-hw/src/core/spec/rpi3/pic.h b/repos/base-hw/src/core/spec/rpi3/pic.h new file mode 100644 index 00000000000..b28966311e6 --- /dev/null +++ b/repos/base-hw/src/core/spec/rpi3/pic.h @@ -0,0 +1,69 @@ +/* + * \brief Programmable interrupt controller for core + * \author Stefan Kalkowski + * \date 2019-05-27 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CORE__SPEC__RPI3__PIC_H_ +#define _CORE__SPEC__RPI3__PIC_H_ + +#include +#include + +namespace Genode { class Pic; } +namespace Kernel { using Pic = Genode::Pic; } + +class Genode::Pic : Mmio +{ + public: + + enum { + TIMER_IRQ = 1, + NR_OF_IRQ = 64, + + /* + * dummy IPI value on non-SMP platform, + * only used in interrupt reservation within generic code + */ + IPI, + }; + + private: + + + struct Core0_timer_irq_control : Register<0x40, 32> + { + struct Cnt_p_ns_irq : Bitfield<1, 1> {}; + }; + + struct Core1_timer_irq_control : Register<0x44, 32> {}; + struct Core2_timer_irq_control : Register<0x48, 32> {}; + struct Core3_timer_irq_control : Register<0x4c, 32> {}; + + struct Core0_irq_source : Register<0x60, 32> {}; + struct Core1_irq_source : Register<0x64, 32> {}; + struct Core2_irq_source : Register<0x68, 32> {}; + struct Core3_irq_source : Register<0x6c, 32> {}; + + public: + + Pic(); + + void init_cpu_local(); + bool take_request(unsigned &irq); + void finish_request() { } + void mask(); + void unmask(unsigned const i, unsigned); + void mask(unsigned const i); + + static constexpr bool fast_interrupts() { return false; } +}; + +#endif /* _CORE__SPEC__RPI3__PIC_H_ */ diff --git a/repos/base-hw/src/core/spec/rpi3/timer.cc b/repos/base-hw/src/core/spec/rpi3/timer.cc new file mode 100644 index 00000000000..0c5b8d32b45 --- /dev/null +++ b/repos/base-hw/src/core/spec/rpi3/timer.cc @@ -0,0 +1,60 @@ +/* + * \brief Timer driver for core + * \author Stefan Kalkowski + * \date 2019-05-10 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include +#include + +using namespace Kernel; + + +unsigned Timer::interrupt_id() const { return Genode::Pic::TIMER_IRQ; } + + +unsigned long Timer_driver::_freq() { return Genode::Cpu::Cntfrq_el0::read(); } + + +Timer_driver::Timer_driver(unsigned) : ticks_per_ms(_freq() / 1000) +{ + Cpu::Cntp_ctl_el0::access_t ctl = 0; + Cpu::Cntp_ctl_el0::Enable::set(ctl, 1); + Cpu::Cntp_ctl_el0::write(ctl); +} + + +void Timer::_start_one_shot(time_t const ticks) +{ + _driver.last_time = Cpu::Cntpct_el0::read(); + Cpu::Cntp_tval_el0::write(ticks); + Cpu::Cntp_ctl_el0::access_t ctl = Cpu::Cntp_ctl_el0::read(); + Cpu::Cntp_ctl_el0::Istatus::set(ctl, 0); + Cpu::Cntp_ctl_el0::write(ctl); +} + + +time_t Timer::_duration() const +{ + return Cpu::Cntpct_el0::read() - _driver.last_time; +} + + +time_t Timer::ticks_to_us(time_t const ticks) const { + return Genode::timer_ticks_to_us(ticks, _driver.ticks_per_ms); } + + +time_t Timer::us_to_ticks(time_t const us) const { + return (us / 1000) * _driver.ticks_per_ms; } + + +time_t Timer::_max_value() const { + return _driver.ticks_per_ms * 5000; } diff --git a/repos/base-hw/src/core/spec/rpi3/timer_driver.h b/repos/base-hw/src/core/spec/rpi3/timer_driver.h new file mode 100644 index 00000000000..3a72a72c5f1 --- /dev/null +++ b/repos/base-hw/src/core/spec/rpi3/timer_driver.h @@ -0,0 +1,34 @@ +/* + * \brief Timer driver for core + * \author Stefan Kalkowski + * \date 2019-05-10 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Kernel OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _TIMER_DRIVER_H_ +#define _TIMER_DRIVER_H_ + +/* base-hw includes */ +#include + +namespace Kernel { class Timer_driver; } + + +struct Kernel::Timer_driver +{ + unsigned long _freq(); + + unsigned const ticks_per_ms; + + time_t last_time { 0 }; + + Timer_driver(unsigned); +}; + +#endif /* _TIMER_DRIVER_H_ */ diff --git a/repos/base-hw/src/include/hw/spec/arm_64/cpu.h b/repos/base-hw/src/include/hw/spec/arm_64/cpu.h new file mode 100644 index 00000000000..1b5684ee941 --- /dev/null +++ b/repos/base-hw/src/include/hw/spec/arm_64/cpu.h @@ -0,0 +1,179 @@ +/* + * \brief CPU definitions for ARM 64bit + * \author Stefan Kalkowski + * \date 2019-05-22 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _SRC__LIB__HW__SPEC__ARM_64__CPU_H_ +#define _SRC__LIB__HW__SPEC__ARM_64__CPU_H_ + +#define SYSTEM_REGISTER(sz, name, reg, ...) \ + struct name : Genode::Register \ + { \ + static access_t read() \ + { \ + access_t v; \ + asm volatile ("mrs %0, " #reg : "=r" (v)); \ + return v; \ + } \ + \ + static void write(access_t const v) { \ + asm volatile ("msr " #reg ", %0" :: "r" (v)); } \ + \ + __VA_ARGS__; \ + }; + + +namespace Hw { struct Arm_64_cpu; } + +struct Hw::Arm_64_cpu +{ + SYSTEM_REGISTER(64, Id_pfr0, id_aa64pfr0_el1, + struct El2 : Bitfield<8, 4> {}; + struct El3 : Bitfield<8, 4> {}; + ); + + SYSTEM_REGISTER(64, Cntfrq_el0, cntfrq_el0); + + SYSTEM_REGISTER(64, Current_el, currentel, + enum Level { EL0, EL1, EL2, EL3 }; + struct El : Bitfield<2, 2> {}; + ); + + struct Esr : Genode::Register<64> + { + struct Ec : Bitfield<26, 6> + { + enum Exception { + SVC = 0b010101, + INST_ABORT_LOW_LEVEL = 0b100000, + INST_ABORT_SAME_LEVEL = 0b100001, + DATA_ABORT_LOW_LEVEL = 0b100100, + DATA_ABORT_SAME_LEVEL = 0b100101, + }; + }; + + struct Iss : Bitfield<0, 25> + { + struct Abort : Register<32> + { + struct Level : Bitfield<0, 2> {}; + struct Fsc : Bitfield<2, 4> + { + enum Fault { + ADDR_SIZE, + TRANSLATION, + ACCESS_FLAG, + PERMISSION + }; + enum Data_abort_fault { ALIGNMENT = 8 }; + }; + struct Write : Bitfield<6, 1> {}; + }; + }; + }; + + SYSTEM_REGISTER(64, Esr_el1, esr_el1); + SYSTEM_REGISTER(64, Far_el1, far_el1); + + SYSTEM_REGISTER(64, Hcr, hcr_el2, + struct Rw : Bitfield<31, 1> {}; + ); + + SYSTEM_REGISTER(64, Mair, mair_el1, + enum Attributes { + DEVICE_MEMORY = 0x04, + NORMAL_MEMORY_UNCACHED = 0x44, + NORMAL_MEMORY_CACHED = 0xff, + }; + struct Attr0 : Bitfield<0, 8> {}; + struct Attr1 : Bitfield<8, 8> {}; + struct Attr2 : Bitfield<16, 8> {}; + struct Attr3 : Bitfield<24, 8> {}; + ); + + SYSTEM_REGISTER(64, Scr, scr_el3, + struct Ns : Bitfield<0, 1> {}; + struct Smd : Bitfield<7, 1> {}; + struct Rw : Bitfield<10, 1> {}; + ); + + SYSTEM_REGISTER(64, Sctlr_el1, sctlr_el1, + struct M : Bitfield<0, 1> { }; + struct A : Bitfield<1, 1> { }; + struct C : Bitfield<2, 1> { }; + struct Sa : Bitfield<3, 1> { }; + struct Sa0 : Bitfield<4, 1> { }; + struct I : Bitfield<12, 1> { }; + ); + + struct Spsr : Genode::Register<64> + { + struct Sp : Bitfield<0, 1> {}; + struct El : Bitfield<2, 2> {}; + struct F : Bitfield<6, 1> {}; + struct I : Bitfield<7, 1> {}; + struct A : Bitfield<8, 1> {}; + struct D : Bitfield<9, 1> {}; + }; + + SYSTEM_REGISTER(64, Spsr_el2, spsr_el2); + SYSTEM_REGISTER(64, Spsr_el3, spsr_el3); + + SYSTEM_REGISTER(64, Tcr_el1, tcr_el1, + struct T0sz : Bitfield<0, 6> { }; + struct Epd0 : Bitfield<7, 1> { }; + struct Irgn0 : Bitfield<8, 2> { }; + struct Orgn0 : Bitfield<10, 2> { }; + struct Sh0 : Bitfield<12, 2> { }; + struct Tg0 : Bitfield<14, 2> { }; + struct T1sz : Bitfield<16, 6> { }; + struct A1 : Bitfield<22, 1> { }; + struct Epd1 : Bitfield<23, 1> { }; + struct Irgn1 : Bitfield<24, 2> { }; + struct Orgn1 : Bitfield<26, 2> { }; + struct Sh1 : Bitfield<28, 2> { }; + struct Tg1 : Bitfield<30, 2> { }; + struct Ips : Bitfield<32, 3> { }; + struct As : Bitfield<36, 1> { }; + ); + + struct Ttbr : Genode::Register<64> + { + struct Baddr : Bitfield<0, 48> { }; + struct Asid : Bitfield<48, 16> { }; + }; + + SYSTEM_REGISTER(64, Ttbr0_el1, ttbr0_el1); + SYSTEM_REGISTER(64, Ttbr1_el1, ttbr1_el1); + + SYSTEM_REGISTER(64, Vbar_el1, vbar_el1); + + static inline unsigned current_privilege_level() { + return Current_el::El::get(Current_el::read()); } + + + /***************************** + ** Generic timer interface ** + *****************************/ + + SYSTEM_REGISTER(32, Cntp_ctl_el0, cntp_ctl_el0, + struct Enable : Bitfield<0, 1> {}; + struct Istatus : Bitfield<2, 1> {}; + ); + + SYSTEM_REGISTER(64, Cntpct_el0, cntpct_el0); + SYSTEM_REGISTER(32, Cntp_tval_el0, cntp_tval_el0); +}; + + +#undef SYSTEM_REGISTER + +#endif /* _SRC__LIB__HW__SPEC__ARM_64__CPU_H_ */ diff --git a/repos/base-hw/src/include/hw/spec/arm_64/rpi3_board.h b/repos/base-hw/src/include/hw/spec/arm_64/rpi3_board.h new file mode 100644 index 00000000000..9d8d841a8fe --- /dev/null +++ b/repos/base-hw/src/include/hw/spec/arm_64/rpi3_board.h @@ -0,0 +1,41 @@ +/* + * \brief Board definitions for Raspberry Pi 3 + * \author Stefan Kalkowski + * \date 2019-05-10 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _SRC__INCLUDE__HW__SPEC__ARM__RPI3__BOARD_H_ +#define _SRC__INCLUDE__HW__SPEC__ARM__RPI3__BOARD_H_ + +#include +#include + +namespace Hw::Rpi3_board { + using Serial = Genode::Bcm2835_mini_uart; + + enum { + RAM_BASE = 0, + RAM_SIZE = 0x20000000, + + UART_BASE = 0x3f215000, + UART_SIZE = 0x1000, + UART_CLOCK = 250000000, + + IRQ_CONTROLLER_BASE = 0x3f00b000, + IRQ_CONTROLLER_SIZE = 0x1000, + + LOCAL_IRQ_CONTROLLER_BASE = 0x40000000, + LOCAL_IRQ_CONTROLLER_SIZE = 0x1000, + + CACHE_LINE_SIZE_LOG2 = 6, + }; +}; + +#endif /* _SRC__INCLUDE__HW__SPEC__ARM__RPI3__BOARD_H_ */ diff --git a/repos/base-hw/src/lib/base/arm_64/kernel/interface.cc b/repos/base-hw/src/lib/base/arm_64/kernel/interface.cc new file mode 100644 index 00000000000..5a1df3f4164 --- /dev/null +++ b/repos/base-hw/src/lib/base/arm_64/kernel/interface.cc @@ -0,0 +1,125 @@ +/* + * \brief Interface between kernel and userland + * \author Stefan Kalkowski + * \date 2019-05-09 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* Genode includes */ +#include + +using namespace Kernel; + + +/************************************ + ** Helper macros for kernel calls ** + ************************************/ + +#define CALL_1_FILL_ARG_REGS \ + register Call_arg arg_0_reg asm("x0") = arg_0; + +#define CALL_2_FILL_ARG_REGS \ + CALL_1_FILL_ARG_REGS \ + register Call_arg arg_1_reg asm("x1") = arg_1; + +#define CALL_3_FILL_ARG_REGS \ + CALL_2_FILL_ARG_REGS \ + register Call_arg arg_2_reg asm("x2") = arg_2; + +#define CALL_4_FILL_ARG_REGS \ + CALL_3_FILL_ARG_REGS \ + register Call_arg arg_3_reg asm("x3") = arg_3; + +#define CALL_5_FILL_ARG_REGS \ + CALL_4_FILL_ARG_REGS \ + register Call_arg arg_4_reg asm("x4") = arg_4; + +#define CALL_6_FILL_ARG_REGS \ + CALL_5_FILL_ARG_REGS \ + register Call_arg arg_5_reg asm("x5") = arg_5; + +#define CALL_1_SWI "svc 0\n" : "+r" (arg_0_reg) +#define CALL_2_SWI CALL_1_SWI: "r" (arg_1_reg) +#define CALL_3_SWI CALL_2_SWI, "r" (arg_2_reg) +#define CALL_4_SWI CALL_3_SWI, "r" (arg_3_reg) +#define CALL_5_SWI CALL_4_SWI, "r" (arg_4_reg) +#define CALL_6_SWI CALL_5_SWI, "r" (arg_5_reg) + + +/****************** + ** Kernel calls ** + ******************/ + +Call_ret_64 Kernel::call64(Call_arg arg_0) +{ + return Kernel::call(arg_0); +} + + +Call_ret Kernel::call(Call_arg arg_0) +{ + CALL_1_FILL_ARG_REGS + asm volatile(CALL_1_SWI); + return arg_0_reg; +} + + +Call_ret Kernel::call(Call_arg arg_0, + Call_arg arg_1) +{ + CALL_2_FILL_ARG_REGS + asm volatile(CALL_2_SWI); + return arg_0_reg; +} + + +Call_ret Kernel::call(Call_arg arg_0, + Call_arg arg_1, + Call_arg arg_2) +{ + CALL_3_FILL_ARG_REGS + asm volatile(CALL_3_SWI); + return arg_0_reg; +} + + +Call_ret Kernel::call(Call_arg arg_0, + Call_arg arg_1, + Call_arg arg_2, + Call_arg arg_3) +{ + CALL_4_FILL_ARG_REGS + asm volatile(CALL_4_SWI); + return arg_0_reg; +} + + +Call_ret Kernel::call(Call_arg arg_0, + Call_arg arg_1, + Call_arg arg_2, + Call_arg arg_3, + Call_arg arg_4) +{ + CALL_5_FILL_ARG_REGS + asm volatile(CALL_5_SWI); + return arg_0_reg; +} + + +Call_ret Kernel::call(Call_arg arg_0, + Call_arg arg_1, + Call_arg arg_2, + Call_arg arg_3, + Call_arg arg_4, + Call_arg arg_5) +{ + CALL_6_FILL_ARG_REGS + asm volatile(CALL_6_SWI); + return arg_0_reg; +} diff --git a/repos/base/include/drivers/defs/rpi.h b/repos/base/include/drivers/defs/rpi.h index ef7594cde69..3374a734e54 100644 --- a/repos/base/include/drivers/defs/rpi.h +++ b/repos/base/include/drivers/defs/rpi.h @@ -42,6 +42,11 @@ namespace Rpi { PL011_0_MMIO_SIZE = 0x1000, PL011_0_CLOCK = 3000000, + PL011_1_IRQ = 61, + PL011_1_MMIO_BASE = 0x20215000, + PL011_1_MMIO_SIZE = 0x1000, + PL011_1_CLOCK = 3000000, + IRQ_CONTROLLER_BASE = 0x2000b200, IRQ_CONTROLLER_SIZE = 0x100, diff --git a/tool/run/boot_dir/hw b/tool/run/boot_dir/hw index 3fa5aaa2bd2..f7d6e107a8d 100644 --- a/tool/run/boot_dir/hw +++ b/tool/run/boot_dir/hw @@ -19,6 +19,7 @@ proc bootstrap_link_address { } { if {[have_spec "zynq"]} { return "0x00100000" } if {[have_spec "riscv"]} { return "0x81000000" } if {[have_spec "rpi"]} { return "0x00800000" } + if {[have_spec "rpi3"]} { return "0x00800000" } if {[have_spec "nit6_solox"]} { return "0x88000000" } puts "unknown platform no linker address known" @@ -154,7 +155,7 @@ proc run_boot_dir {binaries} { run_image [run_dir]/boot/image.elf # set symbolic link to image.elf file in TFTP directory for PXE boot - if {[have_spec arm] && [have_include "load/tftp"]} { + if {[expr [have_spec arm] || [have_spec arm_64]] && [have_include "load/tftp"]} { exec ln -sf [run_dir]/boot/image.elf [load_tftp_base_dir][load_tftp_offset_dir] if {[have_include "image/uboot"]} { From e337b844e558b8c50eb06a92271e7bbfc079b020 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Tue, 21 May 2019 14:01:26 +0200 Subject: [PATCH 06/67] depot: support for ARM 64-bit for base-foc on rpi3 issue #3407 --- repos/base-foc/lib/mk/l4_pkg.inc | 2 +- repos/base-foc/lib/mk/spec/rpi3/syscall-foc.mk | 2 +- repos/base-foc/recipes/src/base-foc-rpi3/README | 7 +++++++ repos/base-foc/recipes/src/base-foc-rpi3/content.mk | 3 +++ repos/base-foc/recipes/src/base-foc-rpi3/hash | 1 + repos/base-foc/recipes/src/base-foc-rpi3/used_apis | 1 + repos/base-foc/recipes/src/base-foc_content.inc | 2 +- tool/run/boot_dir/foc | 3 ++- tool/run/depot.inc | 1 + 9 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 repos/base-foc/recipes/src/base-foc-rpi3/README create mode 100644 repos/base-foc/recipes/src/base-foc-rpi3/content.mk create mode 100644 repos/base-foc/recipes/src/base-foc-rpi3/hash create mode 100644 repos/base-foc/recipes/src/base-foc-rpi3/used_apis diff --git a/repos/base-foc/lib/mk/l4_pkg.inc b/repos/base-foc/lib/mk/l4_pkg.inc index 6e6268356c1..3ad13652dfa 100644 --- a/repos/base-foc/lib/mk/l4_pkg.inc +++ b/repos/base-foc/lib/mk/l4_pkg.inc @@ -25,7 +25,7 @@ ifeq ($(filter-out $(SPECS),arm_v6),) endif ifeq ($(filter-out $(SPECS),arm_v8),) - L4_BUILD_ARCH := arm_armv8a + L4_BUILD_ARCH := arm64_armv8a endif diff --git a/repos/base-foc/lib/mk/spec/rpi3/syscall-foc.mk b/repos/base-foc/lib/mk/spec/rpi3/syscall-foc.mk index fdc747f31b3..33e9dfffa00 100644 --- a/repos/base-foc/lib/mk/spec/rpi3/syscall-foc.mk +++ b/repos/base-foc/lib/mk/spec/rpi3/syscall-foc.mk @@ -1,6 +1,6 @@ L4_CONFIG := $(call select_from_repositories,config/rpi3.user) -L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/rpi3-build/bin/arm_armv8 +L4_BIN_DIR := $(LIB_CACHE_DIR)/syscall-foc/rpi3-build/bin/arm64_armv8a L4_INC_TARGETS = arm64/l4/sys \ arm64/l4f/l4/sys \ diff --git a/repos/base-foc/recipes/src/base-foc-rpi3/README b/repos/base-foc/recipes/src/base-foc-rpi3/README new file mode 100644 index 00000000000..c19a0dd5b9a --- /dev/null +++ b/repos/base-foc/recipes/src/base-foc-rpi3/README @@ -0,0 +1,7 @@ +This archive contains the Fiasco.OC-specific part of Genode. + +It also contains the source code of the Fiasco.OC kernel in the +'src/kernel/foc' directory. + +Please note that Fiasco.OC has a license distinct from Genode. Fiasco.OC's +license can be found at 'src/kernel/foc/COPYING-GPL-2'. diff --git a/repos/base-foc/recipes/src/base-foc-rpi3/content.mk b/repos/base-foc/recipes/src/base-foc-rpi3/content.mk new file mode 100644 index 00000000000..9908a2946a3 --- /dev/null +++ b/repos/base-foc/recipes/src/base-foc-rpi3/content.mk @@ -0,0 +1,3 @@ +BOARD := rpi3 + +include $(GENODE_DIR)/repos/base-foc/recipes/src/base-foc_content.inc diff --git a/repos/base-foc/recipes/src/base-foc-rpi3/hash b/repos/base-foc/recipes/src/base-foc-rpi3/hash new file mode 100644 index 00000000000..fef37f5405f --- /dev/null +++ b/repos/base-foc/recipes/src/base-foc-rpi3/hash @@ -0,0 +1 @@ +2019-05-21 9649f5d5574031c45012fef7e2407a62e6c50954 diff --git a/repos/base-foc/recipes/src/base-foc-rpi3/used_apis b/repos/base-foc/recipes/src/base-foc-rpi3/used_apis new file mode 100644 index 00000000000..df967b96a57 --- /dev/null +++ b/repos/base-foc/recipes/src/base-foc-rpi3/used_apis @@ -0,0 +1 @@ +base diff --git a/repos/base-foc/recipes/src/base-foc_content.inc b/repos/base-foc/recipes/src/base-foc_content.inc index 239c45a8a96..cfc368095ee 100644 --- a/repos/base-foc/recipes/src/base-foc_content.inc +++ b/repos/base-foc/recipes/src/base-foc_content.inc @@ -26,7 +26,7 @@ src/kernel/foc: src/kernel cp -r $(KERNEL_PORT_DIR)/src/kernel/foc/* $@ content: - for spec in x86_32 x86_64 arm; do \ + for spec in x86_32 x86_64 arm arm_64; do \ mv lib/mk/spec/$$spec/ld-foc.mk lib/mk/spec/$$spec/ld.mk; \ done; sed -i "s/ld-foc/ld/" src/lib/ld/foc/target.mk diff --git a/tool/run/boot_dir/foc b/tool/run/boot_dir/foc index 2b101614a6e..6381c51e3ea 100644 --- a/tool/run/boot_dir/foc +++ b/tool/run/boot_dir/foc @@ -12,7 +12,7 @@ proc core_link_address { } { if {[have_spec x86 ]} { return "0x01100000" } if {[have_spec arndale ]} { return "0x80100000" } if {[have_spec rpi ]} { return "0x00800000" } - if {[have_spec rpi3 ]} { return "0x00800000" } + if {[have_spec rpi3 ]} { return "0x02000000" } if {[have_spec panda ]} { return "0xa0000000" } if {[have_spec pbxa9 ]} { return "0x76000000" } if {[have_spec odroid_x2]} { return "0x80100000" } @@ -227,6 +227,7 @@ proc base_src { } { if {[have_spec x86]} { return base-foc-pc } if {[have_spec pbxa9]} { return base-foc-pbxa9 } if {[have_spec arndale]} { return base-foc-arndale } + if {[have_spec rpi3]} { return base-foc-rpi3 } if {[have_spec imx6q_sabrelite]} { return base-foc-imx6q_sabrelite } if {[have_spec imx7d_sabre]} { return base-foc-imx7d_sabre } diff --git a/tool/run/depot.inc b/tool/run/depot.inc index eb9fbe814d3..9e804c99315 100644 --- a/tool/run/depot.inc +++ b/tool/run/depot.inc @@ -23,6 +23,7 @@ proc depot_spec { } { if {[have_spec x86_64]} { return "x86_64" } if {[have_spec arm_v6]} { return "arm_v6" } if {[have_spec arm_v7a]} { return "arm_v7a" } + if {[have_spec arm_v8a]} { return "arm_v8a" } } From c107aba9138165c9ffbc09393edaa6e4b20440c2 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Tue, 21 May 2019 14:02:45 +0200 Subject: [PATCH 07/67] depot_autopilot: add ARM 64-bit support issue #3407 --- repos/gems/run/depot_autopilot.run | 8 ++++++-- repos/gems/src/app/depot_autopilot/config.xsd | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/repos/gems/run/depot_autopilot.run b/repos/gems/run/depot_autopilot.run index a8fd2be9461..ebcda52bef7 100644 --- a/repos/gems/run/depot_autopilot.run +++ b/repos/gems/run/depot_autopilot.run @@ -457,7 +457,7 @@ proc prepare_to_run_genode { } { set serial_id -1 set timeout 40 - append qemu_args "-m 768 -nographic -serial mon:stdio " + append qemu_args "-m 768 -nographic " } @@ -630,7 +630,8 @@ proc exit {{status 0}} { # if {[expr ![have_spec x86] && \ ![have_spec arm_v6] && \ - ![have_spec arm_v7a]] || \ + ![have_spec arm_v7a] && \ + ![have_spec arm_v8a]] || \ [expr [have_spec foc] && [have_spec panda]]} \ { puts "\n Run script is not supported on this platform. \n"; @@ -769,6 +770,9 @@ set skip_test(test-solo5) [expr ![have_spec x86_64]] set skip_test(test-spark_exception) [expr [have_spec arm]] set skip_test(test-tcp_bulk_lwip) [expr ![have_spec x86]] set skip_test(test-tcp_bulk_lxip) [expr ![have_spec x86]] +set skip_test(test-xml_generator) [expr [have_spec arm_v8a]] +set skip_test(gcov) [expr [have_spec arm_v8a]] +set skip_test(test-rust) [expr [have_spec arm_v8a]] # # FIXME diff --git a/repos/gems/src/app/depot_autopilot/config.xsd b/repos/gems/src/app/depot_autopilot/config.xsd index d88bbd6458e..abc5957068f 100644 --- a/repos/gems/src/app/depot_autopilot/config.xsd +++ b/repos/gems/src/app/depot_autopilot/config.xsd @@ -18,6 +18,7 @@ + From 2b14284e2b8a4e00f544565da1bc19da29a4ba98 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 22 May 2019 12:45:27 +0200 Subject: [PATCH 08/67] libc: add ARM-64 bit to recipe issue #3407 --- repos/libports/recipes/src/libc/content.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/libports/recipes/src/libc/content.mk b/repos/libports/recipes/src/libc/content.mk index dec7c005f6f..bc541f9dd5c 100644 --- a/repos/libports/recipes/src/libc/content.mk +++ b/repos/libports/recipes/src/libc/content.mk @@ -22,7 +22,7 @@ include/libc-plugin include/libc/sys/ucontext.h: lib/mk: mkdir -p $@ cp $(addprefix $(REP_DIR)/$@/,libc_* libc.mk libc-* libm.inc) $@ - for spec in x86_32 x86_64 arm; do \ + for spec in x86_32 x86_64 arm arm_64; do \ mkdir -p $@/spec/$$spec; \ cp $(addprefix $(REP_DIR)/$@/spec/$$spec/,libc-* libc.mk libm.mk) $@/spec/$$spec/; done From 59347d256058801ff668837b941937f231f54647 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 29 May 2019 13:26:47 +0200 Subject: [PATCH 09/67] stdcxx: make linkable for ARM 64-Bit 'typeinfo for std::invalid_argument' was not found when using 'V' (weak object) issue #3407 --- repos/libports/lib/symbols/stdcxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/libports/lib/symbols/stdcxx b/repos/libports/lib/symbols/stdcxx index 60a78508231..4e456572250 100644 --- a/repos/libports/lib/symbols/stdcxx +++ b/repos/libports/lib/symbols/stdcxx @@ -629,7 +629,7 @@ _ZTISo V _ZTISt11regex_error V _ZTISt13runtime_error V _ZTISt15basic_streambufIcSt11char_traitsIcEE V -_ZTISt16invalid_argument V +_ZTISt16invalid_argument W _ZTISt5ctypeIcE V _ZTISt7codecvtIcc11__mbstate_tE V _ZTISt8ios_base V From e43b848ac88aeb1d3d3392cfd71f2929d7f1aa26 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 29 May 2019 13:28:47 +0200 Subject: [PATCH 10/67] jitterentropy: ARM 64-Bit version issue #3407 --- .../lib/import/import-jitterentropy.mk | 2 ++ .../lib/mk/spec/arm_v8/jitterentropy.mk | 5 ++++ .../recipes/api/jitterentropy/content.mk | 2 +- .../arm_v8/jitterentropy-base-genode-nstime.h | 25 +++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 repos/libports/lib/mk/spec/arm_v8/jitterentropy.mk create mode 100644 repos/libports/src/lib/jitterentropy/spec/arm_v8/jitterentropy-base-genode-nstime.h diff --git a/repos/libports/lib/import/import-jitterentropy.mk b/repos/libports/lib/import/import-jitterentropy.mk index a0b5140527e..9fb6b5703b1 100644 --- a/repos/libports/lib/import/import-jitterentropy.mk +++ b/repos/libports/lib/import/import-jitterentropy.mk @@ -6,6 +6,8 @@ else ifeq ($(filter-out $(SPECS),arm_v6),) TARGET_CPUARCH=arm_v6 else ifeq ($(filter-out $(SPECS),arm_v7),) TARGET_CPUARCH=arm_v7 +else ifeq ($(filter-out $(SPECS),arm_v8),) + TARGET_CPUARCH=arm_v8 endif ifeq ($(CONTRIB_DIR),) diff --git a/repos/libports/lib/mk/spec/arm_v8/jitterentropy.mk b/repos/libports/lib/mk/spec/arm_v8/jitterentropy.mk new file mode 100644 index 00000000000..9b3dc833c53 --- /dev/null +++ b/repos/libports/lib/mk/spec/arm_v8/jitterentropy.mk @@ -0,0 +1,5 @@ +INC_DIR += $(REP_DIR)/src/lib/jitterentropy/spec/arm_v8 + +include $(REP_DIR)/lib/mk/jitterentropy.inc + +CC_CXX_WARN_STRICT = diff --git a/repos/libports/recipes/api/jitterentropy/content.mk b/repos/libports/recipes/api/jitterentropy/content.mk index 0567c222fef..9a355ec0c80 100644 --- a/repos/libports/recipes/api/jitterentropy/content.mk +++ b/repos/libports/recipes/api/jitterentropy/content.mk @@ -1,6 +1,6 @@ MIRROR_FROM_REP_DIR := lib/mk/jitterentropy.inc \ lib/import/import-jitterentropy.mk \ - $(foreach SPEC,arm_v6 arm_v7 x86_32 x86_64,\ + $(foreach SPEC,arm_v6 arm_v7 arm_v8 x86_32 x86_64,\ lib/mk/spec/$(SPEC)/jitterentropy.mk) \ src/lib/jitterentropy diff --git a/repos/libports/src/lib/jitterentropy/spec/arm_v8/jitterentropy-base-genode-nstime.h b/repos/libports/src/lib/jitterentropy/spec/arm_v8/jitterentropy-base-genode-nstime.h new file mode 100644 index 00000000000..1baa46406fa --- /dev/null +++ b/repos/libports/src/lib/jitterentropy/spec/arm_v8/jitterentropy-base-genode-nstime.h @@ -0,0 +1,25 @@ +/* + * \brief Time backend for jitterentropy library + * \author Sebastian Sumpf + * \date 2014-05-29 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _JITTERENTROPY_ARM_V8__BASE_GENODE_NSTIME_H_ +#define _JITTERENTROPY_ARM_V8__BASE_GENODE_NSTIME_H_ + +static inline void jent_get_nstime(__u64 *out) +{ + uint64_t t; + /* cycle counter */ + asm volatile("mrs %0, pmccntr_el0" : "=r" (t)); + *out = t; +} + +#endif /* _JITTERENTROPY_ARM_V8_BASE_GENODE_NSTIME_H */ From 790a57041ca7128d5431985adf08376c8a9c2e0b Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 29 May 2019 13:29:57 +0200 Subject: [PATCH 11/67] base: add ARM 64-Bit to base API issue #3407 --- repos/base/recipes/api/base/content.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/base/recipes/api/base/content.mk b/repos/base/recipes/api/base/content.mk index fe80260d9b2..0ff64b1a932 100644 --- a/repos/base/recipes/api/base/content.mk +++ b/repos/base/recipes/api/base/content.mk @@ -1,7 +1,7 @@ content: include mk/spec lib LICENSE # architectures, for which a 'trace/timestamp.h' header is available -ARCHS := riscv arm_v6 arm_v7 x86_32 x86_64 +ARCHS := riscv arm_v6 arm_v7 arm_64 x86_32 x86_64 include: mkdir -p include From ef8140cce5bd00d84e621042222891e625f35a1c Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 29 May 2019 13:40:53 +0200 Subject: [PATCH 12/67] lxip: ARM 64-Bit support issue #3407 --- .../lib/import/import-lxip_include.mk | 3 ++ .../src/include/spec/arm_64/lx_emul/barrier.h | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 repos/dde_linux/src/include/spec/arm_64/lx_emul/barrier.h diff --git a/repos/dde_linux/lib/import/import-lxip_include.mk b/repos/dde_linux/lib/import/import-lxip_include.mk index 0c06540bfe3..3794facf9ad 100644 --- a/repos/dde_linux/lib/import/import-lxip_include.mk +++ b/repos/dde_linux/lib/import/import-lxip_include.mk @@ -21,6 +21,9 @@ ifeq ($(filter-out $(SPECS),arm),) ARCH_SRC_INC_DIR += $(REP_DIR)/src/include/spec/arm_v7 endif # arm_v7 endif # arm +ifeq ($(filter-out $(SPECS),arm_64),) + ARCH_SRC_INC_DIR += $(REP_DIR)/src/include/spec/arm_64 +endif # arm_v7 # # The order of include-search directories is important, we need to look into diff --git a/repos/dde_linux/src/include/spec/arm_64/lx_emul/barrier.h b/repos/dde_linux/src/include/spec/arm_64/lx_emul/barrier.h new file mode 100644 index 00000000000..76f0e6d8532 --- /dev/null +++ b/repos/dde_linux/src/include/spec/arm_64/lx_emul/barrier.h @@ -0,0 +1,31 @@ +/* + * \brief ARMv8-specific part of the Linux API emulation + * \author Christian Prochaska + * \date 2014-05-28 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +/******************* + ** asm/barrier.h ** + *******************/ + +#define mb() asm volatile ("dsb ld": : :"memory") +#define rmb() mb() +#define wmb() asm volatile ("dsb st": : :"memory") + +/* + * This is the "safe" implementation as needed for a configuration + * with bufferable DMA memory and SMP enabled. + */ + +#define smp_mb() asm volatile ("dmb ish": : :"memory") +#define smp_rmb() smp_mb() +#define smp_wmb() asm volatile ("dmb ishst": : :"memory") + +static inline void barrier() { asm volatile ("": : :"memory"); } From 1b489820a9042fab4d7c55bbd4072eb2d69c4954 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Tue, 4 Jun 2019 21:17:10 +0200 Subject: [PATCH 13/67] base: timestamp support for ARM 64-Bit issue #3407 --- repos/base/include/spec/arm_64/trace/timestamp.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/repos/base/include/spec/arm_64/trace/timestamp.h b/repos/base/include/spec/arm_64/trace/timestamp.h index 972debde8e7..0dd064ed7d8 100644 --- a/repos/base/include/spec/arm_64/trace/timestamp.h +++ b/repos/base/include/spec/arm_64/trace/timestamp.h @@ -1,6 +1,7 @@ /* * \brief Trace timestamp * \author Stefan Kalkowski + * \author Sebastian Sumpf * \date 2019-03-25 */ @@ -22,7 +23,10 @@ namespace Genode { namespace Trace { inline Timestamp timestamp() { - return 0; + uint64_t t; + /* cycle counter */ + asm volatile("mrs %0, pmccntr_el0" : "=r" (t)); + return t; } } } From 3a2de0d9a33336cc407ab1beda0131cd0a491766 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 5 Jun 2019 15:26:46 +0200 Subject: [PATCH 14/67] depot_autopilot: limit dynamic to 286 MB * also set test-libc to 256 MB (seems to be enough) * fixes memory issues on platforms with 512 MB RAM issue #3407 --- repos/gems/run/depot_autopilot.run | 2 +- repos/libports/recipes/pkg/test-libc/runtime | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/repos/gems/run/depot_autopilot.run b/repos/gems/run/depot_autopilot.run index ebcda52bef7..d2d572b29e3 100644 --- a/repos/gems/run/depot_autopilot.run +++ b/repos/gems/run/depot_autopilot.run @@ -412,7 +412,7 @@ proc prepare_to_run_genode { } { - + diff --git a/repos/libports/recipes/pkg/test-libc/runtime b/repos/libports/recipes/pkg/test-libc/runtime index f66309ff8ca..776d415cb40 100644 --- a/repos/libports/recipes/pkg/test-libc/runtime +++ b/repos/libports/recipes/pkg/test-libc/runtime @@ -1,4 +1,4 @@ - + @@ -34,7 +34,7 @@ - + From 186c35bb0932a5d125a36d0250a721c6333df34e Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 11 Jun 2019 14:57:58 +0200 Subject: [PATCH 15/67] depot: recipe for base-hw-rpi3 Ref #3407 --- repos/base-hw/recipes/src/base-hw-rpi3/content.mk | 5 +++++ repos/base-hw/recipes/src/base-hw-rpi3/hash | 1 + repos/base-hw/recipes/src/base-hw-rpi3/used_apis | 2 ++ tool/run/boot_dir/hw | 1 + 4 files changed, 9 insertions(+) create mode 100644 repos/base-hw/recipes/src/base-hw-rpi3/content.mk create mode 100644 repos/base-hw/recipes/src/base-hw-rpi3/hash create mode 100644 repos/base-hw/recipes/src/base-hw-rpi3/used_apis diff --git a/repos/base-hw/recipes/src/base-hw-rpi3/content.mk b/repos/base-hw/recipes/src/base-hw-rpi3/content.mk new file mode 100644 index 00000000000..c0767dcfe52 --- /dev/null +++ b/repos/base-hw/recipes/src/base-hw-rpi3/content.mk @@ -0,0 +1,5 @@ +include $(GENODE_DIR)/repos/base-hw/recipes/src/base-hw_content.inc + +content: enable_board_spec +enable_board_spec: etc/specs.conf + echo "SPECS += rpi3" >> etc/specs.conf diff --git a/repos/base-hw/recipes/src/base-hw-rpi3/hash b/repos/base-hw/recipes/src/base-hw-rpi3/hash new file mode 100644 index 00000000000..5c76fbc2662 --- /dev/null +++ b/repos/base-hw/recipes/src/base-hw-rpi3/hash @@ -0,0 +1 @@ +2019-06-11 fe5960b2a356b28ad718f9749dadf75994fcd4a1 diff --git a/repos/base-hw/recipes/src/base-hw-rpi3/used_apis b/repos/base-hw/recipes/src/base-hw-rpi3/used_apis new file mode 100644 index 00000000000..ed9b772565c --- /dev/null +++ b/repos/base-hw/recipes/src/base-hw-rpi3/used_apis @@ -0,0 +1,2 @@ +base-hw +base diff --git a/tool/run/boot_dir/hw b/tool/run/boot_dir/hw index f7d6e107a8d..aae4ebb8a01 100644 --- a/tool/run/boot_dir/hw +++ b/tool/run/boot_dir/hw @@ -217,6 +217,7 @@ proc base_src { } { if {[have_spec x86_64] && [have_spec muen]} { return base-hw-muen } if {[have_spec pbxa9]} { return base-hw-pbxa9 } if {[have_spec rpi]} { return base-hw-rpi } + if {[have_spec rpi3]} { return base-hw-rpi3 } if {[have_spec imx6q_sabrelite]} { return base-hw-imx6q_sabrelite } if {[have_spec imx7d_sabre]} { return base-hw-imx7d_sabre } if {[have_spec nit6_solox]} { return base-hw-nit6_solox } From cf2c9f8d8868c0b050d4517d853ab89602dc00ef Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 13 Jun 2019 17:06:57 +0200 Subject: [PATCH 16/67] run: abort with error if BOARD was not set --- tool/run/run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/run/run b/tool/run/run index 947930c2176..7850ec0568a 100755 --- a/tool/run/run +++ b/tool/run/run @@ -823,7 +823,7 @@ proc board { } { global board_var if {$board_var eq ""} { puts "Unknown platform no BOARD variable set" - exit 0 + exit 1 } return $board_var } From bc14a32998a26837eb9d4fc1446660e1b8b60f1f Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Thu, 13 Jun 2019 11:48:17 +0200 Subject: [PATCH 17/67] bomb: handle failing child creation Issue #3107 --- repos/os/src/test/bomb/main.cc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/repos/os/src/test/bomb/main.cc b/repos/os/src/test/bomb/main.cc index 6b310bf0398..1fecc2c1dc3 100644 --- a/repos/os/src/test/bomb/main.cc +++ b/repos/os/src/test/bomb/main.cc @@ -217,13 +217,17 @@ struct Bomb Bomb_child::Name const binary_name("bomb"); for (unsigned i = children; i; --i) { - new (heap) - Registered(child_registry, env, binary_name, - unique_child_name(child_registry, - binary_name, - generation - 1), - cap_quota, ram_amount, - parent_services, generation - 1); + try { + new (heap) + Registered(child_registry, env, binary_name, + unique_child_name(child_registry, + binary_name, + generation - 1), + cap_quota, ram_amount, + parent_services, generation - 1); + } catch (...) { + Genode::error("creation of child ", i, " failed"); + } } /* master if we have a timer connection */ From 399487c85dc60b1d7e5a80235019f2871d7771d8 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Thu, 18 Apr 2019 12:53:12 +0200 Subject: [PATCH 18/67] gems: add direct fs constructor to Watch_handler issue #3294 --- repos/gems/include/gems/vfs.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/repos/gems/include/gems/vfs.h b/repos/gems/include/gems/vfs.h index 2aac9cce16f..49823cba9da 100644 --- a/repos/gems/include/gems/vfs.h +++ b/repos/gems/include/gems/vfs.h @@ -570,6 +570,12 @@ class Genode::Watcher Directory::join(dir._path, rel_path), handler); } + Watcher(Vfs::File_system &fs, Directory::Path const &rel_path, + Genode::Allocator &alloc, Vfs::Watch_response_handler &handler) + { + _watch(fs, alloc, rel_path, handler); + } + ~Watcher() { _handle->fs().close(_handle); } }; @@ -592,6 +598,12 @@ class Genode::Watch_handler : public Vfs::Watch_response_handler, Watcher(dir, rel_path, *this), _obj(obj), _member(member) { } + Watch_handler(Vfs::File_system &fs, Directory::Path const &rel_path, + Genode::Allocator &alloc, T &obj, void (T::*member)()) + : + Watcher(fs,rel_path, alloc, *this), _obj(obj), _member(member) + { } + void watch_response() override { (_obj.*_member)(); } }; From ac0ecdf855f610d4d02a43bcaa7ad3b7ba74daef Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Fri, 3 May 2019 15:56:58 +0200 Subject: [PATCH 19/67] base: make trace resumable revert relocations so a paused subject can resume without changing its policy. issue #3294 --- repos/base/src/lib/base/trace.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/repos/base/src/lib/base/trace.cc b/repos/base/src/lib/base/trace.cc index 15b1ef8e502..9a38743a54b 100644 --- a/repos/base/src/lib/base/trace.cc +++ b/repos/base/src/lib/base/trace.cc @@ -60,6 +60,11 @@ bool Trace::Logger::_evaluate_control() /* unload policy */ if (policy_module) { + + /* revoke relocations */ + for (unsigned i = 0; i < sizeof(Trace::Policy_module)/sizeof(void *); i++) { + ((addr_t *)policy_module)[i] -= (addr_t)(policy_module); + } _env().rm().detach(policy_module); policy_module = 0; } @@ -82,7 +87,8 @@ bool Trace::Logger::_evaluate_control() } } - if (enabled && (policy_version != control->policy_version())) { + bool const new_policy = policy_version != control->policy_version(); + if (enabled && (new_policy || policy_module == 0)) { /* suppress tracing during policy change */ Control::Inhibit_guard guard(*control); From 25484f870e6ec2bd22830fcd3034cf0cad84d307 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Mon, 6 May 2019 10:42:05 +0200 Subject: [PATCH 20/67] trace: make trace buffer resizeable Trace buffers a re-allocated during subsequent calls to 'trace'. issue #3294 --- .../src/core/include/trace/subject_registry.h | 44 ++++++++++++++----- .../base/src/core/trace_session_component.cc | 13 ++++-- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/repos/base/src/core/include/trace/subject_registry.h b/repos/base/src/core/include/trace/subject_registry.h index 87df4564ceb..7ac42d13509 100644 --- a/repos/base/src/core/include/trace/subject_registry.h +++ b/repos/base/src/core/include/trace/subject_registry.h @@ -79,19 +79,18 @@ class Genode::Trace::Subject /** * Allocate new dataspace - * - * \return true on success, false on the attempt to call setup - * twice. */ - bool setup(Ram_allocator &ram, size_t size) + void setup(Ram_allocator &ram, size_t size) { + if (_size && _size == size) + return; + if (_size) - return false; + _ram_ptr->free(_ds); _ram_ptr = &ram; _size = size; _ds = ram.alloc(size); - return true; } /** @@ -103,6 +102,9 @@ class Genode::Trace::Subject if (!from_ds.valid()) return false; + if (_size) + flush(); + _ram_ptr = &ram; _size = size; _ds = ram.alloc(_size); @@ -144,6 +146,7 @@ class Genode::Trace::Subject Ram_dataspace _buffer { }; Ram_dataspace _policy { }; Policy_id _policy_id { }; + size_t _allocated_memory { 0 }; Subject_info::State _state() { @@ -162,6 +165,18 @@ class Genode::Trace::Subject return Subject_info::UNTRACED; } + void _traceable_or_throw() + { + switch(_state()) { + case Subject_info::DEAD : throw Source_is_dead(); + case Subject_info::FOREIGN : throw Traced_by_other_session(); + case Subject_info::ERROR : throw Source_is_dead(); + case Subject_info::INVALID : throw Nonexistent_subject(); + case Subject_info::UNTRACED: return; + case Subject_info::TRACED : return; + } + } + public: /** @@ -184,6 +199,9 @@ class Genode::Trace::Subject */ bool has_source_id(unsigned id) const { return id == _source_id; } + size_t allocated_memory() const { return _allocated_memory; } + void reset_allocated_memory() { _allocated_memory = 0; } + /** * Start tracing * @@ -199,21 +217,23 @@ class Genode::Trace::Subject size_t policy_size, Ram_allocator &ram, Region_map &local_rm, size_t size) { + /* check state and throw error in case subject is not traceable */ + _traceable_or_throw(); + _policy_id = policy_id; - if (!_buffer.setup(ram, size) - || !_policy.setup(ram, local_rm, policy_ds, policy_size)) - throw Already_traced(); + _buffer.setup(ram, size); + if(!_policy.setup(ram, local_rm, policy_ds, policy_size)) + throw Already_traced(); /* inform trace source about the new buffer */ Locked_ptr source(_source); - if (!source.valid()) - throw Source_is_dead(); - if (!source->try_acquire(*this)) throw Traced_by_other_session(); + _allocated_memory = policy_size + size; + source->trace(_policy.dataspace(), _buffer.dataspace()); } diff --git a/repos/base/src/core/trace_session_component.cc b/repos/base/src/core/trace_session_component.cc index 083f95cdd20..b539dc8ea2b 100644 --- a/repos/base/src/core/trace_session_component.cc +++ b/repos/base/src/core/trace_session_component.cc @@ -82,21 +82,28 @@ void Session_component::trace(Subject_id subject_id, Policy_id policy_id, size_t const policy_size = _policies.size(*this, policy_id); size_t const required_ram = buffer_size + policy_size; + Trace::Subject &subject = _subjects.lookup_by_id(subject_id); + /* revert quota from previous call to trace */ + if (subject.allocated_memory()) { + _md_alloc.upgrade(subject.allocated_memory()); + subject.reset_allocated_memory(); + } + /* * Account RAM needed for trace buffer and policy buffer to the trace * session. */ - if (!_md_alloc.withdraw(required_ram)) + if (!_md_alloc.withdraw(required_ram)) { throw Out_of_ram(); + } try { - Trace::Subject &subject = _subjects.lookup_by_id(subject_id); subject.trace(policy_id, _policies.dataspace(*this, policy_id), policy_size, _ram, _local_rm, buffer_size); } catch (...) { /* revert withdrawal or quota */ _md_alloc.upgrade(required_ram); - throw Out_of_ram(); + throw; } } From 18b3253cac4100da7a586a1c02dbf924c5e98644 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Thu, 11 Apr 2019 11:20:48 +0200 Subject: [PATCH 21/67] vfs_trace: VFS plugin that offers trace buffer access The plugin creates a file-system hierarchy that enabled the access of trace buffers for each component and its threads. issue #3294 --- repos/gems/lib/mk/vfs_trace.mk | 5 + repos/gems/src/lib/vfs/trace/README | 34 ++ repos/gems/src/lib/vfs/trace/directory_tree.h | 150 ++++++ repos/gems/src/lib/vfs/trace/session_label.h | 69 +++ repos/gems/src/lib/vfs/trace/target.mk | 1 + repos/gems/src/lib/vfs/trace/trace_buffer.h | 79 +++ .../src/lib/vfs/trace/value_file_system.h | 228 +++++++++ repos/gems/src/lib/vfs/trace/vfs.cc | 474 ++++++++++++++++++ 8 files changed, 1040 insertions(+) create mode 100644 repos/gems/lib/mk/vfs_trace.mk create mode 100644 repos/gems/src/lib/vfs/trace/README create mode 100644 repos/gems/src/lib/vfs/trace/directory_tree.h create mode 100644 repos/gems/src/lib/vfs/trace/session_label.h create mode 100644 repos/gems/src/lib/vfs/trace/target.mk create mode 100644 repos/gems/src/lib/vfs/trace/trace_buffer.h create mode 100644 repos/gems/src/lib/vfs/trace/value_file_system.h create mode 100644 repos/gems/src/lib/vfs/trace/vfs.cc diff --git a/repos/gems/lib/mk/vfs_trace.mk b/repos/gems/lib/mk/vfs_trace.mk new file mode 100644 index 00000000000..a6803076283 --- /dev/null +++ b/repos/gems/lib/mk/vfs_trace.mk @@ -0,0 +1,5 @@ +SRC_CC = vfs.cc + +vpath %.cc $(REP_DIR)/src/lib/vfs/trace + +SHARED_LIB = yes diff --git a/repos/gems/src/lib/vfs/trace/README b/repos/gems/src/lib/vfs/trace/README new file mode 100644 index 00000000000..7cdd7768e22 --- /dev/null +++ b/repos/gems/src/lib/vfs/trace/README @@ -0,0 +1,34 @@ +The VFS trace plugin offers access to Genode's trace session by providing a +file-system that can be mounted at arbitrary location within the VFS of a +component. The file system forms a directory structure that recursively +represents the parent-child relationship of running component. The leave +directories represent the threads within a component. Currently there are three +files for each thread that can be accessed: + +:'enable': Start or stops tracing of a thread by write "true" or "false" into + file. + +:'buffer_size': Allows the configuration of the trace-buffer size for the + thread in the usual Genode format (e.g. 5M, 512K, 1024). + +:'trace_buffer': This read only file contains the current content of the trace + buffer. Every trace entry can only be read once, after that + only new entries appear. "tail -f" can also be used in order to + display continuous output. + +In order to mount the file system configure the of your component as +follow: + +! +! +! + +The "ram" attribute is mandatory and configures the quota of the trace-session +in the plugin. It limits the number of thread that can be traced at once. + +Limitations: + +The plugin retrieves up to 128 running components at load time. There is +currently no support to add or remove components once the plugin has been +started. This implies that components that are started at a later stage will not +appear within the file system. diff --git a/repos/gems/src/lib/vfs/trace/directory_tree.h b/repos/gems/src/lib/vfs/trace/directory_tree.h new file mode 100644 index 00000000000..79307405489 --- /dev/null +++ b/repos/gems/src/lib/vfs/trace/directory_tree.h @@ -0,0 +1,150 @@ +/* + * \brief A tree of AVL trees that forms a directory structure + * \author Sebastian Sumpf + * \date 2019-06-14 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _DIRECTORY_TREE_H_ +#define _DIRECTORY_TREE_H_ + +#include +#include "session_label.h" + + +namespace Vfs { + class Directory_tree; + class Trace_node; + struct Label; +} + + +namespace Genode { + template class Avl_node_tree; +} + + +template +class Genode::Avl_node_tree : public NT +{ + protected: + + using Tree = Avl_tree; + using Node = Avl_node; + + Tree _tree { }; + + public: + + using NT::NT; + + void insert(Node *node) { _tree.insert(node); } + + Tree &tree() { return _tree; } + + Node *find_by_name(char const *name) + { + if (!_tree.first()) return nullptr; + + Node *node = _tree.first()->find_by_name(name); + return node; + } +}; + + +struct Vfs::Label : Genode::String<32> +{ + using String::String; +}; + + +class Vfs::Trace_node : public Vfs::Label, + public Avl_node_tree +{ + private: + + Allocator &_alloc; + Trace::Subject_id const _id; + + Trace_node *_find_by_name(char const *name) + { + Node *node = find_by_name(name); + return node ? static_cast(node) : nullptr; + } + + public: + + Trace_node(Genode::Allocator &alloc, Session_label const &label, + Trace::Subject_id const id = 0) + : Vfs::Label(label), Avl_node_tree(string()), + _alloc(alloc), _id(id) + { } + + Trace_node &insert(Session_label const &label) + { + if (!label.valid()) return *this; + + Trace_node *node = _find_by_name(label.first_element().string()); + if (!node) { + node = new(_alloc) Trace_node(_alloc, label.first_element()); + Avl_node_tree::insert(node); + } + + return node->insert(label.suffix()); + } + + void xml(Genode::Xml_generator &xml) const + { + _tree.for_each([&] (Genode::Avl_string_base const &name) { + Trace_node const &node = static_cast(name); + + if (node.id() == 0) + xml.node("dir", [&] () { + xml.attribute("name", node.name()); + node.xml(xml); + }); + else + xml.node("trace_node", [&] () { + xml.attribute("name", node.name()); + xml.attribute("id", node.id().id); + node.xml(xml); + }); + }); + } + + Trace::Subject_id const &id() const { return _id; } +}; + + +class Vfs::Directory_tree : public Genode::Avl_tree +{ + private: + + Allocator &_alloc; + Trace_node _root { _alloc, Session_label() }; + + public: + + Directory_tree(Genode::Allocator &alloc) + : _alloc(alloc) { } + + void insert(Trace::Subject_info const &info, Trace::Subject_id const id) + { + Trace_node &leaf = _root.insert(info.session_label()); + Trace_node *node = new (_alloc) Trace_node(_alloc, info.thread_name(), id); + leaf.Avl_node_tree::insert(node); + } + + void xml(Genode::Xml_generator &xml) + { + _root.xml(xml); + } +}; + +#endif /* _DIRECTORY_TREE_H_ */ diff --git a/repos/gems/src/lib/vfs/trace/session_label.h b/repos/gems/src/lib/vfs/trace/session_label.h new file mode 100644 index 00000000000..164dc42e498 --- /dev/null +++ b/repos/gems/src/lib/vfs/trace/session_label.h @@ -0,0 +1,69 @@ +/* + * \brief Session label extension + * \author Sebastian Sumpf + * \date 2019-06-04 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _SESSION_LABEL_H_ +#define _SESSION_LABEL_H_ + +#include +#include +#include + +namespace Vfs { +using namespace Genode; +struct Session_label; +} + +struct Vfs::Session_label : Genode::Session_label +{ + private: + + static char const *_separator() { return " -> "; } + static size_t _separator_len() { return 4; } + + public: + + using Genode::Session_label::Session_label; + + Session_label first_element() const + { + char const * const full = string(); + if (length() < _separator_len() + 1) + return Session_label(Cstring(full)); + + unsigned prefix_len; + + for (prefix_len = 0; prefix_len < length() - 1; prefix_len++) + if (!strcmp(_separator(), full + prefix_len, _separator_len())) + break; + + return Session_label(Cstring(full, prefix_len)); + } + + /** + * Return part of the label without first element + */ + Session_label suffix() const + { + if (length() < _separator_len() + 1) + return Session_label(); + + char const * const full = string(); + for (unsigned prefix_len = 0; prefix_len < length() - 1; prefix_len++) + if (!strcmp(_separator(), full + prefix_len, _separator_len())) + return full + prefix_len + _separator_len(); + + return Session_label(); + } +}; + +#endif /* _SESSION_LABEL_H_ */ diff --git a/repos/gems/src/lib/vfs/trace/target.mk b/repos/gems/src/lib/vfs/trace/target.mk new file mode 100644 index 00000000000..22e280a77a8 --- /dev/null +++ b/repos/gems/src/lib/vfs/trace/target.mk @@ -0,0 +1 @@ +LIBS = vfs_trace diff --git a/repos/gems/src/lib/vfs/trace/trace_buffer.h b/repos/gems/src/lib/vfs/trace/trace_buffer.h new file mode 100644 index 00000000000..17fc3b0c730 --- /dev/null +++ b/repos/gems/src/lib/vfs/trace/trace_buffer.h @@ -0,0 +1,79 @@ +/* + * \brief Wrapper for Trace::Buffer that adds some convenient functionality + * \author Martin Stein + * \date 2018-01-12 + */ + +/* + * Copyright (C) 2018 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _TRACE_BUFFER_H_ +#define _TRACE_BUFFER_H_ + +/* Genode includes */ +#include + + +/** + * Wrapper for Trace::Buffer that adds some convenient functionality + */ +class Trace_buffer +{ + private: + + Genode::Trace::Buffer &_buffer; + Genode::Trace::Buffer::Entry _curr { _buffer.first() }; + unsigned _wrapped_count { 0 }; + + public: + + Trace_buffer(Genode::Trace::Buffer &buffer) : _buffer(buffer) { } + + /** + * Call functor for each entry that wasn't yet processed + */ + template + void for_each_new_entry(FUNC && functor, bool update = true) + { + using namespace Genode; + + bool wrapped = _buffer.wrapped() != _wrapped_count; + if (wrapped) + _wrapped_count = _buffer.wrapped(); + + /* initialize _curr if _buffer was empty until now */ + Trace::Buffer::Entry curr { _curr }; + if (_curr.last()) + curr = _buffer.first(); + + /* iterate over all entries that were not processed yet */ + Trace::Buffer::Entry e1 = curr; + for (Trace::Buffer::Entry e2 = curr; wrapped || !e2.last(); + e2 = _buffer.next(e2)) { + /* if buffer wrapped, we pass the last entry once and continue at first entry */ + if (wrapped && e2.last()) { + wrapped = false; + e2 = _buffer.first(); + if (e2.last()) + break; + } + + e1 = e2; + if (!functor(e1)) + break; + } + + /* remember the last processed entry in _curr */ + curr = e1; + if (update) _curr = curr; + } + + void * address() const { return &_buffer; } +}; + + +#endif /* _TRACE_BUFFER_H_ */ diff --git a/repos/gems/src/lib/vfs/trace/value_file_system.h b/repos/gems/src/lib/vfs/trace/value_file_system.h new file mode 100644 index 00000000000..6c62c48c42e --- /dev/null +++ b/repos/gems/src/lib/vfs/trace/value_file_system.h @@ -0,0 +1,228 @@ +/* + * \brief File system for providing a value as a file + * \author Josef Soentgen + * \author Sebastian Sumpf + * \date 2018-11-24 + */ + +/* + * Copyright (C) 2018-2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _VALUE_FILE_SYSTEM_H_ +#define _VALUE_FILE_SYSTEM_H_ + +/* Genode includes */ +#include +#include + +namespace Vfs { + template + class Value_file_system; +} + + +template +class Vfs::Value_file_system : public Vfs::Single_file_system +{ + public: + + typedef Genode::String<64> Name; + + private: + + typedef Genode::String Buffer; + + Name const _file_name; + + Buffer _buffer { }; + + struct Vfs_handle : Single_vfs_handle + { + Value_file_system &_value_fs; + Buffer &_buffer{ _value_fs._buffer }; + + Vfs_handle(Value_file_system &value_fs, + Allocator &alloc) + : + Single_vfs_handle(value_fs, value_fs, alloc, 0), + _value_fs(value_fs) + { } + + Read_result read(char *dst, file_size count, + file_size &out_count) override + { + out_count = 0; + + if (seek() > _buffer.length()) + return READ_ERR_INVALID; + + char const * const src = _buffer.string() + seek(); + Genode::size_t const len = min(_buffer.length() - seek(), count); + Genode::memcpy(dst, src, len); + + out_count = len; + return READ_OK; + } + + Write_result write(char const *src, file_size count, file_size &out_count) override + { + out_count = 0; + if (seek() > BUF_SIZE) + return WRITE_ERR_INVALID; + + Genode::size_t const len = min(BUF_SIZE- seek(), count); + _buffer = Buffer(Cstring(src, len)); + out_count = len; + + /* inform watchers */ + _value_fs._watch_response(); + + return WRITE_OK; + } + + bool read_ready() override { return true; } + + private: + + Vfs_handle(Vfs_handle const &); + Vfs_handle &operator = (Vfs_handle const &); + }; + + struct Watch_handle; + using Watch_handle_registry = Genode::Registry; + + struct Watch_handle : Vfs_watch_handle + { + typename Watch_handle_registry::Element elem; + + Watch_handle(Watch_handle_registry ®istry, + Vfs::File_system &fs, + Allocator &alloc) + : Vfs_watch_handle(fs, alloc), elem(registry, *this) { } + }; + + Watch_handle_registry _watch_handle_registry { }; + + + void _watch_response() { + _watch_handle_registry.for_each([&] (Watch_handle &h) { + h.watch_response(); + }); + } + + typedef Genode::String<200> Config; + Config _config(Name const &name) const + { + char buf[Config::capacity()] { }; + Genode::Xml_generator xml(buf, sizeof(buf), type_name(), [&] () { + xml.attribute("name", name); }); + return Config(Genode::Cstring(buf)); + } + + + public: + + Value_file_system(Name const &name, Buffer const &initial_value) + : + Single_file_system(NODE_TYPE_CHAR_DEVICE, type(), + Xml_node(_config(name).string())), + _file_name(name) + { + value(initial_value); + } + + static char const *type_name() { return "value"; } + + char const *type() override { return type_name(); } + + void value(Buffer const &value) + { + _buffer = Buffer(value); + } + + T value() + { + T val { 0 }; + Genode::ascii_to(_buffer.string(), val); + + return val; + } + + Buffer buffer() const { return _buffer; } + + bool matches(Xml_node node) const + { + return node.has_type(type_name()) && + node.attribute_value("name", Name()) == _file_name; + } + + + /******************************** + ** File I/O service interface ** + ********************************/ + + Ftruncate_result ftruncate(Vfs::Vfs_handle *, file_size size) override + { + if (size >= BUF_SIZE) + return FTRUNCATE_ERR_NO_SPACE; + + return FTRUNCATE_OK; + } + + + /********************************* + ** Directory-service interface ** + *********************************/ + + Open_result open(char const *path, unsigned, + Vfs::Vfs_handle **out_handle, + Allocator &alloc) override + { + if (!_single_file(path)) + return OPEN_ERR_UNACCESSIBLE; + + try { + *out_handle = new (alloc) Vfs_handle(*this, alloc); + return OPEN_OK; + } + catch (Genode::Out_of_ram) { Genode::error("out of ram"); return OPEN_ERR_OUT_OF_RAM; } + catch (Genode::Out_of_caps) { Genode::error("out of caps");return OPEN_ERR_OUT_OF_CAPS; } + } + + Stat_result stat(char const *path, Stat &out) override + { + Stat_result result = Single_file_system::stat(path, out); + out.mode |= 0666; + out.size = BUF_SIZE + 1; + return result; + } + + Watch_result watch(char const *path, + Vfs_watch_handle **handle, + Allocator &alloc) override + { + if (!_single_file(path)) + return WATCH_ERR_UNACCESSIBLE; + + try { + Watch_handle *wh = new (alloc) + Watch_handle(_watch_handle_registry, *this, alloc); + *handle = wh; + return WATCH_OK; + } + catch (Genode::Out_of_ram) { return WATCH_ERR_OUT_OF_RAM; } + catch (Genode::Out_of_caps) { return WATCH_ERR_OUT_OF_CAPS; } + } + + void close(Vfs_watch_handle *handle) override + { + if (handle && (&handle->fs() == this)) + destroy(handle->alloc(), handle); + } +}; + +#endif /* _VALUE_FILE_SYSTEM_H_ */ diff --git a/repos/gems/src/lib/vfs/trace/vfs.cc b/repos/gems/src/lib/vfs/trace/vfs.cc new file mode 100644 index 00000000000..aa19e90e9e8 --- /dev/null +++ b/repos/gems/src/lib/vfs/trace/vfs.cc @@ -0,0 +1,474 @@ +/* + * \brief File system for trace buffer access + * \author Sebastian Sumpf + * \date 2019-06-13 + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include +#include + + +#include +#include + +#include + +#include "directory_tree.h" +#include "trace_buffer.h" +#include "value_file_system.h" + + +namespace Vfs_trace { + + using namespace Vfs; + using namespace Genode; + using Name = String<32>; + + struct File_system; + class Local_factory; + class Subject; + struct Subject_factory; + class Trace_buffer_file_system; +} + + +class Vfs_trace::Trace_buffer_file_system : public Single_file_system +{ + private: + + /** + * Trace_buffer wrapper + */ + struct Trace_entries + { + Vfs::Env &_env; + Constructible _buffer { }; + + Trace_entries(Vfs::Env &env) : _env(env) { } + + void setup(Dataspace_capability ds) + { + _buffer.construct(*((Trace::Buffer *)_env.env().rm().attach(ds))); + } + + void flush() + { + if (!_buffer.constructed()) return; + + _env.env().rm().detach(_buffer->address()); + _buffer.destruct(); + } + + template + void for_each_new_entry(FUNC && functor, bool update = true) { + if (!_buffer.constructed()) return; + _buffer->for_each_new_entry(functor, update); + } + }; + + enum State { OFF, TRACE, PAUSED } _state { OFF }; + + Vfs::Env &_env; + Trace::Connection &_trace; + Trace::Policy_id _policy; + Trace::Subject_id _id; + size_t _buffer_size { 1024 * 1024 }; + size_t _stat_size { 0 }; + Trace_entries _entries { _env }; + + + typedef String<32> Config; + + static Config _config() + { + char buf[Config::capacity()] { }; + + Xml_generator xml(buf, sizeof(buf), type_name(), [&] () { }); + + return Config(Cstring(buf)); + } + + void _setup_and_trace() + { + _entries.flush(); + + try { + _trace.trace(_id, _policy, _buffer_size); + } catch (...) { + error("failed to start tracing"); + return; + } + + _entries.setup(_trace.buffer(_id)); + } + + public: + + struct Vfs_handle : Single_vfs_handle + { + Trace_entries &_entries; + + Vfs_handle(Directory_service &ds, + File_io_service &fs, + Genode::Allocator &alloc, + Trace_entries &entries) + : Single_vfs_handle(ds, fs, alloc, 0), _entries(entries) + { } + + Read_result read(char *dst, file_size count, + file_size &out_count) override + { + out_count = 0; + _entries.for_each_new_entry([&](Trace::Buffer::Entry entry) { + file_size size = min(count - out_count, entry.length()); + memcpy(dst + out_count, entry.data(), size); + out_count += size; + + if (out_count == count) + return false; + + return true; + }); + + return READ_OK; + } + + Write_result write(char const *, file_size, + file_size &out_count) override + { + out_count = 0; + return WRITE_ERR_INVALID; + } + + bool read_ready() override { return true; } + }; + + Trace_buffer_file_system(Vfs::Env &env, + Trace::Connection &trace, + Trace::Policy_id policy, + Trace::Subject_id id) + : Single_file_system(NODE_TYPE_CHAR_DEVICE, + type_name(), Xml_node(_config().string())), + _env(env), _trace(trace), _policy(policy), _id(id) + { } + + static char const *type_name() { return "trace_buffer"; } + char const *type() override { return type_name(); } + + + /*************************** + ** File-system interface ** + ***************************/ + + Open_result open(char const *path, unsigned, + Vfs::Vfs_handle **out_handle, + Allocator &alloc) override + { + if (!_single_file(path)) + return OPEN_ERR_UNACCESSIBLE; + + *out_handle = new (alloc) Vfs_handle(*this, *this, alloc, _entries); + return OPEN_OK; + } + + Stat_result stat(char const *path, Stat &out) override + { + Stat_result res = Single_file_system::stat(path, out); + if (res != STAT_OK) return res; + + /* update file size */ + if (_state == TRACE) + _entries.for_each_new_entry([&](Trace::Buffer::Entry entry) { + _stat_size += entry.length(); return true; }, false); + + out.size = _stat_size; + + return res; + } + + + /*********************** + ** FS event handlers ** + ***********************/ + + bool resize_buffer(size_t size) + { + if (size == 0) return false; + + _buffer_size = size; + + switch (_state) { + case TRACE: + _trace.pause(_id); + _setup_and_trace(); + break; + case PAUSED: + _state = OFF; + break; + case OFF: + break; + } + return true; + } + + void trace(bool enable) + { + if (enable) { + switch (_state) { + case TRACE: break; + case OFF: _setup_and_trace(); break; + case PAUSED: _trace.resume(_id); break; + + } + _state = TRACE; + } else { + switch (_state) { + case OFF: return; + case PAUSED: return; + case TRACE: _trace.pause(_id); _state = PAUSED; return; + } + } + } +}; + + +struct Vfs_trace::Subject_factory : File_system_factory +{ + Vfs::Env &_env; + Value_file_system _enabled_fs + { "enable", "false\n"}; + + Value_file_system _buffer_size_fs + { "buffer_size", "1M\n"}; + + String<17> _buffer_string + { _buffer_size_fs.buffer() }; + + Trace_buffer_file_system _trace_fs; + + Subject_factory(Vfs::Env &env, + Trace::Connection &trace, + Trace::Policy_id policy, + Trace::Subject_id id) + : _env(env), _trace_fs(env, trace, policy, id) { } + + Vfs::File_system *create(Vfs::Env &, Xml_node node) override + { + if (node.has_type(Value_file_system::type_name())) { + if (_enabled_fs.matches(node)) return &_enabled_fs; + if (_buffer_size_fs.matches(node)) return &_buffer_size_fs; + } + + if (node.has_type(Trace_buffer_file_system::type_name())) + return &_trace_fs; + + return nullptr; + } +}; + + +class Vfs_trace::Subject : private Subject_factory, + public Vfs::Dir_file_system +{ + private: + + typedef String<200> Config; + + Watch_handler _enable_handler { + _enabled_fs, "/enable", + Subject_factory::_env.alloc(), + *this, &Subject::_enable_subject }; + + Watch_handler _buffer_size_handler { + _buffer_size_fs, "/buffer_size", + Subject_factory::_env.alloc(), + *this, &Subject::_buffer_size }; + + + static Config _config(Xml_node node) + { + char buf[Config::capacity()] { }; + + Xml_generator xml(buf, sizeof(buf), "dir", [&] () { + xml.attribute("name", node.attribute_value("name", Vfs_trace::Name())); + xml.node("value", [&] () { xml.attribute("name", "enable"); }); + xml.node("value", [&] () { xml.attribute("name", "buffer_size"); }); + xml.node(Trace_buffer_file_system::type_name(), [&] () {}); + }); + + return Config(Cstring(buf)); + } + + + /******************** + ** Watch handlers ** + ********************/ + + void _enable_subject() + { + _enabled_fs.value(_enabled_fs.value() ? "true\n" : "false\n"); + _trace_fs.trace(_enabled_fs.value()); + } + + void _buffer_size() + { + Number_of_bytes size = _buffer_size_fs.value(); + + if (_trace_fs.resize_buffer(size) == false) { + /* restore old value */ + _buffer_size_fs.value(_buffer_string); + return; + } + + _buffer_string = _buffer_size_fs.buffer(); + } + + public: + + Subject(Vfs::Env &env, Trace::Connection &trace, + Trace::Policy_id policy, Xml_node node) + : Subject_factory(env, trace, policy, node.attribute_value("id", 0u)), + Dir_file_system(env, Xml_node(_config(node).string()), *this) + { } + + + static char const *type_name() { return "trace_node"; } + char const *type() override { return type_name(); } +}; + + +struct Vfs_trace::Local_factory : File_system_factory +{ + Vfs::Env &_env; + + Trace::Connection _trace; + enum { MAX_SUBJECTS = 128 }; + Trace::Subject_id _subjects[MAX_SUBJECTS]; + unsigned _subject_count { 0 }; + Trace::Policy_id _policy_id { 0 }; + + Directory_tree _tree { _env.alloc() }; + + void _install_null_policy() + { + using namespace Genode; + Constructible null_policy; + + try { + null_policy.construct(_env.env(), "null"); + _policy_id = _trace.alloc_policy(null_policy->size()); + } + catch (Out_of_caps) { throw; } + catch (Out_of_ram) { throw; } + catch (...) { + error("failed to attach 'null' trace policy." + "Please make sure it is provided as a ROM module."); + throw; + } + + /* copy policy into trace session */ + void *dst = _env.env().rm().attach(_trace.policy(_policy_id)); + memcpy(dst, null_policy->local_addr(), null_policy->size()); + _env.env().rm().detach(dst); + } + + size_t _config_session_ram(Xml_node config) + { + try { + Genode::Number_of_bytes ram; + config.attribute("ram").value(&ram); + return ram; + } catch (...) { + Genode::error("mandatory 'ram' attribute missing"); + throw Genode::Exception(); + } + } + + Local_factory(Vfs::Env &env, Xml_node config) + : _env(env), _trace(env.env(), _config_session_ram(config), 512*1024, 0) + { + bool success = false; + while (!success) { + try { + _subject_count = _trace.subjects(_subjects, MAX_SUBJECTS); + success = true; + } catch(Genode::Out_of_ram) { + _trace.upgrade_ram(4096); + success = false; + } + } + + for (unsigned i = 0; i < _subject_count; i++) { + _tree.insert(_trace.subject_info(_subjects[i]), _subjects[i]); + } + + _install_null_policy(); + } + + Vfs::File_system *create(Vfs::Env&, Xml_node node) override + { + if (node.has_type(Subject::type_name())) + return new (_env.alloc()) Subject(_env, _trace, _policy_id, node); + + return nullptr; + } +}; + + +class Vfs_trace::File_system : private Local_factory, + public Vfs::Dir_file_system +{ + private: + + typedef String<512*1024> Config; + + static char const *_config(Vfs::Env &vfs_env, Directory_tree &tree) + { + char *buf = (char *)vfs_env.alloc().alloc(Config::capacity()); + Xml_generator xml(buf, Config::capacity(), "node", [&] () { + tree.xml(xml); + }); + + return buf; + } + + public: + + File_system(Vfs::Env &vfs_env, Genode::Xml_node node) + : Local_factory(vfs_env, node), + Vfs::Dir_file_system(vfs_env, Xml_node(_config(vfs_env, _tree)), *this) + { } + + char const *type() override { return "trace"; } +}; + + +/************************** + ** VFS plugin interface ** + **************************/ + +extern "C" Vfs::File_system_factory *vfs_file_system_factory(void) +{ + struct Factory : Vfs::File_system_factory + { + Vfs::File_system *create(Vfs::Env &vfs_env, + Genode::Xml_node node) override + { + try { return new (vfs_env.alloc()) + Vfs_trace::File_system(vfs_env, node); } + catch (...) { Genode::error("could not create 'trace_fs' "); } + return nullptr; + } + }; + + static Factory factory; + return &factory; +} From 24eea0b653ee1c7a789d836423446e73dd4384c2 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 12 Jun 2019 17:47:11 +0200 Subject: [PATCH 22/67] base: add 'trace' function to base/log.h The 'Genode::trace' convenience function prints messages to Genode's trace buffer (if tracing is enabled). issue #3294 --- repos/base/include/base/log.h | 42 ++++++++++++++++++++++++++ repos/base/lib/symbols/ld | 5 ++- repos/base/src/lib/base/default_log.cc | 23 ++++++++++++++ repos/base/src/lib/base/log.cc | 17 +++++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) diff --git a/repos/base/include/base/log.h b/repos/base/include/base/log.h index 9f07524b492..5519a2d37ea 100644 --- a/repos/base/include/base/log.h +++ b/repos/base/include/base/log.h @@ -16,11 +16,13 @@ #include #include +#include namespace Genode { class Log; class Raw; + class Trace_output; } @@ -101,6 +103,36 @@ class Genode::Raw }; +class Genode::Trace_output +{ + private: + + Lock _lock { }; + + Output &_output; + + void _acquire(); + void _release(); + + public: + + Trace_output(Output &output) : _output(output) { } + + template + void output(ARGS &&... args) + { + _acquire(); + Output::out_args(_output, args...); + _release(); + } + + /** + * Return component-global singleton instance of the 'Trace_output' + */ + static Trace_output &trace_output(); +}; + + namespace Genode { /** @@ -140,6 +172,16 @@ namespace Genode { */ template void raw(ARGS &&... args) { Raw::output(args...); } + + + /** + * Write 'args' to the trace buffer if tracing is enabled + * + * The message is prefixed with a timestamp value + */ + template + void trace(ARGS && ... args) { + Trace_output::trace_output().output(Trace::timestamp(), ": ", args...); } } #endif /* _INCLUDE__BASE__LOG_H_ */ diff --git a/repos/base/lib/symbols/ld b/repos/base/lib/symbols/ld index e406d3dbca3..25b1a5d3539 100644 --- a/repos/base/lib/symbols/ld +++ b/repos/base/lib/symbols/ld @@ -80,6 +80,9 @@ _ZN6Genode11Sliced_heapD1Ev T _ZN6Genode11Sliced_heapD2Ev T _ZN6Genode12Address_infoC1Em T _ZN6Genode12Address_infoC2Em T +_ZN6Genode12Trace_output12trace_outputEv T +_ZN6Genode12Trace_output8_acquireEv T +_ZN6Genode12Trace_output8_releaseEv T _ZN6Genode13Avl_node_base15_rotate_subtreeEPS0_bRNS0_6PolicyE T _ZN6Genode13Avl_node_base18_rebalance_subtreeEPS0_RNS0_6PolicyE T _ZN6Genode13Avl_node_base6_adoptEPS0_bRNS0_6PolicyE T @@ -587,11 +590,11 @@ _ZThn8_N6Genode23Alarm_timeout_scheduler14handle_timeoutENS_8DurationE T _ZThn8_N6Genode23Alarm_timeout_schedulerD0Ev T _ZThn8_N6Genode23Alarm_timeout_schedulerD1Ev T _ZdlPv W -_ZdlPvm W _ZdlPvPN6Genode11DeallocatorE T _ZdlPvPN6Genode9AllocatorE W _ZdlPvRN6Genode11DeallocatorE T _ZdlPvRN6Genode9AllocatorE W +_ZdlPvm W _ZnajPN6Genode9AllocatorE T _ZnajRN6Genode9AllocatorE T _ZnamPN6Genode9AllocatorE T diff --git a/repos/base/src/lib/base/default_log.cc b/repos/base/src/lib/base/default_log.cc index 90356c17930..4da0808fb79 100644 --- a/repos/base/src/lib/base/default_log.cc +++ b/repos/base/src/lib/base/default_log.cc @@ -62,6 +62,18 @@ Log &Log::log() } +static Trace_output *trace_ptr; + +Trace_output &Trace_output::trace_output() +{ + if (trace_ptr) + return *trace_ptr; + + raw("Error: Missing call of init_log"); + sleep_forever(); +} + + /** * Hook for support the 'fork' implementation of the noux libc backend */ @@ -95,5 +107,16 @@ void Genode::init_log(Parent &parent) unmanaged_singleton(Write_fn()); log_ptr = unmanaged_singleton(*buffered_log_output); + + /* enable trace back end */ + struct Write_trace_fn { void operator () (char const *s) { Thread::trace(s); } }; + + typedef Buffered_output + Buffered_trace_output; + + static Buffered_trace_output *buffered_trace_output = + unmanaged_singleton(Write_trace_fn()); + + trace_ptr = unmanaged_singleton(*buffered_trace_output); } diff --git a/repos/base/src/lib/base/log.cc b/repos/base/src/lib/base/log.cc index f0e30e0b4c0..90c77f21496 100644 --- a/repos/base/src/lib/base/log.cc +++ b/repos/base/src/lib/base/log.cc @@ -59,3 +59,20 @@ void Raw::_release() */ _output().out_string("\033[0m\n"); } + + +void Trace_output::_acquire() +{ + _lock.lock(); +} + + +void Trace_output::_release() +{ + /* + * Add newline + */ + _output.out_string("\n"); + + _lock.unlock(); +} From 8625146011c77636b3faca04a795745e757b104d Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 17 Jun 2019 10:26:03 +0200 Subject: [PATCH 23/67] sculpt: use secondary CPU for leitzentrale By decoupling the leitzentrale from the (contended) boot CPU, the fading on F12 interferes much less with animations like nano3d deployed in the runtime. Fixes #3268 --- repos/gems/run/sculpt.run | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index b10259a940e..fd806d4cdc6 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -33,6 +33,8 @@ install_config { + + @@ -370,6 +372,7 @@ install_config { + From dec2d897c31f995d6175eade001820912ddc0f98 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 17 Jun 2019 11:45:38 +0200 Subject: [PATCH 24/67] themed_decorator: fix jumping windows The decorator's detection of the hovered window element was inaccurate, which resulted in "jumping" windows in some situations, ultimately caused by a combination of three different mechanisms. First, when moving the pointer into the area of a window, the decorator would detect the hovering of the left border whenever the distance of the pointer from the border was less than the half of the theme texture (e.g., 64x64 pixels for the default theme). However, if the left border margin is set to a small value (e.g., 1), there is an overlap of the sensitive resize border area and the content. Hence, chances were quite high that - when moving the pointer from the left into the window - the hover report would contain the hovering of the left border. Second, the window manager tries to hide pointer movements from the decorator if possible. It informs the decorator of the pointer position if any decoration is hovered or if a new window is hovered. But it does not expose pointer movements within a window to the decorator. For this reason, the decorator would not update the hover report as long as the pointer stays within a once hovered window. In the situation described above, the hover report would still contain the stale information about the hovering of the left resize border. Third, when the user clicks on the window, the decorator examines the most recent hover report and - in the situation described above - finds the left border hovered. Consequently, it initiates a window-drag operation. While resizing the window with the left border, the window layouter pins the right border of the window to its current position. All window-size changes of the client will be applied towards the left (dragged) border. In the case of the top view, which continuously resizes the window by itself, the window would "jump". In reality, it actually tries to respond an interactive resize operation. The window layouter cannot guess that the client is not responding to window layouter's resize request but is acting independently. This patch fixes the jumping window problem for the case where the pointer hovers the overlapping area of the resize border and the content. However, when trying the to interactively resize the top window via the bottom-left corner, the "jumping" can still be observed. Fixes #3303 --- repos/gems/src/app/themed_decorator/window.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/repos/gems/src/app/themed_decorator/window.cc b/repos/gems/src/app/themed_decorator/window.cc index 74fecc38c64..f5cae4327c9 100644 --- a/repos/gems/src/app/themed_decorator/window.cc +++ b/repos/gems/src/app/themed_decorator/window.cc @@ -23,6 +23,10 @@ Decorator::Window_base::Hover Decorator::Window::hover(Point abs_pos) const hover.window_id = id(); + /* omit the decoration checks below whenever the content is hovered */ + if (geometry().contains(abs_pos)) + return hover; + Rect const closer_geometry = _theme.absolute(_theme.element_geometry(Theme::ELEMENT_TYPE_CLOSER), outer_geometry()); From 070a24956dd883f7e7065f1dbc0e9bf40b1e8600 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 17 Jun 2019 13:00:40 +0200 Subject: [PATCH 25/67] themed_decorator: use Attached_rom_dataspace::xml This simplifies the code a bit. --- repos/gems/src/app/themed_decorator/main.cc | 37 ++++++--------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/repos/gems/src/app/themed_decorator/main.cc b/repos/gems/src/app/themed_decorator/main.cc index 93881c57db1..86ea3b36931 100644 --- a/repos/gems/src/app/themed_decorator/main.cc +++ b/repos/gems/src/app/themed_decorator/main.cc @@ -261,33 +261,18 @@ void Decorator::Main::_handle_nitpicker_sync() auto flush_window_stack_changes = [&] () { _window_stack.update_nitpicker_views(); }; - if (_window_layout_update_needed && _window_layout.valid()) { + if (_window_layout_update_needed) { - try { - Xml_node xml(_window_layout.local_addr(), - _window_layout.size()); - - _window_stack.update_model(xml, flush_window_stack_changes); - - model_updated = true; - - /* - * A decorator element might have appeared or disappeared under - * the pointer. - */ - if (_pointer.constructed() && _pointer->valid()) - update_hover_report(Xml_node(_pointer->local_addr()), - _window_stack, _hover, _hover_reporter); + _window_stack.update_model(_window_layout.xml(), flush_window_stack_changes); - } catch (Xml_node::Invalid_syntax) { + model_updated = true; - /* - * An error occured with processing the XML model. Flush the - * internal representation. - */ - _window_stack.update_model(Xml_node(""), - flush_window_stack_changes); - } + /* + * A decorator element might have appeared or disappeared under + * the pointer. + */ + if (_pointer.constructed()) + update_hover_report(_pointer->xml(), _window_stack, _hover, _hover_reporter); _window_layout_update_needed = false; } @@ -317,9 +302,7 @@ void Decorator::Main::_handle_pointer_update() _pointer->update(); - if (_pointer->valid()) - update_hover_report(Xml_node(_pointer->local_addr()), - _window_stack, _hover, _hover_reporter); + update_hover_report(_pointer->xml(), _window_stack, _hover, _hover_reporter); } From 7b1e3a9d634bb48deb6e4bef6c373bbb6043b7fc Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 17 Jun 2019 14:05:15 +0200 Subject: [PATCH 26/67] window layouter: resize resizeable windows only Initiate the drag operation of a resize handle only if the client is known to be resizable. Issue #3303 --- repos/gems/src/app/window_layouter/window.h | 27 ++++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/repos/gems/src/app/window_layouter/window.h b/repos/gems/src/app/window_layouter/window.h index d82aca0b13e..bab593ca04b 100644 --- a/repos/gems/src/app/window_layouter/window.h +++ b/repos/gems/src/app/window_layouter/window.h @@ -187,21 +187,24 @@ class Window_layouter::Window : public List_model::Element { _dragged_element = element; - _drag_left_border = (element.type == Window::Element::LEFT) - || (element.type == Window::Element::TOP_LEFT) - || (element.type == Window::Element::BOTTOM_LEFT); + if (_resizeable) { - _drag_right_border = (element.type == Window::Element::RIGHT) - || (element.type == Window::Element::TOP_RIGHT) - || (element.type == Window::Element::BOTTOM_RIGHT); + _drag_left_border = (element.type == Window::Element::LEFT) + || (element.type == Window::Element::TOP_LEFT) + || (element.type == Window::Element::BOTTOM_LEFT); - _drag_top_border = (element.type == Window::Element::TOP) - || (element.type == Window::Element::TOP_LEFT) - || (element.type == Window::Element::TOP_RIGHT); + _drag_right_border = (element.type == Window::Element::RIGHT) + || (element.type == Window::Element::TOP_RIGHT) + || (element.type == Window::Element::BOTTOM_RIGHT); - _drag_bottom_border = (element.type == Window::Element::BOTTOM) - || (element.type == Window::Element::BOTTOM_LEFT) - || (element.type == Window::Element::BOTTOM_RIGHT); + _drag_top_border = (element.type == Window::Element::TOP) + || (element.type == Window::Element::TOP_LEFT) + || (element.type == Window::Element::TOP_RIGHT); + + _drag_bottom_border = (element.type == Window::Element::BOTTOM) + || (element.type == Window::Element::BOTTOM_LEFT) + || (element.type == Window::Element::BOTTOM_RIGHT); + } _orig_geometry = _geometry; _drag_geometry = _geometry; From 8d62f21b4058ad118b3de418006c28d3651c6ecc Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 14 Jun 2019 16:18:58 +0200 Subject: [PATCH 27/67] autopilot: support arch-specific build directories Replace the notion of board-specific platforms by clear definition architecture and board. Also added new command line switch for "targets" -t test target as triple of architecture-board-kernel, e.g., arm_v7a-pbxa9-hw Related to #3316 Fixes #3417 --- tool/autopilot | 218 +++++++++++++++++++++++++++++++------------------ 1 file changed, 138 insertions(+), 80 deletions(-) diff --git a/tool/autopilot b/tool/autopilot index 679519c22eb..6499aef43f9 100755 --- a/tool/autopilot +++ b/tool/autopilot @@ -5,9 +5,10 @@ # \author Norman Feske # \date 2011-07-2 # -# The autopilot utility automates the process of executing multiple run -# scripts on different platforms. For each executed run script, the exit -# value is checked and the result gets logged to a file. +# The autopilot utility automates the process of executing multiple run scripts +# on different test targets. Each target is a combination of CPU architecture, +# hardware board, and kernel. For each executed run script, the exit value is +# checked and the result gets logged to a file. # ## @@ -43,10 +44,10 @@ proc default_test_dir { } { global env; return "/tmp/autopilot.$env(USER)" } proc help { } { set help_text { - Automatically execute test cases on different platforms + Automatically execute test cases on different test targets - usage: autopilot [-p ...] - [-k ...] + usage: autopilot [-t ...] + [-p -k ...] [-r ...] [-d ] [-j ] [-i ] @@ -54,12 +55,20 @@ proc help { } { [--stdout] [--skip-clean-rules] [--enable-ccache] + -t test target as triple of architecture-board-kernel, + e.g., arm_v7a-pbxa9-hw + -p platform as pair of architecture-board, e.g., + x86_64-pc or arm_v8a-rpi3 (must specify -k too) + -k kernel to use on all platforms configured via -p + -r run scenario to test on all configured targets resp. + platform-kernel pairs + + --cleanup remove test directory at exit + --enable-ccache use ccache instead of plain gcc --force replace test directory if it already exists --keep keep test directroy if it already exists - --cleanup remove test directory at exit - --stdout print test output instead of writing log files --skip-clean-rules skip cleanall tests, keep build-directory content - --enable-ccache use ccache instead of plain gcc + --stdout print test output instead of writing log files --time-stamp prepend log output lines with time stamps (requires ts utility) } @@ -111,83 +120,90 @@ proc fail { message error_code } { ## -# Return build directory used for the specified platform +# Return build directory used for the specified architecture # -proc build_dir { platform } { +proc build_dir { arch } { global test_dir - return [file join $test_dir $platform] + return [file join $test_dir $arch] } +## +# Return specific parts of target (arch-board-kernel) +# +proc get_arch { target } { return [lindex [split $target "-"] 0] } +proc get_board { target } { return [lindex [split $target "-"] 1] } +proc get_kernel { target } { return [lindex [split $target "-"] 2] } + ## -# Return name of log file for test of 'run_script' on 'platform' +# Return name of log file for test of 'run_script' on target # -proc log_file_name { platform kernel run_script } { - return $platform.$kernel.$run_script.log +proc log_file_name { arch board kernel run_script } { + return $arch.$board.$kernel.$run_script.log } ## -# Return path to log file for test of 'run_script' on 'platform' +# Return path to log file for test of 'run_script' on target # -proc log_file { platform kernel run_script } { +proc log_file { arch board kernel run_script } { global test_dir - return [file join $test_dir [log_file_name $platform $kernel $run_script]] + return [file join $test_dir [log_file_name $arch $board $kernel $run_script]] } ## # Return file descriptor for writing the log output of test case # -proc log_fd { platform kernel run_script } { +proc log_fd { arch board kernel run_script } { # if '--stdout' was specified, don't write log output to files if {[get_cmd_switch --stdout]} { return stdout } # create file descriptor of log file on demand global _log_fds - if {![info exists _log_fds($platform,$kernel,$run_script)]} { - set new_fd [open [log_file $platform $kernel $run_script] "WRONLY CREAT TRUNC"] - set _log_fds($platform,$kernel,$run_script) $new_fd + if {![info exists _log_fds($arch,$board,$kernel,$run_script)]} { + set new_fd [open [log_file $arch $board $kernel $run_script] "WRONLY CREAT TRUNC"] + set _log_fds($arch,$board,$kernel,$run_script) $new_fd } - return $_log_fds($platform,$kernel,$run_script) + return $_log_fds($arch,$board,$kernel,$run_script) } ## # Close file descriptor used for log output of test case # -proc close_log_fd { platform kernel run_script } { +proc close_log_fd { arch board kernel run_script } { global _log_fds - if {[info exists _log_fds($platform,$kernel,$run_script)]} { - close $_log_fds($platform,$kernel,$run_script) - unset _log_fds($platform,$kernel,$run_script) + if {[info exists _log_fds($arch,$board,$kernel,$run_script)]} { + close $_log_fds($arch,$board,$kernel,$run_script) + unset _log_fds($arch,$board,$kernel,$run_script) } } ## -# Execute single run script for specified platform +# Execute single run script for specified target # # \return true if run script succeeded # -proc execute_run_script { platform kernel run_script } { +proc execute_run_script { arch board kernel run_script } { set return_value true - set fd [log_fd $platform $kernel $run_script] + set fd [log_fd $arch $board $kernel $run_script] if {[catch { if {[get_cmd_switch --time-stamp]} { - exec make -C [build_dir $platform] [file join run $run_script] KERNEL=$kernel \ + exec make -C [build_dir $arch] [file join run $run_script] BOARD=$board KERNEL=$kernel \ |& ts "\[%F %H:%M:%S\]" >&@ $fd } else { - exec make -C [build_dir $platform] [file join run $run_script] KERNEL=$kernel \ + exec make -C [build_dir $arch] [file join run $run_script] BOARD=$board KERNEL=$kernel \ >&@ $fd } }]} { set return_value false } - close_log_fd $platform $kernel $run_script + close_log_fd $arch $board $kernel $run_script return $return_value } @@ -197,27 +213,27 @@ proc execute_run_script { platform kernel run_script } { # # \return list of unexpected files remaining after 'make cleanall' # -proc clean_build_dir { platform kernel } { +proc clean_build_dir { arch board kernel } { - set fd [log_fd $platform $kernel cleanall] + set fd [log_fd $arch $board $kernel cleanall] # make returns the exit code 2 on error if {[catch { - exec make -C [build_dir $platform] cleanall KERNEL=$kernel >@ $fd + exec make -C [build_dir $arch] cleanall BOARD=$board KERNEL=$kernel >@ $fd }] == 2} { - close_log_fd $platform $kernel cleanall + close_log_fd $arch $board $kernel cleanall return [list "clean rule terminated abnormally"] } - close_log_fd $platform $kernel cleanall + close_log_fd $arch $board $kernel cleanall } ## # Obtain information about residual files in the build directory # -proc build_dir_remainings { platform } { +proc build_dir_remainings { arch } { - set remainings [split [exec sh -c "cd [build_dir $platform]; find . -mindepth 1"] "\n"] + set remainings [split [exec sh -c "cd [build_dir $arch]; find . -mindepth 1"] "\n"] set unexpected { } foreach r $remainings { @@ -230,14 +246,14 @@ proc build_dir_remainings { platform } { } -proc build_failed_because_of_missing_run_script { platform kernel run_script } { +proc build_failed_because_of_missing_run_script { arch board kernel run_script } { # we cannot inspect any logfile when --stdout was used if {[get_cmd_switch --stdout]} { return 0 } # grep log output for the respective error message of the build system if {[catch { - exec grep {^\(\[....-..-.. ..:..:..] \)*Error: No run script for} [log_file $platform $kernel $run_script] + exec grep {^\(\[....-..-.. ..:..:..] \)*Error: No run script for} [log_file $arch $board $kernel $run_script] }]} { return 0 } return 1 } @@ -247,11 +263,8 @@ proc build_failed_because_of_missing_run_script { platform kernel run_script } { # Collect command-line arguments # -set platforms { } -foreach_cmdline_arg p { global platforms; lappend platforms $p } - -set kernels { } -foreach_cmdline_arg k { global kernels; lappend kernels $k } +set targets { } +foreach_cmdline_arg t { global targets; lappend targets $t } set run_scripts { } foreach_cmdline_arg r { global run_scripts; lappend run_scripts $r } @@ -265,25 +278,61 @@ foreach_cmdline_arg j { global make_jobs; set make_jobs $j } # present help if explicitly requested if {[get_cmd_switch --help]} { help; exit 0 } +# +# Handle platform-kernel combinations by adding to targets +# +set platforms { } +foreach_cmdline_arg p { global platforms; lappend platforms $p } +set kernels { } +foreach_cmdline_arg k { global kernels; lappend kernels $k } + +if {![llength $platforms] != ![llength $kernels]} { + puts stderr "Error: -p and -k arguments only valid in combination" + help + exit -1 +} elseif { [llength $platforms] } { + foreach p $platforms { + foreach k $kernels { + lappend targets $p-$k + } + } +} + +unset platforms kernels + + # present help if arguments do not suffice -if {![llength $platforms]} { - puts stderr "Error: invalid arguments" +if {![llength $run_scripts]} { + puts stderr "Error: no run script specified" + help + exit -1 +} +if {![llength $targets]} { + puts stderr "Error: no test targets specified" help exit -1 } +set targets [lsort -unique $targets] + +# extract unique architectures from targets (for build-directory creation) +set architectures { } +foreach target $targets { + lappend architectures [get_arch $target] +} +set architectures [lsort -unique $architectures] # print information about the parameters -puts "genode dir : [genode_dir]" -puts "platforms : $platforms" -puts "run scripts : $run_scripts" -puts "kernels : $kernels" -puts "test dir : $test_dir" -puts "make -j : $make_jobs" +puts "genode dir : [genode_dir]" +puts "targets : $targets" +puts "architectures : $architectures" +puts "run scripts : $run_scripts" +puts "test dir : $test_dir" +puts "make -j : $make_jobs" # -# We first create all build directory for all platforms to back out early if -# any error occurs during the creation of build directories due to wrong +# We first create all build directory for all architectures to back out early +# if any error occurs during the creation of build directories due to wrong # command-line arguments. # @@ -298,21 +347,21 @@ if {[get_cmd_switch --force]} { wipe_test_dir } # create build directories -foreach platform $platforms { +foreach arch $architectures { - set build_dir [build_dir $platform] + set build_dir [build_dir $arch] if {[get_cmd_switch --keep] && [file exists $build_dir]} { continue } if {[catch { - exec [genode_dir]/tool/create_builddir $platform BUILD_DIR=$build_dir + exec [genode_dir]/tool/create_builddir $arch BUILD_DIR=$build_dir }]} { - fail "create_builddir for platform $platform failed" -1 + fail "create_builddir for architecture $arch failed" -1 } set build_conf [file join $build_dir etc build.conf] if {![file exists $build_conf]} { - fail "build dir for $platform lacks 'etc/build.conf' file" -2 + fail "build dir for $arch lacks 'etc/build.conf' file" -2 } # enable all repositories @@ -345,26 +394,25 @@ set info_file "autopilot.log" foreach_cmdline_arg i { global info_file; set info_file $i } set info_fd [open [file join $test_dir $info_file] "WRONLY CREAT TRUNC"] -foreach platform $platforms { - foreach kernel $kernels { - foreach run_script $run_scripts { - puts $info_fd "[log_file_name $platform $kernel $run_script]" - } +foreach t $targets { + foreach run_script $run_scripts { + puts $info_fd "[log_file_name [get_arch $t] [get_board $t] [get_kernel $t] $run_script]" } } close $info_fd # -# Revisit each platform's build directory and execute all test cases +# Revisit each architecture's build directory and execute all test cases for +# all specified targets # ## # Print label identifying the specified test case to stderr # -proc print_step_label { platform kernel step } { - puts -nonewline stderr "[format {%-30s} "$platform $kernel:"] [format {%-22s} $step] " +proc print_step_label { board kernel step } { + puts -nonewline stderr "[format {%-30s} "$board $kernel:"] [format {%-22s} $step] " } @@ -385,24 +433,29 @@ set exit_value 0 # execute run scripts -foreach platform $platforms { +foreach arch $architectures { - puts stderr "\n--- platform $platform ---" + puts stderr "\n--- architecture $arch ---" foreach run_script $run_scripts { - foreach kernel $kernels { - print_step_label $platform $kernel $run_script + foreach target $targets { + if { [get_arch $target] ne $arch } { continue } + + set board [get_board $target] + set kernel [get_kernel $target] + + print_step_label $board $kernel $run_script set time_start [clock seconds] - set result [execute_run_script $platform $kernel $run_script] + set result [execute_run_script $arch $board $kernel $run_script] set elapsed [elapsed_time $time_start [clock seconds]] if {$result} { puts stderr "-> OK ($elapsed)" } else { - if {[build_failed_because_of_missing_run_script $platform $kernel $run_script]} { + if {[build_failed_because_of_missing_run_script $arch $board $kernel $run_script]} { puts stderr "-> UNAVAILABLE" } else { puts stderr "-> ERROR ($elapsed)" @@ -415,13 +468,18 @@ foreach platform $platforms { if {[get_cmd_switch --skip-clean-rules]} continue # execute and validate cleanall rule - foreach kernel $kernels { - print_step_label $platform $kernel cleanall - clean_build_dir $platform $kernel + foreach target $targets { + if { [get_arch $target] ne $arch } { continue } + + set board [get_board $target] + set kernel [get_kernel $target] + + print_step_label $board $kernel cleanall + clean_build_dir $arch $board $kernel puts stderr "-> DONE" } - set pollution [build_dir_remainings $platform] + set pollution [build_dir_remainings $arch] if {[llength $pollution] == 0} { puts stderr "-> OK" } else { From d18f8eea2bf86c482b63aae273eb365e6c6b3be5 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 17 Jun 2019 14:38:47 +0200 Subject: [PATCH 28/67] window layouter: control maximize by editing rules This patch adds the missing propagation of the maximized state from the layout rules to the internal representation of a window. Without this patch this state could be toggled by clicking on the maximizer button only. --- repos/gems/src/app/window_layouter/assign.h | 2 ++ repos/gems/src/app/window_layouter/main.cc | 1 + 2 files changed, 3 insertions(+) diff --git a/repos/gems/src/app/window_layouter/assign.h b/repos/gems/src/app/window_layouter/assign.h index 41ee36cf8bd..7d30a047e4c 100644 --- a/repos/gems/src/app/window_layouter/assign.h +++ b/repos/gems/src/app/window_layouter/assign.h @@ -115,6 +115,8 @@ class Window_layouter::Assign : public List_model::Element return Rect(outer.p1() + target_geometry.p1(), outer.area()); } + bool maximized() const { return _maximized; } + /** * Call 'fn' with 'Registry' if label matches assignment * diff --git a/repos/gems/src/app/window_layouter/main.cc b/repos/gems/src/app/window_layouter/main.cc index 7cb8caccafa..66ed8929983 100644 --- a/repos/gems/src/app/window_layouter/main.cc +++ b/repos/gems/src/app/window_layouter/main.cc @@ -116,6 +116,7 @@ struct Window_layouter::Main : Operations, target.geometry(), _decorator_margins); member.window.outer_geometry(rect); + member.window.maximized(assign.maximized()); }); }); }); From 807f5d9af1767c47ce651a68ea93a641717dc9d9 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Mon, 17 Jun 2019 14:43:30 +0200 Subject: [PATCH 29/67] Use pthread_join in test/libc_pipe Ref #2303 --- repos/libports/src/test/libc_pipe/main.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/repos/libports/src/test/libc_pipe/main.cc b/repos/libports/src/test/libc_pipe/main.cc index 31da4be6e17..816dc99bf44 100644 --- a/repos/libports/src/test/libc_pipe/main.cc +++ b/repos/libports/src/test/libc_pipe/main.cc @@ -80,8 +80,7 @@ int main(int argc, char *argv[]) exit(1); } - /* pthread_join() is not implemented at this time */ - while (!reader_finished) { } + pthread_join(tid, NULL); printf("--- test finished ---\n"); From c34176580c56a5770601620b78c49a268e51a157 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Fri, 14 Jun 2019 16:15:50 +0200 Subject: [PATCH 30/67] os: recipe for 'trace_policy' * source packet for all trace policies issue #3294 --- repos/os/recipes/src/trace_policy/content.mk | 2 ++ repos/os/recipes/src/trace_policy/hash | 1 + repos/os/recipes/src/trace_policy/used_apis | 2 ++ 3 files changed, 5 insertions(+) create mode 100644 repos/os/recipes/src/trace_policy/content.mk create mode 100644 repos/os/recipes/src/trace_policy/hash create mode 100644 repos/os/recipes/src/trace_policy/used_apis diff --git a/repos/os/recipes/src/trace_policy/content.mk b/repos/os/recipes/src/trace_policy/content.mk new file mode 100644 index 00000000000..c59342778b7 --- /dev/null +++ b/repos/os/recipes/src/trace_policy/content.mk @@ -0,0 +1,2 @@ +SRC_DIR = src/lib/trace/policy include/trace +include $(GENODE_DIR)/repos/base/recipes/src/content.inc diff --git a/repos/os/recipes/src/trace_policy/hash b/repos/os/recipes/src/trace_policy/hash new file mode 100644 index 00000000000..aa9850174cd --- /dev/null +++ b/repos/os/recipes/src/trace_policy/hash @@ -0,0 +1 @@ +2019-06-14 6f91f5ab8ee729d536975b98ca82d527881e6797 diff --git a/repos/os/recipes/src/trace_policy/used_apis b/repos/os/recipes/src/trace_policy/used_apis new file mode 100644 index 00000000000..ec3bf565df2 --- /dev/null +++ b/repos/os/recipes/src/trace_policy/used_apis @@ -0,0 +1,2 @@ +base +os From 57e650ef2c3e88f2d27df6206385ccd9e07837ab Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Mon, 17 Jun 2019 17:38:54 +0200 Subject: [PATCH 31/67] gems: recipes for vfs_trace pluging * source recipe for vfs_trace * pkg for 'trace_fs' with runtime issue #3294 --- repos/gems/recipes/pkg/trace_fs/README | 1 + repos/gems/recipes/pkg/trace_fs/archives | 3 +++ repos/gems/recipes/pkg/trace_fs/hash | 1 + repos/gems/recipes/pkg/trace_fs/runtime | 19 +++++++++++++++++++ repos/gems/recipes/src/vfs_trace/content.mk | 9 +++++++++ repos/gems/recipes/src/vfs_trace/hash | 1 + repos/gems/recipes/src/vfs_trace/used_apis | 5 +++++ 7 files changed, 39 insertions(+) create mode 100644 repos/gems/recipes/pkg/trace_fs/README create mode 100644 repos/gems/recipes/pkg/trace_fs/archives create mode 100644 repos/gems/recipes/pkg/trace_fs/hash create mode 100644 repos/gems/recipes/pkg/trace_fs/runtime create mode 100644 repos/gems/recipes/src/vfs_trace/content.mk create mode 100644 repos/gems/recipes/src/vfs_trace/hash create mode 100644 repos/gems/recipes/src/vfs_trace/used_apis diff --git a/repos/gems/recipes/pkg/trace_fs/README b/repos/gems/recipes/pkg/trace_fs/README new file mode 100644 index 00000000000..5b5813f54f0 --- /dev/null +++ b/repos/gems/recipes/pkg/trace_fs/README @@ -0,0 +1 @@ +File system for providing access to Genode tracing diff --git a/repos/gems/recipes/pkg/trace_fs/archives b/repos/gems/recipes/pkg/trace_fs/archives new file mode 100644 index 00000000000..6565eacb3a4 --- /dev/null +++ b/repos/gems/recipes/pkg/trace_fs/archives @@ -0,0 +1,3 @@ +_/src/trace_policy +_/src/vfs +_/src/vfs_trace diff --git a/repos/gems/recipes/pkg/trace_fs/hash b/repos/gems/recipes/pkg/trace_fs/hash new file mode 100644 index 00000000000..dbc031a48b5 --- /dev/null +++ b/repos/gems/recipes/pkg/trace_fs/hash @@ -0,0 +1 @@ +2019-06-17 8f8feaf94c99cc2907d64304083e9cdf488c72c8 diff --git a/repos/gems/recipes/pkg/trace_fs/runtime b/repos/gems/recipes/pkg/trace_fs/runtime new file mode 100644 index 00000000000..eaf5201d86e --- /dev/null +++ b/repos/gems/recipes/pkg/trace_fs/runtime @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/repos/gems/recipes/src/vfs_trace/content.mk b/repos/gems/recipes/src/vfs_trace/content.mk new file mode 100644 index 00000000000..15f93fa1cf5 --- /dev/null +++ b/repos/gems/recipes/src/vfs_trace/content.mk @@ -0,0 +1,9 @@ +MIRROR_FROM_REP_DIR := lib/mk/vfs_trace.mk src/lib/vfs/trace + +content: $(MIRROR_FROM_REP_DIR) LICENSE + +$(MIRROR_FROM_REP_DIR): + $(mirror_from_rep_dir) + +LICENSE: + cp $(GENODE_DIR)/LICENSE $@ diff --git a/repos/gems/recipes/src/vfs_trace/hash b/repos/gems/recipes/src/vfs_trace/hash new file mode 100644 index 00000000000..ea6c46418af --- /dev/null +++ b/repos/gems/recipes/src/vfs_trace/hash @@ -0,0 +1 @@ +2019-06-14 e0aa8c2d7cc72565d00afb9f72b2da25000fbb9b diff --git a/repos/gems/recipes/src/vfs_trace/used_apis b/repos/gems/recipes/src/vfs_trace/used_apis new file mode 100644 index 00000000000..1d6ba0fc786 --- /dev/null +++ b/repos/gems/recipes/src/vfs_trace/used_apis @@ -0,0 +1,5 @@ +base +os +so +vfs +gems From d32e8390c20546f30c8e1d864c09646149ab4d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Tue, 18 Jun 2019 14:38:09 +0200 Subject: [PATCH 32/67] os: remove trace_fs This component is superseded by the 'vfs_trace' plugin. Issue #3294. --- repos/os/src/server/trace_fs/README | 61 - repos/os/src/server/trace_fs/buffer.h | 134 -- repos/os/src/server/trace_fs/chunk.h | 441 ------- repos/os/src/server/trace_fs/directory.h | 222 ---- repos/os/src/server/trace_fs/file.h | 220 ---- .../os/src/server/trace_fs/followed_subject.h | 283 ---- repos/os/src/server/trace_fs/main.cc | 1136 ----------------- repos/os/src/server/trace_fs/node.h | 89 -- repos/os/src/server/trace_fs/symlink.h | 41 - repos/os/src/server/trace_fs/target.mk | 6 - repos/os/src/server/trace_fs/trace_files.h | 438 ------- repos/ports/run/noux_trace_fs.run | 160 --- 12 files changed, 3231 deletions(-) delete mode 100644 repos/os/src/server/trace_fs/README delete mode 100644 repos/os/src/server/trace_fs/buffer.h delete mode 100644 repos/os/src/server/trace_fs/chunk.h delete mode 100644 repos/os/src/server/trace_fs/directory.h delete mode 100644 repos/os/src/server/trace_fs/file.h delete mode 100644 repos/os/src/server/trace_fs/followed_subject.h delete mode 100644 repos/os/src/server/trace_fs/main.cc delete mode 100644 repos/os/src/server/trace_fs/node.h delete mode 100644 repos/os/src/server/trace_fs/symlink.h delete mode 100644 repos/os/src/server/trace_fs/target.mk delete mode 100644 repos/os/src/server/trace_fs/trace_files.h delete mode 100644 repos/ports/run/noux_trace_fs.run diff --git a/repos/os/src/server/trace_fs/README b/repos/os/src/server/trace_fs/README deleted file mode 100644 index f5dcd307af6..00000000000 --- a/repos/os/src/server/trace_fs/README +++ /dev/null @@ -1,61 +0,0 @@ -The new _trace_fs_ server provides access to a trace session by providing a -file-system session as front end. Combined with Noux, it allows for the -interactive exploration and tracing of Genode's process tree using -traditional Unix tools. - -Each trace subject is represented by a directory ('thread_name.subject') that -contains specific files, which are used to control the tracing process of the -thread as well as storing the content of its trace buffer: - -:'enable': The tracing of a thread is activated if there is a valid policy - installed and the intend to trace the subject was made clear by writing '1' - to the 'enable' file. The tracing of a thread may be deactivated by writing a - '0' to this file. - -:'policy': A policy may be changed by overwriting the currently used one in the - 'policy' file. In this case, the old policy is replaced by the new one and - automatically used by the framework. - -:'buffer_size': Writing a value to the 'buffer_size' file changes the size of - the trace buffer. This value is evaluated only when reactivating the tracing - of the thread. - -:'events': The trace-buffer contents may be accessed by reading from the - 'events' file. New trace events are appended to this file. - -:'active': Reading the file will return whether the tracing is active (1) or - not (0). - -:'cleanup': Nodes of untraced subjects are kept as long as they do not change - their tracing state to dead. Dead untraced nodes are automatically removed - from the file system. Subjects that were traced before and are now untraced - can be removed by writing '1' to the 'cleanup' file. - -To use the trace_fs, a configuration similar to the following may be used: - -! -! -! -! -! -! -! - -:'interval': sets the period the Trace_session is polled. The - time is given in milliseconds. - -:'subject_limit': specifies how many trace subjects should by acquired at - max when the Trace_session is polled. - -:'trace_quota': is the amount of quota the trace_fs should use for the - Trace_session connection. The remaining amount of RAM quota will be used - for the actual nodes of the file system and the 'policy' as well as the - 'events' files. - -In addition, there are 'buffer_size' and 'buffer_size_limit' that define -the initial and the upper limit of the size of a trace buffer. - -A ready-to-use run script can by found in 'ports/run/noux_trace_fs.run'. diff --git a/repos/os/src/server/trace_fs/buffer.h b/repos/os/src/server/trace_fs/buffer.h deleted file mode 100644 index 595df39e64a..00000000000 --- a/repos/os/src/server/trace_fs/buffer.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * \brief Buffer class - * \author Josef Soentgen - * \date 2014-01-15 - */ - -/* - * Copyright (C) 2014-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _BUFFER_H_ -#define _BUFFER_H_ - -/* Genode includes */ -#include - -namespace Util { - - typedef Genode::size_t size_t; - - - /** - * Buffer merely wrapps a simple char array - */ - template - class Buffer - { - public: - - class Out_of_range { }; - - private: - - char _buf[CAPACITY]; - size_t _length; - - public: - - static size_t capacity() { return CAPACITY; } - - Buffer() : _length(0) { } - - Buffer(char const *s) - : - _length(Genode::min(Genode::strlen(s) + 1, CAPACITY)) - { - Genode::strncpy(_buf, s, _length); - } - - char const *data() const { return (_buf[_length -1 ] == '\0') ? _buf : ""; } - - char *data() { return _buf; } - - size_t length() const { return _length; } - - char & operator[](size_t i) - { - if (i >= CAPACITY) - throw Out_of_range(); - - return _buf[i]; - } - - void replace(char p, char c) - { - char *s = _buf; - for (; *s; s++) { - if (*s == p) - *s = c; - } - } - }; - - /** - * This class walks along a label and returns the next element on request - */ - class Label_walker - { - private: - - Buffer<64> _buffer; - char const *_label; - - char const *_next() - { - size_t i = 0; - - for (; *_label && (i < _buffer.capacity()); _label++, i++) { - /* check seperator */ - if ((*_label == ' ') && - (*(_label + 1) == '-') && - (*(_label + 2) == '>') && - (*(_label + 3) == ' ')) - break; - _buffer[i] = *_label; - } - - _buffer[i] = '\0'; - - /* sanatize the element */ - _buffer.replace('/', '_'); - - /* omit seperator */ - if (*_label) - _label += 4; - - return _label; - } - - - public: - - Label_walker(char const *label) : _label(label) { } - - /** - * Walk to the next element of the label - * - * \return pointer to the remaing part of the label - */ - char const *next() { return _next(); } - - /** - * Get current element of the label - * - * \return pointer to current element - */ - char const *element() { return _buffer.data(); } - }; -} - -#endif /* _BUFFER_H_ */ diff --git a/repos/os/src/server/trace_fs/chunk.h b/repos/os/src/server/trace_fs/chunk.h deleted file mode 100644 index 79fcfaa55c1..00000000000 --- a/repos/os/src/server/trace_fs/chunk.h +++ /dev/null @@ -1,441 +0,0 @@ -/* - * \brief Data structure for storing sparse files in RAM - * \author Norman Feske - * \date 2012-04-18 - */ - -/* - * Copyright (C) 2012-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _CHUNK_H_ -#define _CHUNK_H_ - -/* Genode includes */ -#include -#include -#include -#include - -namespace File_system { - - using namespace Genode; - - - /** - * Common base class of both 'Chunk' and 'Chunk_index' - */ - class Chunk_base : Noncopyable - { - public: - - class Index_out_of_range { }; - - protected: - - seek_off_t const _base_offset; - size_t _num_entries; /* corresponds to last used entry */ - - /** - * Test if specified range lies within the chunk - */ - void assert_valid_range(seek_off_t start, size_t len, - file_size_t chunk_size) const - { - if (zero()) return; - - if (start < _base_offset) - throw Index_out_of_range(); - - if (start + len > _base_offset + chunk_size) - throw Index_out_of_range(); - } - - Chunk_base(seek_off_t base_offset) - : _base_offset(base_offset), _num_entries(0) { } - - /** - * Construct zero chunk - * - * A zero chunk is a chunk that cannot be written to. When reading - * from it, it returns zeros. Because there is a single zero chunk - * for each chunk type, the base offset is meaningless. We use a - * base offset of ~0 as marker to identify zero chunks. - */ - Chunk_base() : _base_offset(~0L), _num_entries(0) { } - - public: - - /** - * Return absolute base offset of chunk in bytes - */ - seek_off_t base_offset() const { return _base_offset; } - - /** - * Return true if chunk is a read-only zero chunk - */ - bool zero() const { return _base_offset == (seek_off_t)(~0L); } - - /** - * Return true if chunk has no allocated sub chunks - */ - bool empty() const { return _num_entries == 0; } - }; - - - /** - * Chunk of bytes used as leaf in hierarchy of chunk indices - */ - template - class Chunk : public Chunk_base - { - private: - - char _data[CHUNK_SIZE]; - - public: - - enum { SIZE = CHUNK_SIZE }; - - /** - * Construct byte chunk - * - * \param base_offset absolute offset of chunk in bytes - * - * The first argument is unused. Its mere purpose is to make the - * signature of the constructor compatible to the constructor - * of 'Chunk_index'. - */ - Chunk(Allocator &, seek_off_t base_offset) - : - Chunk_base(base_offset) - { - memset(_data, 0, CHUNK_SIZE); - } - - /** - * Construct zero chunk - */ - Chunk() { } - - /** - * Return number of used entries - * - * The returned value corresponds to the index of the last used - * entry + 1. It does not correlate to the number of actually - * allocated entries (there may be ranges of zero blocks). - */ - file_size_t used_size() const { return _num_entries; } - - void write(char const *src, size_t len, seek_off_t seek_offset) - { - assert_valid_range(seek_offset, len, SIZE); - - /* offset relative to this chunk */ - seek_off_t const local_offset = seek_offset - base_offset(); - - memcpy(&_data[local_offset], src, len); - - _num_entries = max(_num_entries, local_offset + len); - } - - void read(char *dst, size_t len, seek_off_t seek_offset) const - { - assert_valid_range(seek_offset, len, SIZE); - - memcpy(dst, &_data[seek_offset - base_offset()], len); - } - - void truncate(file_size_t size) - { - assert_valid_range(size, 0, SIZE); - - /* - * Offset of the first free position (relative to the beginning - * this chunk). - */ - seek_off_t const local_offset = size - base_offset(); - - if (local_offset >= _num_entries) - return; - - memset(&_data[local_offset], 0, _num_entries - local_offset); - - _num_entries = local_offset; - } - }; - - - template - class Chunk_index : public Chunk_base - { - public: - - typedef ENTRY_TYPE Entry; - - enum { ENTRY_SIZE = ENTRY_TYPE::SIZE, - SIZE = ENTRY_SIZE*NUM_ENTRIES }; - - private: - - Allocator &_alloc; - - Entry * _entries[NUM_ENTRIES]; - - /** - * Return instance of a zero sub chunk - */ - static Entry const &_zero_chunk() - { - static Entry zero_chunk; - return zero_chunk; - } - - /** - * Return sub chunk at given index - * - * If there is no sub chunk at the specified index, this function - * transparently allocates one. Hence, the returned sub chunk - * is ready to be written to. - */ - Entry &_entry_for_writing(unsigned index) - { - if (index >= NUM_ENTRIES) - throw Index_out_of_range(); - - if (_entries[index]) - return *_entries[index]; - - seek_off_t entry_offset = base_offset() + index*ENTRY_SIZE; - - _entries[index] = new (&_alloc) Entry(_alloc, entry_offset); - - _num_entries = max(_num_entries, index + 1); - - return *_entries[index]; - } - - /** - * Return sub chunk at given index (for reading only) - * - * This function transparently provides a zero sub chunk for any - * index that is not populated by a real chunk. - */ - Entry const &_entry_for_reading(unsigned index) const - { - if (index >= NUM_ENTRIES) - throw Index_out_of_range(); - - if (_entries[index]) - return *_entries[index]; - - return _zero_chunk(); - } - - /** - * Return index of entry located at specified byte offset - * - * The caller of this function must make sure that the offset - * parameter is within the bounds of the chunk. - */ - unsigned _index_by_offset(seek_off_t offset) const - { - return (offset - base_offset()) / ENTRY_SIZE; - } - - /** - * Apply operation 'func' to a range of entries - */ - template - static void _range_op(THIS &obj, DATA *data, size_t len, - seek_off_t seek_offset, FUNC const &func) - { - /* - * Depending on whether this function is called for reading - * (const function) or writing (non-const function), the - * operand type is const or non-const Entry. The correct type - * is embedded as a trait in the 'FUNC' functor type. - */ - typedef typename FUNC::Entry Const_qualified_entry; - - obj.assert_valid_range(seek_offset, len, SIZE); - - while (len > 0) { - - unsigned const index = obj._index_by_offset(seek_offset); - - Const_qualified_entry &entry = FUNC::lookup(obj, index); - - /* - * Calculate byte offset relative to the chunk - * - * We cannot use 'entry.base_offset()' for this calculation - * because in the const case, the lookup might return a - * zero chunk, which has no defined base offset. Therefore, - * we calculate the base offset via index*ENTRY_SIZE. - */ - seek_off_t const local_seek_offset = - seek_offset - obj.base_offset() - index*ENTRY_SIZE; - - /* available capacity at 'entry' starting at seek offset */ - seek_off_t const capacity = ENTRY_SIZE - local_seek_offset; - seek_off_t const curr_len = min(len, capacity); - - /* apply functor (read or write) to entry */ - func(entry, data, curr_len, seek_offset); - - /* advance to next entry */ - len -= curr_len; - data += curr_len; - seek_offset += curr_len; - } - } - - struct Write_func - { - typedef ENTRY_TYPE Entry; - - static Entry &lookup(Chunk_index &chunk, unsigned i) { - return chunk._entry_for_writing(i); } - - void operator () (Entry &entry, char const *src, size_t len, - seek_off_t seek_offset) const - { - entry.write(src, len, seek_offset); - } - }; - - struct Read_func - { - typedef ENTRY_TYPE const Entry; - - static Entry &lookup(Chunk_index const &chunk, unsigned i) { - return chunk._entry_for_reading(i); } - - void operator () (Entry &entry, char *dst, size_t len, - seek_off_t seek_offset) const - { - if (entry.zero()) - memset(dst, 0, len); - else - entry.read(dst, len, seek_offset); - } - }; - - void _init_entries() - { - for (unsigned i = 0; i < NUM_ENTRIES; i++) - _entries[i] = 0; - } - - void _destroy_entry(unsigned i) - { - if (_entries[i] && (i < _num_entries)) { - destroy(&_alloc, _entries[i]); - _entries[i] = 0; - } - } - - public: - - /** - * Constructor - * - * \param alloc allocator to use for allocating sub-chunk - * indices and chunks - * \param base_offset absolute offset of the chunk in bytes - */ - Chunk_index(Allocator &alloc, seek_off_t base_offset) - : Chunk_base(base_offset), _alloc(alloc) { _init_entries(); } - - /** - * Construct zero chunk - */ - Chunk_index() : _alloc(*(Allocator *)0) { } - - /** - * Destructor - */ - ~Chunk_index() - { - for (unsigned i = 0; i < NUM_ENTRIES; i++) - _destroy_entry(i); - } - - /** - * Return size of chunk in bytes - * - * The returned value corresponds to the position after the highest - * offset that was written to. - */ - file_size_t used_size() const - { - if (_num_entries == 0) - return 0; - - /* size of entries that lie completely within the used range */ - file_size_t const size_whole_entries = ENTRY_SIZE*(_num_entries - 1); - - Entry *last_entry = _entries[_num_entries - 1]; - if (!last_entry) - return size_whole_entries; - - return size_whole_entries + last_entry->used_size(); - } - - /** - * Write data to chunk - */ - void write(char const *src, size_t len, seek_off_t seek_offset) - { - _range_op(*this, src, len, seek_offset, Write_func()); - } - - /** - * Read data from chunk - */ - void read(char *dst, size_t len, seek_off_t seek_offset) const - { - _range_op(*this, dst, len, seek_offset, Read_func()); - } - - /** - * Truncate chunk to specified size in bytes - * - * This function can be used to shrink a chunk only. Specifying a - * 'size' larger than 'used_size' has no effect. The value returned - * by 'used_size' refers always to the position of the last byte - * written to the chunk. - */ - void truncate(file_size_t size) - { - unsigned const trunc_index = _index_by_offset(size); - - if (trunc_index >= _num_entries) - return; - - for (unsigned i = trunc_index + 1; i < _num_entries; i++) - _destroy_entry(i); - - /* traverse into sub chunks */ - if (_entries[trunc_index]) - _entries[trunc_index]->truncate(size); - - _num_entries = trunc_index + 1; - - /* - * If the truncated at a chunk boundary, we can release the - * empty trailing chunk at 'trunc_index'. - */ - if (_entries[trunc_index] && _entries[trunc_index]->empty()) { - _destroy_entry(trunc_index); - _num_entries--; - } - } - }; -}; - -#endif /* _CHUNK_H_ */ diff --git a/repos/os/src/server/trace_fs/directory.h b/repos/os/src/server/trace_fs/directory.h deleted file mode 100644 index dfcda613a5c..00000000000 --- a/repos/os/src/server/trace_fs/directory.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * \brief File-system directory node - * \author Norman Feske - * \date 2012-04-11 - */ - -/* - * Copyright (C) 2012-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _DIRECTORY_H_ -#define _DIRECTORY_H_ - -/* Genode includes */ -#include - -/* local includes */ -#include -#include -#include - -namespace Trace_fs { - class Directory; -} - -class Trace_fs::Directory : public Node -{ - private: - - List _entries; - size_t _num_entries; - - public: - - Directory(char const *name) : _num_entries(0) { Node::name(name); } - - - /** - * Check if the directory has the specified subnode - * - * \param name name of the searched subnode - * - * \return true if the subnode was found, either false - */ - bool has_sub_node_unsynchronized(char const *name) const - { - Node const *sub_node = _entries.first(); - for (; sub_node; sub_node = sub_node->next()) - if (strcmp(sub_node->name(), name) == 0) - return true; - - return false; - } - - - /** - * Add node to the list of subnodes - * - * \param pointer to node - */ - void adopt_unsynchronized(Node *node) - { - /* - * XXX inc ref counter - */ - _entries.insert(node); - _num_entries++; - - mark_as_updated(); - } - - /** - * Remove the node from the list of subnodes - * - * \param node pointer to node - */ - void discard_unsynchronized(Node *node) - { - _entries.remove(node); - _num_entries--; - - mark_as_updated(); - } - - /** - * Lookup node which belongs to the specified path - * - * \param path path to lookup - * \param return_parent if true return parent node, otherwise - * actual path node - * - * \return node node founc - * \throws Lookup_failed - */ - Node *lookup(char const *path, bool return_parent = false) override - { - if (strcmp(path, "") == 0) { - return this; - } - - if (!path || path[0] == '/') - throw Lookup_failed(); - - /* find first path delimiter */ - unsigned i = 0; - for (; path[i] && path[i] != '/'; i++); - - /* - * If no path delimiter was found, we are the parent of the - * specified path. - */ - if (path[i] == 0 && return_parent) { - return this; - } - - /* - * The offset 'i' corresponds to the end of the first path - * element, which can be either the end of the string or the - * first '/' character. - */ - - /* try to find entry that matches the first path element */ - Node *sub_node = _entries.first(); - for (; sub_node; sub_node = sub_node->next()) - if ((strlen(sub_node->name()) == i) && - (strcmp(sub_node->name(), path, i) == 0)) - break; - - if (!sub_node) - throw Lookup_failed(); - - if (!contains_path_delimiter(path)) { - - /* - * Because 'path' is a basename that corresponds to an - * existing sub_node, we have found what we were looking - * for. - */ - return sub_node; - } - - /* - * As 'path' contains one or more path delimiters, traverse - * into the sub directory names after the first path element. - */ - - /* - * We cannot traverse into anything other than a directory. - * - * XXX we might follow symlinks here - */ - Directory *sub_dir = dynamic_cast(sub_node); - if (!sub_dir) - throw Lookup_failed(); - - return sub_dir->lookup(path + i + 1, return_parent); - } - - /** - * Return number of subnodes - */ - size_t num_entries() const { return _num_entries; } - - - /******************** - ** Node interface ** - ********************/ - - size_t read(char *dst, size_t len, seek_off_t seek_offset) - { - if (len < sizeof(Directory_entry)) { - Genode::error("read buffer too small for directory entry"); - return 0; - } - - seek_off_t index = seek_offset / sizeof(Directory_entry); - - if (seek_offset % sizeof(Directory_entry)) { - Genode::error("seek offset not alighed to sizeof(Directory_entry)"); - return 0; - } - - /* find list element */ - Node *node = _entries.first(); - for (unsigned i = 0; i < index && node; node = node->next(), i++); - - /* index out of range */ - if (!node) - return 0; - - Directory_entry *e = (Directory_entry *)(dst); - - if (dynamic_cast(node)) e->type = Directory_entry::TYPE_FILE; - if (dynamic_cast(node)) e->type = Directory_entry::TYPE_DIRECTORY; - if (dynamic_cast(node)) e->type = Directory_entry::TYPE_SYMLINK; - - strncpy(e->name, node->name(), sizeof(e->name)); - - return sizeof(Directory_entry); - } - - size_t write(char const *src, size_t len, seek_off_t seek_offset) - { - /* writing to directory nodes is not supported */ - return 0; - } - - Status status() const - { - Status s; - s.inode = inode(); - s.size = _num_entries * sizeof (Directory_entry); - s.mode = File_system::Status::MODE_DIRECTORY; - - return s; - } -}; - -#endif /* _DIRECTORY_H_ */ diff --git a/repos/os/src/server/trace_fs/file.h b/repos/os/src/server/trace_fs/file.h deleted file mode 100644 index 07a3fba215a..00000000000 --- a/repos/os/src/server/trace_fs/file.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * \brief File node - * \author Norman Feske - * \author Josef Soentgen - * \date 2012-04-11 - */ - -/* - * Copyright (C) 2012-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _FILE_H_ -#define _FILE_H_ - -/* Genode includes */ -#include -#include - -/* local includes */ -#include -#include - -namespace Trace_fs { - class Changeable_content; - class File; - class Buffered_file; -} - -/** - * - * - */ -class Trace_fs::Changeable_content -{ - protected: - - /** - * This member is used to communicate the state and - * must be set true by classes using this class in case - * the content has changed. - */ - bool _changed; - - /** - * This method is called when the content change is - * acknowledged. It may be overriden by any class using - * this particular class. - */ - virtual void _refresh_content() { } - - public: - - Changeable_content() : _changed(false) { } - - /** - * Check if the content was changed - * - * This evaluation has to be made by classes using this - * particular class. - * - * \return true if changed, otherwise false - */ - bool changed() const { return _changed; } - - - /** - * Acknowledge the content has changed - */ - void acknowledge_change() - { - _changed = false; - - _refresh_content(); - } -}; - - -/** - * File interface - */ - -class Trace_fs::File : public Node -{ - public: - - File(char const *name) - { - Node::name(name); - } - - virtual ~File() { } - - /******************** - ** Node interface ** - ********************/ - - virtual size_t read(char *dst, size_t len, seek_off_t seek_offset) = 0; - - virtual size_t write(char const *src, size_t len, seek_off_t seek_offset) = 0; - - virtual Status status() const = 0; - - /******************** - ** File interface ** - ********************/ - - virtual file_size_t length() const = 0; - - virtual void truncate(file_size_t size) = 0; -}; - -/** - * Memory buffered file - * - * This file merely exists in memory and grows automatically. - */ - -class Trace_fs::Buffered_file : public File -{ - private: - - typedef Chunk<4096> Chunk_level_3; - typedef Chunk_index<128, Chunk_level_3> Chunk_level_2; - typedef Chunk_index<64, Chunk_level_2> Chunk_level_1; - typedef Chunk_index<64, Chunk_level_1> Chunk_level_0; - - Chunk_level_0 _chunk; - - file_size_t _length; - - public: - - Buffered_file(Allocator &alloc, char const *name) - : File(name), _chunk(alloc, 0), _length(0) { } - - virtual size_t read(char *dst, size_t len, seek_off_t seek_offset) - { - file_size_t const chunk_used_size = _chunk.used_size(); - - if (seek_offset >= _length) - return 0; - - /* - * Constrain read transaction to available chunk data - * - * Note that 'chunk_used_size' may be lower than '_length' - * because 'Chunk' may have truncated tailing zeros. - */ - if (seek_offset + len >= _length) - len = _length - seek_offset; - - file_size_t read_len = len; - - if (seek_offset + read_len > chunk_used_size) { - if (chunk_used_size >= seek_offset) - read_len = chunk_used_size - seek_offset; - else - read_len = 0; - } - - _chunk.read(dst, read_len, seek_offset); - - /* add zero padding if needed */ - if (read_len < len) - memset(dst + read_len, 0, len - read_len); - - return len; - } - - virtual size_t write(char const *src, size_t len, seek_off_t seek_offset) - { - if (seek_offset == (seek_off_t)(~0)) - seek_offset = _chunk.used_size(); - - if (seek_offset + len >= Chunk_level_0::SIZE) { - len = (Chunk_level_0::SIZE-1) - seek_offset; - Genode::error(name(), ": size limit ", (long)Chunk_level_0::SIZE, " reached"); - } - - _chunk.write(src, len, (size_t)seek_offset); - - /* - * Keep track of file length. We cannot use 'chunk.used_size()' - * as file length because trailing zeros may by represented - * by zero chunks, which do not contribute to 'used_size()'. - */ - _length = max(_length, seek_offset + len); - - mark_as_updated(); - return len; - } - - virtual Status status() const - { - Status s; - - s.inode = inode(); - s.size = _length; - s.mode = File_system::Status::MODE_FILE; - - return s; - } - - virtual file_size_t length() const { return _length; } - - void truncate(file_size_t size) override - { - if (size < _chunk.used_size()) - _chunk.truncate(size); - - _length = size; - - mark_as_updated(); - } -}; - -#endif /* _FILE_H_ */ diff --git a/repos/os/src/server/trace_fs/followed_subject.h b/repos/os/src/server/trace_fs/followed_subject.h deleted file mode 100644 index 8a5d0fed940..00000000000 --- a/repos/os/src/server/trace_fs/followed_subject.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - * \brief Facility for managing the trace subjects - * \author Josef Soentgen - * \date 2014-01-22 - */ - -/* - * Copyright (C) 2014-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _SUBJECT_REGISTRY_H_ -#define _SUBJECT_REGISTRY_H_ - -#include -#include -#include - -#include -#include - -namespace Trace_fs { - typedef Genode::size_t size_t; - class Followed_subject; - class Followed_subject_registry; -} - -class Trace_fs::Followed_subject : public Directory -{ - public: - - /** - * This class manages the access to the trace subject's trace buffer - */ - class Trace_buffer_manager - { - public: - - class Already_managed { }; - class Not_managed { }; - - struct Process_entry - { - virtual size_t operator()(Genode::Trace::Buffer::Entry&) = 0; - }; - - private: - - Genode::Trace::Buffer *buffer; - Genode::Trace::Buffer::Entry current_entry; - - - public: - - Trace_buffer_manager(Genode::Region_map &rm, - Genode::Dataspace_capability ds_cap) - : - buffer(rm.attach(ds_cap)), - current_entry(buffer->first()) - { } - - size_t dump_entry(Process_entry &process) - { - size_t len = process(current_entry); - - current_entry = buffer->next(current_entry); - return len; - } - - bool last_entry() const - { - return current_entry.last(); - } - - void rewind() { current_entry = buffer->first(); } - }; - - - private: - - Genode::Allocator &_md_alloc; - - Genode::Region_map &_rm; - - int _handle; - - Genode::Trace::Subject_id _id; - Genode::Trace::Policy_id _policy_id; - - bool _was_traced; - - Trace_buffer_manager *_buffer_manager; - - public: - - Active_file active_file; - Buffer_size_file buffer_size_file; - Cleanup_file cleanup_file; - Enable_file enable_file; - Events_file events_file; - Policy_file policy_file; - - Followed_subject(Genode::Allocator &md_alloc, char const *name, - Genode::Region_map &rm, - Genode::Trace::Subject_id &id, int handle) - : - Directory(name), - _md_alloc(md_alloc), - _rm(rm), - _handle(handle), - _id(id), - _was_traced(false), - _buffer_manager(0), - active_file(_id), - buffer_size_file(), - cleanup_file(_id), - enable_file(_id), - events_file(_id, _md_alloc), - policy_file(_id, _md_alloc) - { - adopt_unsynchronized(&active_file); - adopt_unsynchronized(&cleanup_file); - adopt_unsynchronized(&enable_file); - adopt_unsynchronized(&events_file); - adopt_unsynchronized(&buffer_size_file); - adopt_unsynchronized(&policy_file); - } - - ~Followed_subject() - { - discard_unsynchronized(&active_file); - discard_unsynchronized(&cleanup_file); - discard_unsynchronized(&enable_file); - discard_unsynchronized(&events_file); - discard_unsynchronized(&buffer_size_file); - discard_unsynchronized(&policy_file); - } - - bool marked_for_cleanup() const { return cleanup_file.cleanup(); } - bool was_traced() const { return _was_traced; } - - Trace_buffer_manager* trace_buffer_manager() { return _buffer_manager; } - - void manage_trace_buffer(Genode::Dataspace_capability ds_cap) - { - if (_buffer_manager != 0) - throw Trace_buffer_manager::Already_managed(); - - _buffer_manager = new (&_md_alloc) Trace_buffer_manager(_rm, ds_cap); - } - - void unmanage_trace_buffer() - { - if (_buffer_manager == 0) - throw Trace_buffer_manager::Not_managed(); - - destroy(&_md_alloc, _buffer_manager); - _buffer_manager = 0; - } - - const Genode::Trace::Subject_id id() const { return _id; } - - const Genode::Trace::Policy_id policy_id() const { return _policy_id; } - void policy_id(Genode::Trace::Policy_id &id) { _policy_id.id = id.id; } - bool policy_valid() const { return (_policy_id.id != 0); } - void invalidate_policy() { _policy_id = Genode::Trace::Policy_id(); } - - int handle() const { return _handle; } -}; - - -/** - * This registry contains all current followed trace subjects - */ -class Trace_fs::Followed_subject_registry -{ - public: - - class Invalid_subject { }; - class Out_of_subject_handles { }; - - private: - - /* XXX abitrary limit - needs to be revisited when highly - * dynamic scenarios are executed */ - enum { MAX_SUBJECTS = 1024U }; - - Followed_subject *_subjects[MAX_SUBJECTS]; - - Genode::Allocator &_md_alloc; - - /** - * Find free subject handle - * - * \throw Out_of_subject_handles - */ - int _find_free_handle() - { - for (unsigned i = 0; i < MAX_SUBJECTS; i++) - if (!_subjects[i]) { - return i; - } - - throw Out_of_subject_handles(); - } - - bool _in_range(int handle) const - { - return ((handle >= 0) && (handle < MAX_SUBJECTS)); - } - - public: - - Followed_subject_registry(Genode::Allocator &md_alloc) - : - _md_alloc(md_alloc) - { - for (unsigned i = 0; i < MAX_SUBJECTS; i++) - _subjects[i] = 0; - } - - /** - * Return maximal number of subject that can be stored in the registry - * - * \return maximal number of subjects - */ - unsigned max_subjects() const { return MAX_SUBJECTS; } - - /** - * Allocate new subject - * - * \param name name of subject - * \param id subject id of tracre subject - */ - Followed_subject *alloc(char const *name, Genode::Trace::Subject_id &id, - Genode::Region_map &rm) - { - int handle = _find_free_handle(); - - _subjects[handle] = new (&_md_alloc) Followed_subject(_md_alloc, name, rm, id, handle); - - return _subjects[handle]; - } - - /** - * Free subject - * - * \param subject pointer to subject - */ - void free(Followed_subject *subject) - { - int handle = subject->handle(); - - if (!_in_range(handle)) - return; - - if(!_subjects[handle]) - return; - - _subjects[handle] = 0; - destroy(&_md_alloc, subject); - } - - /** - * Lookup subject by using the id - * - * \throw Invalid_subject(); - */ - Followed_subject *lookup(Genode::Trace::Subject_id const &sid) - { - for (unsigned i = 0; i < MAX_SUBJECTS; i++) - if (_subjects[i]) { - if (_subjects[i]->id().id == sid.id) - return _subjects[i]; - } - - throw Invalid_subject(); - } -}; - -#endif /* _SUBJECT_REGISTRY_H_ */ diff --git a/repos/os/src/server/trace_fs/main.cc b/repos/os/src/server/trace_fs/main.cc deleted file mode 100644 index 8205eb3f9c0..00000000000 --- a/repos/os/src/server/trace_fs/main.cc +++ /dev/null @@ -1,1136 +0,0 @@ -/* - * \brief Trace file system - * \author Josef Soentgen - * \date 2014-01-15 - */ - -/* - * Copyright (C) 2014-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -/* Genode includes */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* local includes */ -#include -#include -#include -#include - - -namespace Trace_fs { - - using File_system::Packet_descriptor; - using File_system::Path; - - class Trace_file_system; - struct Policy; - struct Main; - struct Session_component; - struct Root; -} - - -/** - * Session-specific policy defined by the configuation - */ -struct Trace_fs::Policy -{ - uint64_t interval; /* in milliseconds */ - unsigned subject_limit; - Genode::Number_of_bytes trace_quota; - Genode::Number_of_bytes trace_meta_quota; - Genode::Number_of_bytes buffer_size; - Genode::Number_of_bytes buffer_size_max; - unsigned trace_parent_levels; - - static Number_of_bytes _kib(size_t value) { return value * (1 << 10); } - static Number_of_bytes _mib(size_t value) { return value * (1 << 20); } - - static Policy from_xml(Xml_node node) - { - return Policy { - .interval = node.attribute_value("interval", (uint64_t)1000), - .subject_limit = node.attribute_value("subject_limit", 128U), - .trace_quota = node.attribute_value("trace_quota", _mib(32)), - .trace_meta_quota = node.attribute_value("trace_meta_quota", _kib(256)), - .buffer_size = node.attribute_value("buffer_size", _kib(32)), - .buffer_size_max = node.attribute_value("buffer_size_max", _mib(1)), - .trace_parent_levels = node.attribute_value("parent_levels", 0U) - }; - } -}; - - -/** - * Return true if 'str' is a valid file name - */ -static inline bool valid_filename(char const *str) -{ - if (!str) return false; - - /* must have at least one character */ - if (str[0] == 0) return false; - - /* must not contain '/' or '\' or ':' */ - if (File_system::string_contains(str, '/') || - File_system::string_contains(str, '\\') || - File_system::string_contains(str, ':')) - return false; - - return true; -} - -/** - * This class updates the file system - * - * In this context updating means creating the files and directories if - * needed, refreshing their content or deleting them if they are no - * longer of any use. - */ -class Trace_fs::Trace_file_system -{ - private: - - /* local abbreviations */ - typedef Genode::size_t size_t; - - typedef Genode::Trace::Subject_id Subject_id; - typedef Genode::Trace::Subject_info Subject_info; - typedef Genode::Trace::Connection Trace; - - /** - * Simple node list - * - * This list is used to temporarily store pointers to all nodes - * needed for representing a trace subject in the file system when - * creating or cleaning up the file system hierachie. - */ - class Node_list - { - private: - - /** - * Node list element class - * - * A element only contains a pointer to the actual node. - */ - struct Node_list_entry : public Genode::List::Element - { - Node *node; - - Node_list_entry(Node *n) : node(n) { } - }; - - Genode::Allocator &_md_alloc; - - Genode::List _list; - - public: - - Node_list(Genode::Allocator &md_alloc) : _md_alloc(md_alloc) { } - - /** - * Free all memory automatically if the object goes out of - * scope or rather is deleted. - */ - ~Node_list() - { - for (Node_list_entry *e = _list.first(); e; ) { - Node_list_entry *cur = e; - e = e->next(); - - _list.remove(cur); - destroy(&_md_alloc, cur); - } - } - - /** - * Insert a node in the list - * - * \param node pointer to node - */ - void push(Node *node) - { - Node_list_entry *e = new (&_md_alloc) Node_list_entry(node); - _list.insert(e); - } - - /** - * Remove the first node from the list - * - * The first element will be removed from the list and the node - * is returned. - * - * \return pointer to node or 0 - */ - Node *pop() - { - Node_list_entry *e = _list.first(); - if (e) { - Node *node = e->node; - - _list.remove(e); - destroy(&_md_alloc, e); - - return node; - } - - return 0; - } - - /** - * Return the node pointer of the first element in the list - * - * This method only returns the pointer but leaves the list - * element in good order. - * - * \return pointer to node of the first element or 0 - */ - Node *first() - { - Node_list_entry *e = _list.first(); - return e ? e->node : 0; - } - }; - - - /** - * This class implements the Process_entry functor class - * - * It is needed by the Trace_buffer_manager to process a entry - * from the Trace::Buffer. - */ - template - class Process_entry : public Followed_subject::Trace_buffer_manager::Process_entry - { - private: - - char _buf[CAPACITY]; - size_t _length; - - - public: - - Process_entry() : _length(0) { _buf[0] = 0; } - - /** - * Return capacity of the internal buffer - * - * \return capacity of the buffer in bytes - */ - size_t capacity() const { return CAPACITY; } - - /** - * Return data of the processed Trace::Buffer::Entry - * - * \return pointer to data - */ - char const *data() const { return _buf; } - - /** - * Functor for processing a Trace:Buffer::Entry - * - * \param entry reference of Trace::Buffer::Entry - * - * \return length of processed Trace::Buffer::Entry - */ - Genode::size_t operator()(Genode::Trace::Buffer::Entry &entry) - { - Genode::size_t len = Genode::min(entry.length() + 1, CAPACITY); - Genode::memcpy(_buf, entry.data(), len); - _buf[len - 1] = '\n'; - - _length = len; - - return len; - } - }; - - - Genode::Region_map &_rm; - Genode::Allocator &_alloc; - Genode::Trace::Connection &_trace; - Directory &_root_dir; - - size_t _buffer_size; - size_t _buffer_size_max; - - Followed_subject_registry _followed_subject_registry; - - - /** - * Cast Node pointer to Directory pointer - * - * \param node pointer to node - */ - Directory *_node_to_directory(Node *node) - { - return dynamic_cast(node); - } - - /** - * Gather recent trace events - * - * \param subject pointer to subject - */ - void _gather_events(Followed_subject *subject) - { - Followed_subject::Trace_buffer_manager *manager = subject->trace_buffer_manager(); - if (!manager) - return; - - Process_entry<512> process_entry; - - while (!manager->last_entry()) { - size_t len = manager->dump_entry(process_entry); - - if (len == 0) - continue; - - try { subject->events_file.append(process_entry.data(), len); } - catch (...) { Genode::error("could not write entry"); } - } - - if (manager->last_entry()) { - manager->rewind(); - } - } - - /** - * Disable tracing of a followed subject - * - * \param subject pointer to subject - */ - void _disable_tracing(Followed_subject *subject) - { - subject->active_file.set_inactive(); - - _trace.pause(subject->id()); - _gather_events(subject); - try { subject->unmanage_trace_buffer(); } - catch (...) { Genode::error("trace buffer was not managed"); } - _trace.free(subject->id()); - } - - /** - * Enable tracing of a followed subject - * - * \param subject pointer to subject - */ - void _enable_tracing(Followed_subject *subject) - { - try { - _trace.trace(subject->id().id, subject->policy_id().id, - subject->buffer_size_file.size()); - - try { subject->manage_trace_buffer(_trace.buffer(subject->id())); } - catch (...) { Genode::error("trace buffer is already managed"); } - - subject->active_file.set_active(); - } - catch (...) { Genode::error("could not enable tracing"); } - } - - /** - * Search recursively the parent node for the corresponding label - * - * \param list list of traversed nodes - * \param walker label walking object - * \param parent parent node of the current directory - * - * \return parent node for the given label - */ - Directory* _find_parent_node(Node_list &list, Util::Label_walker &walker, - Directory &parent) - { - char const *remainder = walker.next(); - - Directory *child; - - try { child = _node_to_directory(parent.lookup(walker.element())); } - catch (File_system::Lookup_failed) { - try { - child = new (&_alloc) Directory(walker.element()); - parent.adopt_unsynchronized(child); - } - catch (...) { - Genode::error("could not create '", walker.element(), "'"); - return 0; - } - } - - list.push(child); - - if (!*remainder) { - return child; - } else { - return _find_parent_node(list, walker, *child); - } - } - - /** - * Remove unsused nodes and free the memory - * - * All nodes are removed from the list and discarded from their - * parent until we hit a node or rather a parent that still has - * child nodes. In this case we stop. The remaining entries in - * the node list are freed when the Node_list is deleted. - * - * \param list reference to list - */ - void _remove_nodes(Node_list &list) - { - while (Node *child = list.pop()) { - Node *parent = list.first(); - - Directory *dir = dynamic_cast(child); - if (dir->num_entries() == 0) { - - if (parent) { - Directory *dir = dynamic_cast(parent); - if (!(Genode::strcmp(dir->name(), child->name()) == 0)) - dir->discard_unsynchronized(child); - } - - destroy(&_alloc, dir); - } else { - /* do not bother any further, node has other children */ - break; - } - } - } - - - public: - - /** - * Constructor - */ - Trace_file_system(Genode::Region_map &rm, - Genode::Allocator &alloc, - Trace &trace, - Directory &root_dir, - size_t buffer_size, - size_t buffer_size_max) - : - _rm(rm), _alloc(alloc), _trace(trace), _root_dir(root_dir), - _buffer_size(buffer_size), _buffer_size_max(buffer_size_max), - _followed_subject_registry(_alloc) - { } - - /** - * Handle the change of the content of a node - * - * XXX This method could be made much simpler if a Node would - * store the subject_id and could be used to make the lookup. - */ - void handle_changed_node(Node *node) - { - Followed_subject *subject = 0; - bool policy_changed = false; - - using namespace File_system; - - /** - * It is enough to invoke acknowledge_change() on the Cleanup_file. - * Therefore here is nothing to be done. - */ - Cleanup_file *cleanup_file = dynamic_cast(node); - if (cleanup_file) { - return; - } - - Policy_file *policy_file = dynamic_cast(node); - if (policy_file) { - try { - subject = _followed_subject_registry.lookup(policy_file->id()); - size_t policy_length = policy_file->length(); - - /* policy was changed, unload old one first */ - if (subject->policy_valid()) { - _trace.unload_policy(subject->policy_id()); - - subject->invalidate_policy(); - } - - /** - * Copy the new policy only if it may containg something useful. - * XXX: It might be better to check for a more reaseonable length. - */ - if (policy_length > 0) { - try { - Genode::Trace::Policy_id id = _trace.alloc_policy(policy_length); - - Genode::Dataspace_capability ds_cap = _trace.policy(id); - if (ds_cap.valid()) { - void *ram = _rm.attach(ds_cap); - size_t n = policy_file->read((char *)ram, policy_length, 0UL); - - if (n != policy_length) { - Genode::error("error while copying policy content"); - } else { subject->policy_id(id); } - - _rm.detach(ram); - } - } - catch (...) { Genode::error("could not allocate policy"); } - } - - policy_changed = true; - } - catch (Trace_fs::Followed_subject_registry::Invalid_subject) { } - } - - Enable_file *enable_file = dynamic_cast(node); - if (enable_file) { - try { subject = _followed_subject_registry.lookup(enable_file->id()); } - catch (Trace_fs::Followed_subject_registry::Invalid_subject) { } - } - - /** - * Perform the action which was originally intended. This is actually - * safe because at this point we got invoked by either the Enable_file - * or Policy_file file. - */ - Subject_info info = _trace.subject_info(subject->id()); - Subject_info::State state = info.state(); - - /* tracing already enabled but policy has changed */ - if (subject->enable_file.enabled() && policy_changed) { - /* disable tracing first */ - if (state == Subject_info::State::TRACED) - _disable_tracing(subject); - - /* reenable only if the policy is actually valid */ - if (subject->policy_valid()) - _enable_tracing(subject); - } - /* subject is untraced but tracing is now enabled */ - else if (subject->enable_file.enabled() && - (state == Subject_info::State::UNTRACED)) { - if (subject->policy_valid()) - _enable_tracing(subject); - } - /* subject is traced but tracing is now disabled */ - else if (!subject->enable_file.enabled() && - (state == Subject_info::State::TRACED)) { - _disable_tracing(subject); - } - } - - /** - * Update the trace subjects - * - * \param subject_limit limit the number of trace subjects - */ - void update(int subject_limit) - { - Genode::Trace::Subject_id subjects[subject_limit]; - - size_t num_subjects = _trace.subjects(subjects, subject_limit); - - /* traverse current trace subjects */ - for (size_t i = 0; i < num_subjects; i++) { - Subject_info info = _trace.subject_info(subjects[i]); - Subject_info::State state = info.state(); - - /* opt-out early */ - switch (state) { - case Subject_info::State::INVALID: - case Subject_info::State::FOREIGN: - case Subject_info::State::ERROR: - continue; - break; /* never reached */ - default: - break; - } - - Followed_subject *followed_subject; - - try { - /* old subject found */ - followed_subject = _followed_subject_registry.lookup(subjects[i]); - - /** - * Update content of the corresponding events file - */ - if (state == Subject_info::State::TRACED) { - _gather_events(followed_subject); - continue; - } - - /** - * The subject is either UNTRACED or DEAD in which case we want to remove - * the nodes if they are marked for deletion. - */ - if (followed_subject->marked_for_cleanup() || - (!followed_subject->was_traced() && state == Subject_info::State::DEAD)) { - char const *label = info.session_label().string(); - - Node_list list(_alloc); - Util::Label_walker walker(label); - - Directory *parent = _find_parent_node(list, walker, _root_dir); - if (!parent) { - Genode::error("could not find parent node for label:'", label, "'"); - continue; - } - - parent->discard_unsynchronized(followed_subject); - _remove_nodes(list); - _followed_subject_registry.free(followed_subject); - continue; - } - } catch (Trace_fs::Followed_subject_registry::Invalid_subject) { - - /* ignore unknown but already dead subject */ - if (state == Subject_info::State::DEAD) - continue; - - /* new subject */ - char const *label = info.session_label().string(); - char const *name = info.thread_name().string(); - - Util::Buffer<64> subject_dir_name; - Genode::snprintf(subject_dir_name.data(), subject_dir_name.capacity(), - "%s.%d", name, subjects[i].id); - - subject_dir_name.replace('/', '_'); - - followed_subject = _followed_subject_registry.alloc(subject_dir_name.data(), - subjects[i], _rm); - - /* set trace buffer size */ - followed_subject->buffer_size_file.size_limit(_buffer_size_max); - followed_subject->buffer_size_file.size(_buffer_size); - - Node_list list(_alloc); - Util::Label_walker walker(label); - Directory *parent = _find_parent_node(list, walker, _root_dir); - if (!parent) { - Genode::error("could not find parent node on creation"); - continue; - } - - parent->adopt_unsynchronized(followed_subject); - } - } - } -}; - - -class Trace_fs::Session_component : public Session_rpc_object -{ - private: - - typedef File_system::Open_node Open_node; - - Genode::Entrypoint &_ep; - Ram_allocator &_ram; - Allocator &_md_alloc; - Directory &_root_dir; - Id_space _open_node_registry; - bool _writeable; - - unsigned _subject_limit; - uint64_t _poll_interval; - - Timer::Connection _fs_update_timer; - - Trace::Connection *_trace; - Trace_file_system *_trace_fs; - - Signal_handler _process_packet_handler { - _ep, *this, &Session_component::_process_packets }; - - Signal_handler _fs_update_handler { - _ep, *this, &Session_component::_fs_update }; - - - /************************** - ** File system updating ** - **************************/ - - /** - * Update the file system hierarchie and data of active trace subjects - */ - void _fs_update() - { - _trace_fs->update(_subject_limit); - } - - /****************************** - ** Packet-stream processing ** - ******************************/ - - /** - * Perform packet operation - */ - void _process_packet_op(Packet_descriptor &packet, Open_node &open_node) - { - void * const content = tx_sink()->packet_content(packet); - size_t const length = packet.length(); - - /* resulting length */ - size_t res_length = 0; - bool succeeded = false; - - switch (packet.operation()) { - - case Packet_descriptor::READ: - if (content && (packet.length() <= packet.size())) { - Locked_ptr node { open_node.node() }; - if (!node.valid()) - break; - res_length = node->read((char *)content, length, packet.position()); - succeeded = res_length > 0; - } - break; - - case Packet_descriptor::WRITE: - if (content && (packet.length() <= packet.size())) { - Locked_ptr node { open_node.node() }; - if (!node.valid()) - break; - res_length = node->write((char const *)content, length, packet.position()); - - /* File system session can't handle partial writes */ - if (res_length != length) { - Genode::error("partial write detected ", - res_length, " vs ", length); - /* don't acknowledge */ - return; - } - succeeded = true; - } - break; - - case Packet_descriptor::CONTENT_CHANGED: { - open_node.register_notify(*tx_sink()); - - /* notify_listeners may bounce the packet back*/ - Locked_ptr node { open_node.node() }; - if (!node.valid()) - return; - node->notify_listeners(); - - /* otherwise defer acknowledgement of this packet */ - return; - } - - case Packet_descriptor::READ_READY: - succeeded = true; - /* not supported */ - break; - - case Packet_descriptor::SYNC: - succeeded = true; - /* not supported */ - break; - } - - packet.length(res_length); - packet.succeeded(succeeded); - tx_sink()->acknowledge_packet(packet); - } - - void _process_packet() - { - Packet_descriptor packet = tx_sink()->get_packet(); - - /* assume failure by default */ - packet.succeeded(false); - - auto process_packet_fn = [&] (Open_node &open_node) { - _process_packet_op(packet, open_node); - }; - - try { - _open_node_registry.apply(packet.handle(), process_packet_fn); - } catch (Id_space::Unknown_id const &) { - Genode::error("Invalid_handle"); - } - - /* - * The 'acknowledge_packet' function cannot block because we - * checked for 'ready_to_ack' in '_process_packets'. - */ - tx_sink()->acknowledge_packet(packet); - } - - /** - * Called by signal handler, executed in the context of the main - * thread (not serialized with the RPC functions) - */ - void _process_packets() - { - while (tx_sink()->packet_avail()) { - - /* - * Make sure that the '_process_packet' function does not - * block. - * - * If the acknowledgement queue is full, we defer packet - * processing until the client processed pending - * acknowledgements and thereby emitted a ready-to-ack - * signal. Otherwise, the call of 'acknowledge_packet()' - * in '_process_packet' would infinitely block the context - * of the main thread. The main thread is however needed - * for receiving any subsequent 'ready-to-ack' signals. - */ - if (!tx_sink()->ready_to_ack()) - return; - - _process_packet(); - } - } - - /** - * Check if string represents a valid path (must start with '/') - */ - static void _assert_valid_path(char const *path) - { - if (!path || path[0] != '/') { - Genode::warning("malformed path '", path, "'"); - throw Lookup_failed(); - } - } - - - public: - - /** - * Constructor - */ - Session_component(size_t tx_buf_size, - Genode::Entrypoint &ep, - Genode::Ram_allocator &ram, - Genode::Region_map &rm, - Genode::Env &env, - Directory &root_dir, - Allocator &md_alloc, - Trace_fs::Policy policy) - : - Session_rpc_object(ram.alloc(tx_buf_size), rm, ep.rpc_ep()), - _ep(ep), - _ram(ram), - _md_alloc(md_alloc), - _root_dir(root_dir), - - _subject_limit(policy.subject_limit), - _poll_interval(policy.interval), - _fs_update_timer(env), - _trace(new (&_md_alloc) - Genode::Trace::Connection(env, policy.trace_quota, - policy.trace_meta_quota, - policy.trace_parent_levels)), - _trace_fs(new (&_md_alloc) - Trace_file_system(rm, _md_alloc, *_trace, _root_dir, - policy.buffer_size, policy.buffer_size_max)) - { - _tx.sigh_packet_avail(_process_packet_handler); - _tx.sigh_ready_to_ack(_process_packet_handler); - - /** - * Register '_fs_update' dispatch function as signal handler - * for polling the trace session. - */ - _fs_update_timer.sigh(_fs_update_handler); - - /** - * We need to scale _poll_interval because trigger_periodic() - * uses usec. - */ - _fs_update_timer.trigger_periodic(_poll_interval * 1000); - } - - /** - * Destructor - */ - ~Session_component() - { - destroy(&_md_alloc, _trace_fs); - destroy(&_md_alloc, _trace); - - Dataspace_capability ds = tx_sink()->dataspace(); - _ram.free(static_cap_cast(ds)); - } - - - /*************************** - ** File_system interface ** - ***************************/ - - File_handle file(Dir_handle dir_handle, Name const &name, Mode mode, bool create) - { - if (!valid_filename(name.string())) - throw Invalid_name(); - - auto file_fn = [&] (Open_node &open_node) { - - Locked_ptr dir { open_node.node() }; - - if (!dir.valid()) - throw Invalid_handle(); - - if (create) - throw Permission_denied(); - - File *file = dynamic_cast(dir->lookup(name.string())); - if (!file) - throw Invalid_name(); - - Open_node *open_file = - new (_md_alloc) Open_node(file->weak_ptr(), _open_node_registry); - - return open_file->id(); - }; - - try { - return File_handle { - _open_node_registry.apply(dir_handle, file_fn).value - }; - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } - } - - Symlink_handle symlink(Dir_handle dir_handle, Name const &name, bool create) - { - Genode::warning("symlinks not supported"); - throw Permission_denied(); - } - - Dir_handle dir(Path const &path, bool create) - { - char const *path_str = path.string(); - - _assert_valid_path(path_str); - - if (create) - throw Permission_denied(); - - if (!path.valid_string()) - throw Name_too_long(); - - Directory *dir = dynamic_cast(_root_dir.lookup(path_str + 1)); - if (!dir) - throw Invalid_name(); - - Open_node *open_dir = - new (_md_alloc) Open_node(dir->weak_ptr(), _open_node_registry); - - return Dir_handle { open_dir->id().value }; - } - - Node_handle node(Path const &path) - { - char const *path_str = path.string(); - - _assert_valid_path(path_str); - - Node *node = _root_dir.lookup(path_str + 1); - - Open_node *open_node = - new (_md_alloc) Open_node(node->weak_ptr(), _open_node_registry); - - return open_node->id(); - } - - void close(Node_handle handle) - { - auto close_fn = [&] (Open_node &open_node) { - - Locked_ptr node { open_node.node() }; - - if (!node.valid()) - throw Invalid_handle(); - - /** - * Acknowledge the change of the content of files which may be - * modified by the user of the file system. - */ - Changeable_content *changeable = dynamic_cast(&*node); - if (changeable) { - if (changeable->changed()) { - changeable->acknowledge_change(); - - /* let the trace fs perform the provoked actions */ - _trace_fs->handle_changed_node(&*node); - } - } - - /* - * Notify listeners about the changed file. - */ - node->notify_listeners(); - - /* - * De-allocate handle - */ - destroy(_md_alloc, &open_node); - }; - - try { - _open_node_registry.apply(handle, close_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } - } - - Status status(Node_handle node_handle) - { - auto status_fn = [&] (Open_node &open_node) { - Locked_ptr node { open_node.node() }; - if (!node.valid()) - throw Invalid_handle(); - return node->status(); - }; - - try { - return _open_node_registry.apply(node_handle, status_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } - } - - void control(Node_handle, Control) { } - void unlink(Dir_handle dir_handle, Name const &name) { } - - void truncate(File_handle handle, file_size_t size) - { - auto truncate_fn = [&] (Open_node &open_node) { - Locked_ptr node { open_node.node() }; - if (!node.valid()) - throw Invalid_handle(); - node->truncate(size); - }; - - try { - _open_node_registry.apply(handle, truncate_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } - } - - void move(Dir_handle, Name const &, Dir_handle, Name const &) { } -}; - - -class Trace_fs::Root : public Root_component -{ - private: - - Genode::Entrypoint &_ep; - Genode::Ram_allocator &_ram; - Genode::Region_map &_rm; - Genode::Env &_env; - - Directory &_root_dir; - - Genode::Attached_rom_dataspace _config { _env, "config" }; - - protected: - - Session_component *_create_session(const char *args) - { - /* - * Determine client-specific policy defined implicitly by - * the client's label. - */ - Session_label const label = label_from_args(args); - - Session_policy policy(label, _config.xml()); - - /* make sure that root directory is defined */ - if (!policy.has_attribute("root")) { - Genode::error("Missing \"root\" attribute in policy definition"); - throw Service_denied(); - } - - Trace_fs::Policy const attributes = Trace_fs::Policy::from_xml(policy); - - size_t ram_quota = - Arg_string::find_arg(args, "ram_quota" ).ulong_value(0); - size_t tx_buf_size = - Arg_string::find_arg(args, "tx_buf_size").ulong_value(0); - - if (!tx_buf_size) { - Genode::error(label, " requested a session with a zero length transmission buffer"); - throw Genode::Service_denied(); - } - - /* - * Check if donated ram quota suffices for session data, - * and communication buffer. - */ - size_t session_size = sizeof(Session_component) + tx_buf_size; - if (max((size_t)4096, session_size) > ram_quota) { - Genode::error("insufficient 'ram_quota', got ", ram_quota, ", " - "need ", session_size); - throw Insufficient_ram_quota(); - } - return new (md_alloc()) - Session_component(tx_buf_size, _ep, _ram, _rm, _env, _root_dir, - *md_alloc(), attributes); - } - - public: - - /** - * Constructor - * - * \param ep entrypoint - * \param sig_rec signal receiver used for handling the - * data-flow signals of packet streams - * \param md_alloc meta-data allocator - */ - Root(Genode::Entrypoint &ep, Allocator &md_alloc, Ram_allocator &ram, - Region_map &rm, Env &env, Directory &root_dir) - : - Root_component(&ep.rpc_ep(), &md_alloc), - _ep(ep), - _ram(ram), - _rm(rm), - _env(env), - _root_dir(root_dir) - { } -}; - - -struct Trace_fs::Main -{ - Env &_env; - - Directory root_dir = { "/" }; - - /* - * Initialize root interface - */ - Sliced_heap sliced_heap = { _env.ram(), _env.rm() }; - - Root fs_root = { _env.ep(), sliced_heap, _env.ram(), _env.rm(), _env, root_dir }; - - Main(Env &env) : _env(env) - { - env.parent().announce(env.ep().manage(fs_root)); - } -}; - -void Component::construct(Genode::Env &env) { static Trace_fs::Main main(env); } diff --git a/repos/os/src/server/trace_fs/node.h b/repos/os/src/server/trace_fs/node.h deleted file mode 100644 index 17785d99d61..00000000000 --- a/repos/os/src/server/trace_fs/node.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * \brief File-system node - * \author Norman Feske - * \date 2012-04-11 - */ - -/* - * Copyright (C) 2012-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _NODE_H_ -#define _NODE_H_ - -/* Genode includes */ -#include -#include -#include -#include - -namespace Trace_fs { - using namespace File_system; - using namespace Genode; - class Node; -} - -class Trace_fs::Node : public Node_base, public Weak_object, - public List::Element -{ - public: - - typedef char Name[128]; - - private: - - Name _name; - unsigned long const _inode; - - /** - * Generate unique inode number - */ - static unsigned long _unique_inode() - { - static unsigned long inode_count; - return ++inode_count; - } - - public: - - Node() - : _inode(_unique_inode()) - { _name[0] = 0; } - - virtual ~Node() { lock_for_destruction(); } - - unsigned long inode() const { return _inode; } - char const *name() const { return _name; } - - /** - * Assign name - */ - void name(char const *name) { strncpy(_name, name, sizeof(_name)); } - - virtual Status status() const = 0; - - virtual size_t read(char *dst, size_t len, seek_off_t) = 0; - virtual size_t write(char const *src, size_t len, seek_off_t) = 0; - - /* - * Directory functionality - */ - virtual Node *lookup(char const *path, bool return_parent = false) - { - Genode::error(__PRETTY_FUNCTION__, " called on a non-directory node"); - return nullptr; - } - - /* - * File functionality - */ - virtual void truncate(file_size_t size) - { - Genode::error(__PRETTY_FUNCTION__, " called on a non-file node"); - } -}; - -#endif /* _NODE_H_ */ diff --git a/repos/os/src/server/trace_fs/symlink.h b/repos/os/src/server/trace_fs/symlink.h deleted file mode 100644 index 84088ac4125..00000000000 --- a/repos/os/src/server/trace_fs/symlink.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * \brief Symlink file-system node - * \author Norman Feske - * \date 2012-04-11 - */ - -/* - * Copyright (C) 2012-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _SYMLINK_H_ -#define _SYMLINK_H_ - -/* local includes */ -#include - -namespace Trace_fs { - class Symlink; -} - -class Trace_fs::Symlink : public File -{ - public: - - Symlink(char const *name) : File(name) { } - - size_t read(char *dst, size_t len, seek_off_t seek_offset) { - return 0; } - - size_t write(char const *src, size_t len, seek_off_t seek_offset) { - return 0; } - - file_size_t length() const { return 0; } - - void truncate(file_size_t) { } -}; - -#endif /* _SYMLINK_H_ */ diff --git a/repos/os/src/server/trace_fs/target.mk b/repos/os/src/server/trace_fs/target.mk deleted file mode 100644 index 2ce96cc1bda..00000000000 --- a/repos/os/src/server/trace_fs/target.mk +++ /dev/null @@ -1,6 +0,0 @@ -TARGET = trace_fs -SRC_CC = main.cc -LIBS = base -INC_DIR += $(PRG_DIR) - -CC_CXX_WARN_STRICT = diff --git a/repos/os/src/server/trace_fs/trace_files.h b/repos/os/src/server/trace_fs/trace_files.h deleted file mode 100644 index 43d4b122bea..00000000000 --- a/repos/os/src/server/trace_fs/trace_files.h +++ /dev/null @@ -1,438 +0,0 @@ -/* - * \brief Trace files - * \author Josef Soentgen - * \date 2014-01-22 - */ - -/* - * Copyright (C) 2014-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _TRACE_FILES_H_ -#define _TRACE_FILES_H_ - -/* Genode includes */ -#include - -/* local includes */ -#include - - -namespace Trace_fs { - class State_file; - class Active_file; - class Cleanup_file; - class Enable_file; - class Events_file; - class Buffer_size_file; - class Policy_file; -} - -/** - * The State_file is a stateful file that is used to implement - * files in the file system, which may trigger a action in the - * file system backend. - */ - -class Trace_fs::State_file : public File, - public Changeable_content -{ - protected: - - bool _state; - - - public: - - State_file(char const *name) - : File(name), _state(false) { } - - bool state() const { return _state; } - - - /******************** - ** Node interface ** - ********************/ - - virtual size_t read(char *dst, size_t len, seek_off_t seek_offset) - { - /* limit len */ - if (len > 2) - len = 2; - - switch (len) { - case 2: - dst[1] = '\n'; - case 1: - dst[0] = 0x30 + (char)_state; - break; - default: - /* zero length is useless */ - break; - } - - return len; - } - - virtual size_t write(char const *src, size_t len, seek_off_t seek_offset) - { - char buf[32]; - if (len >= sizeof buf) - return 0; - - using namespace Genode; - - strncpy(buf, src, min(len + 1, sizeof (buf))); - - /** - * For now, we only check the leading digit and do not care - * about the rest. - */ - if (!strcmp(buf, "1", 1)) { - _state = true; - } - else if (!strcmp(buf, "0", 1)) { - _state = false; - } else { - /* silently ignore bogus writes */ - return 0; - } - - Changeable_content::_changed = true; - - return len; - } - - Status status() const - { - Status s; - - s.inode = inode(); - s.size = 2; - s.mode = File_system::Status::MODE_FILE; - - return s; - } - - /******************** - ** File interface ** - ********************/ - - file_size_t length() const { return 2; } - void truncate(file_size_t size) { } -}; - - -/** - * The Active_file node shows the state of the tracing - */ - -class Trace_fs::Active_file : public State_file -{ - private: - - Genode::Trace::Subject_id &_id; - bool _active; - - - public: - - Active_file(Genode::Trace::Subject_id &id) - : State_file("active"), _id(id) { } - - Genode::Trace::Subject_id& id() const { return _id; } - - bool active() const { return State_file::state(); } - - void set_active() { _state = true; } - void set_inactive() { _state = false; } -}; - - -/** - * The Cleanup_file is used to trigger the removal of files used by - * the traced subject and to free utilized memory. - */ - -class Trace_fs::Cleanup_file : public State_file -{ - private: - - Genode::Trace::Subject_id &_id; - - - public: - - Cleanup_file(Genode::Trace::Subject_id &id) - : State_file("cleanup"), _id(id) { } - - Genode::Trace::Subject_id& id() const { return _id; } - - bool cleanup() const { return State_file::state(); } -}; - - -/** - * The Enable_file is used to initiate the tracing process - */ - -class Trace_fs::Enable_file : public State_file -{ - private: - - Genode::Trace::Subject_id &_id; - - - public: - - Enable_file(Genode::Trace::Subject_id &id) - : State_file("enable"), _id(id) { } - - Genode::Trace::Subject_id& id() const { return _id; } - - bool enabled() const { return State_file::state(); } -}; - - -/** - * The Events_file encapsulates the trace buffer of traced thread - */ - -class Trace_fs::Events_file : public Buffered_file -{ - private: - - Genode::Trace::Subject_id &_id; - - - public: - - Events_file(Genode::Trace::Subject_id &id, - Allocator &md_alloc) - : Buffered_file(md_alloc, "events"), _id(id) { } - - Genode::Trace::Subject_id id() const { return _id; } - - size_t append(char const *src, size_t len) - { - Buffered_file::write(src, len, length()); - - return len; - } - - /******************** - ** File interface ** - ********************/ - - /* override to prevent the user from overriding the file */ - size_t write(char const *src, size_t len, seek_off_t seek_offset) { return 0; } - void truncate(file_size_t size) { } -}; - - -/** - * This file contains the size of the trace buffer - */ - -class Trace_fs::Buffer_size_file : public File, - public Changeable_content -{ - private: - - file_size_t _length; - unsigned long _size_limit; - unsigned long _size; - - char _content[32]; - Genode::size_t _content_filled; - - /** - * Check if new size honors the size limit - * - * \param size new size of the buffer - * \return size limit if new size is greater, otherwise new size - */ - size_t _check_size_limit(size_t size) - { - if (size > _size_limit) - return _size_limit; - else - return size; - } - - /** - * Evalute the current content of the buffer - */ - void _refresh_content() - { - unsigned long tmp = 0; - - _content[_content_filled - 1] = '\0'; - _content_filled = 0; - - _length = Genode::strlen(_content); - - /* account for \n when reading from the file */ - _length += 1; - - ascii_to(_content, tmp); - - _size = _check_size_limit(tmp); - } - - - public: - - /** - * Constructor - */ - Buffer_size_file() : File("buffer_size"), _size_limit(0), _size(0) { } - - /** - * Return current size of the trace buffer - */ - unsigned long size() const { return _size; } - - /** - * Set current size of the trace buffer - */ - void size(unsigned long size) - { - _size = _check_size_limit(size); - - /* update file content */ - _length = Genode::snprintf(_content, sizeof (_content), "%lu", _size); - - /* account for \n when reading from the file */ - _length += 1; - } - - /** - * Set max size of a trace buffer - */ - void size_limit(unsigned long limit) { _size_limit = limit; } - - /** - * Return maximal size of the trace buffer - */ - unsigned long size_limit() const { return _size_limit; } - - - /******************** - ** Node interface ** - ********************/ - - /** - * Read current maximal size of the trace buffer - */ - size_t read(char *dst, size_t len, seek_off_t seek_offset) - { - if (len > 32) { - Genode::error("len:'", len, "' to small"); - return 0; - } - - char buf[32]; - Genode::snprintf(buf, sizeof (buf), "%lu\n", _size); - memcpy(dst, buf, len); - - return len; - } - - /** - * Write new current maximal size of the trace buffer - */ - size_t write(char const *src, size_t len, seek_off_t seek_offset) - { - if ((_content_filled + len) > sizeof (_content)) - return 0; - - Genode::memcpy(_content + _content_filled, src, len); - _content_filled += len; - - Changeable_content::_changed = true; - - return len; - } - - Status status() const - { - Status s; - - s.inode = inode(); - s.size = _length; - s.mode = File_system::Status::MODE_FILE; - - return s; - } - - - /******************** - ** File interface ** - ********************/ - - file_size_t length() const { return _length; } - - void truncate(file_size_t size) { } -}; - - -/** - * Policy file - */ - -class Trace_fs::Policy_file : public Buffered_file, - public Changeable_content -{ - private: - - Genode::Trace::Subject_id &_id; - file_size_t _length; - - - public: - - Policy_file(Genode::Trace::Subject_id &id, - Genode::Allocator &md_alloc) - : Buffered_file(md_alloc, "policy"), _id(id) { } - - Genode::Trace::Subject_id& id() const { return _id; } - - - /******************** - ** Node interface ** - ********************/ - - size_t read(char *dst, size_t len, seek_off_t seek_offset) - { - return Buffered_file::read(dst, len, seek_offset); - } - - size_t write(char const *src, size_t len, seek_off_t seek_offset) - { - size_t written = Buffered_file::write(src, len, seek_offset); - - if (written > 0) - _changed = true; - - return written; - } - - - /******************** - ** File interface ** - ********************/ - - void truncate(file_size_t size) - { - Buffered_file::truncate(size); - - _changed = true; - } - -}; - -#endif /* _TRACE_FILES_H_ */ diff --git a/repos/ports/run/noux_trace_fs.run b/repos/ports/run/noux_trace_fs.run deleted file mode 100644 index 9f21f58038a..00000000000 --- a/repos/ports/run/noux_trace_fs.run +++ /dev/null @@ -1,160 +0,0 @@ -# -# The Linux version of Noux lacks the support for the fork system call. Hence, -# the run script is expected to fail. -# -if {[have_spec linux]} { - puts "Linux is unsupported." - exit 0 -} - -create_boot_directory - -import_from_depot [depot_user]/src/[base_src] \ - [depot_user]/pkg/[drivers_interactive_pkg] \ - [depot_user]/pkg/terminal \ - [depot_user]/src/init \ - [depot_user]/src/libc \ - [depot_user]/src/noux \ - [depot_user]/src/posix \ - [depot_user]/src/ncurses \ - [depot_user]/src/vim \ - [depot_user]/src/bash \ - [depot_user]/src/grep \ - [depot_user]/src/coreutils \ - [depot_user]/src/ram_fs - - -# write default vimrc file -set vimrc_fd [open "bin/vimrc" w] -puts $vimrc_fd { -set noloadplugins -set hls -set nocompatible -set laststatus=2 -set noswapfile -set viminfo=} -close $vimrc_fd - -install_config { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} - -build { server/trace_fs lib/trace/policy/rpc_name } - -build_boot_image { vimrc trace_fs rpc_name } - -run_genode_until forever - -# vi: set ft=tcl : From 984bddcedd703aef425210fb883077b2d68b0471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Mon, 17 Jun 2019 08:58:43 +0200 Subject: [PATCH 33/67] libc: cleanup port preparation - make port able to be prepared repeatedly Rpcgen refuses to overwrite an already existing header, so try to always remove it beforehand - get rid of 'cp' warning 'cp: warning: source file 'src/lib/libc/sys/sys/time.h' specified more than once' - silence patch message 'patch unexpectedly ends in middle of line' Fixes #3420. --- repos/libports/ports/libc.hash | 2 +- repos/libports/ports/libc.port | 3 ++- repos/libports/src/lib/libc/patches/MB_CUR_MAX.patch | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/repos/libports/ports/libc.hash b/repos/libports/ports/libc.hash index f6b196cf198..b88957fae7f 100644 --- a/repos/libports/ports/libc.hash +++ b/repos/libports/ports/libc.hash @@ -1 +1 @@ -12ac556f17580c447e7502e0485a662610f59c06 +60a83fda51da9b110e8b857e557f737a8310d00c diff --git a/repos/libports/ports/libc.port b/repos/libports/ports/libc.port index d144f422354..7314442685c 100644 --- a/repos/libports/ports/libc.port +++ b/repos/libports/ports/libc.port @@ -141,7 +141,7 @@ DIR_CONTENT(include/libc/sys) := \ utsname.h elf.h mtio.h _stdint.h atomic_common.h _ucontext.h \ _cpuset.h _bitset.h bitset.h _stdarg.h _uio.h auxv.h random.h \ _sockaddr_storage.h termios.h _termios.h _umtx.h kerneldump.h \ - conf.h disk_zone.h counter.h time.h) + conf.h disk_zone.h counter.h) DIRS += include/libc/sys/disk DIR_CONTENT(include/libc/sys/disk) := $(D)/sys/sys/disk/*h @@ -241,6 +241,7 @@ $(D)/include/rpcsvc/nis_object.x : $(DOWNLOADS) %.h: %.x @$(MSG_GENERATE)$(notdir $@) + $(VERBOSE)rm -f $@ $(VERBOSE)rpcgen -C -h -DWANT_NFS3 $< -o $@ generated_rpcsvc_files := \ diff --git a/repos/libports/src/lib/libc/patches/MB_CUR_MAX.patch b/repos/libports/src/lib/libc/patches/MB_CUR_MAX.patch index c51d6e52dd0..7419fcc85af 100644 --- a/repos/libports/src/lib/libc/patches/MB_CUR_MAX.patch +++ b/repos/libports/src/lib/libc/patches/MB_CUR_MAX.patch @@ -20,4 +20,5 @@ -#define MB_CUR_MAX_L(x) ((size_t)___mb_cur_max_l(x)) +/* ASCII only */ +#define MB_CUR_MAX_L(x) 1 - \ No newline at end of file + + From cea842b256b0b40b7e9544a85a240dfc6e8fd3b0 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 19 Jun 2019 10:49:50 +0200 Subject: [PATCH 34/67] autopilot: append RUN_OPT also with --keep In case RUN_OPT_AUTOPILOT is changed on consecutive calls of "autopilot --keep", the changes are now effectively propagated to the run tool. I also documented the RUN_OPT_AUTOPILOT environment variable. --- tool/autopilot | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/tool/autopilot b/tool/autopilot index 6499aef43f9..e6124fd5100 100755 --- a/tool/autopilot +++ b/tool/autopilot @@ -70,6 +70,12 @@ proc help { } { --skip-clean-rules skip cleanall tests, keep build-directory content --stdout print test output instead of writing log files --time-stamp prepend log output lines with time stamps (requires ts utility) + + The environment variable RUN_OPT_AUTOPILOT may be set to propagate + custom RUN_OPTs to the run tool executed. In any case autopilot + appends RUN_OPT like follows. + + RUN_OPT += --autopilot } append help_text "\ndefault test directory is [default_test_dir]\n" @@ -346,12 +352,26 @@ if {[file exists $test_dir] && ![get_cmd_switch --force] && if {[get_cmd_switch --force]} { wipe_test_dir } +proc append_run_opt { build_conf } { + if {[info exists ::env(RUN_OPT_AUTOPILOT)]} { + exec echo "RUN_OPT = --include boot_dir/\$(KERNEL)" >> $build_conf + exec echo "RUN_OPT += $::env(RUN_OPT_AUTOPILOT)" >> $build_conf + } + + exec echo "RUN_OPT += --autopilot" >> $build_conf +} + + # create build directories foreach arch $architectures { set build_dir [build_dir $arch] + set build_conf [file join $build_dir etc build.conf] - if {[get_cmd_switch --keep] && [file exists $build_dir]} { continue } + if {[get_cmd_switch --keep] && [file exists $build_dir]} { + append_run_opt $build_conf + continue + } if {[catch { exec [genode_dir]/tool/create_builddir $arch BUILD_DIR=$build_dir @@ -359,7 +379,6 @@ foreach arch $architectures { fail "create_builddir for architecture $arch failed" -1 } - set build_conf [file join $build_dir etc build.conf] if {![file exists $build_conf]} { fail "build dir for $arch lacks 'etc/build.conf' file" -2 } @@ -377,12 +396,7 @@ foreach arch $architectures { exec echo "CUSTOM_CXX = ccache \$(CROSS_DEV_PREFIX)g++" >> $tools_conf } - if {[info exists ::env(RUN_OPT_AUTOPILOT)]} { - exec echo "RUN_OPT = --include boot_dir/\$(KERNEL)" >> $build_conf - exec echo "RUN_OPT += $::env(RUN_OPT_AUTOPILOT)" >> $build_conf - } - - exec echo "RUN_OPT += --autopilot" >> $build_conf + append_run_opt $build_conf } From e199acca0562c32b13706ed7bc3f5047fd5fb318 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 18 Jun 2019 20:57:44 +0200 Subject: [PATCH 35/67] util/print_lines: don't skip end of long lines Print the end of oversized lines (> 200 chars) to new lines instead of skipping it Fixes #3422 --- repos/base/include/util/print_lines.h | 39 ++++++++++++++------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/repos/base/include/util/print_lines.h b/repos/base/include/util/print_lines.h index a8b228bba1d..862c37993ea 100644 --- a/repos/base/include/util/print_lines.h +++ b/repos/base/include/util/print_lines.h @@ -66,30 +66,33 @@ void Genode::print_lines(char const *string, size_t len, FUNC const &func) if (Genode::strcmp(first_line, string, num_indent_chars) == 0) string += num_indent_chars; - size_t const line_len = - ({ - size_t i = 0; - for (; i < len; i++) { - if (string[i] == '\0' || string[i] == '\n') { - - /* the line length is the offset of the last real character + 1 */ - i++; - break; - } - } - i; - }); + size_t line_len = 0; + size_t skip_char = 1; + + for (; line_len < len; line_len++) { + if (string[line_len] == '\0' || string[line_len] == '\n') { + line_len++; + break; + } + if (line_len == MAX_LINE_LEN) { + skip_char = 0; + break; + } + } if (!line_len) break; - /* - * Copy line from (untrusted) caller to local line buffer - */ - char line_buf[MAX_LINE_LEN]; - Genode::strncpy(line_buf, string, Genode::min(line_len, sizeof(line_buf))); + /* buffer for sub-string of the input string plus null-termination */ + char line_buf[MAX_LINE_LEN + 1]; + + /* give strncpy one more as it will add the null termination */ + Genode::strncpy(line_buf, string, line_len - skip_char + 1); + + /* process null-terminated string in buffer */ func(line_buf); + /* move forward to the next sub-string to process */ string += line_len; len -= line_len; } From 52ec4526e1bb261dddf47896231a74f11c84553b Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 20 Jun 2019 15:49:24 +0200 Subject: [PATCH 36/67] libc: discharge use of hidden symbols Issue #3424 --- repos/libports/ports/libc.hash | 2 +- .../lib/libc/patches/cdefs_no_hidden.patch | 63 +++++++++++++++++++ repos/libports/src/lib/libc/signal.cc | 8 +++ 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 repos/libports/src/lib/libc/patches/cdefs_no_hidden.patch diff --git a/repos/libports/ports/libc.hash b/repos/libports/ports/libc.hash index b88957fae7f..dbf5ca4b260 100644 --- a/repos/libports/ports/libc.hash +++ b/repos/libports/ports/libc.hash @@ -1 +1 @@ -60a83fda51da9b110e8b857e557f737a8310d00c +9252999ee23cfb811e707887ef05bf1283a41597 diff --git a/repos/libports/src/lib/libc/patches/cdefs_no_hidden.patch b/repos/libports/src/lib/libc/patches/cdefs_no_hidden.patch new file mode 100644 index 00000000000..67c691f8206 --- /dev/null +++ b/repos/libports/src/lib/libc/patches/cdefs_no_hidden.patch @@ -0,0 +1,63 @@ +Prevent the use of the hidden attribute for symbols. In particular, +the attribute must not be applied to '__libc'-prefixed symbols to allow +overwriting the dummies defined in dummies.cc by other non-weak +implementations such as those in 'libc_noux.lib.so'. + +This attribute is applied inconsistently in +libc/lib/libc/include/libc_private.h anyway. + +Also, force i386 to call __libc_sigprocmask via PLT to prevent +R_386_PC32 relocations, which had to change the text segment. Other +architectures do this automatically. + +--- src/lib/libc/sys/sys/cdefs.h ++++ src/lib/libc/sys/sys/cdefs.h +@@ -447,7 +447,7 @@ + #if __GNUC_PREREQ__(4, 0) + #define __null_sentinel __attribute__((__sentinel__)) + #define __exported __attribute__((__visibility__("default"))) +-#define __hidden __attribute__((__visibility__("hidden"))) ++#define __hidden + #else + #define __null_sentinel + #define __exported +--- src/lib/libc/lib/libc/i386/gen/setjmp.S ++++ src/lib/libc/lib/libc/i386/gen/setjmp.S +@@ -54,7 +54,7 @@ + pushl %eax /* (sigset_t*)oset */ + pushl $0 /* (sigset_t*)set */ + pushl $1 /* SIG_BLOCK */ +- call __libc_sigprocmask ++ call __i386_libc_sigprocmask + addl $12,%esp + movl 4(%esp),%ecx + movl 0(%esp),%edx +@@ -76,7 +76,7 @@ + leal 28(%edx), %eax + pushl %eax /* (sigset_t*)set */ + pushl $3 /* SIG_SETMASK */ +- call __libc_sigprocmask ++ call __i386_libc_sigprocmask + addl $12,%esp + movl 4(%esp),%edx + movl 8(%esp),%eax +--- src/lib/libc/lib/libc/i386/gen/sigsetjmp.S ++++ src/lib/libc/lib/libc/i386/gen/sigsetjmp.S +@@ -63,7 +63,7 @@ + pushl %eax /* (sigset_t*)oset */ + pushl $0 /* (sigset_t*)set */ + pushl $1 /* SIG_BLOCK */ +- call __libc_sigprocmask ++ call __i386_libc_sigprocmask + addl $12,%esp + movl 4(%esp),%ecx + 2: movl 0(%esp),%edx +@@ -87,7 +87,7 @@ + leal 28(%edx), %eax + pushl %eax /* (sigset_t*)set */ + pushl $3 /* SIG_SETMASK */ +- call __libc_sigprocmask ++ call __i386_libc_sigprocmask + addl $12,%esp + movl 4(%esp),%edx + 2: movl 8(%esp),%eax diff --git a/repos/libports/src/lib/libc/signal.cc b/repos/libports/src/lib/libc/signal.cc index 1782bc6198f..c8e72f406fe 100644 --- a/repos/libports/src/lib/libc/signal.cc +++ b/repos/libports/src/lib/libc/signal.cc @@ -55,6 +55,14 @@ int __libc_sigprocmask(int how, const sigset_t *set, sigset_t *old) { return sigprocmask(how, set, old); } +/* wrapper from text-relocated i386-assembler call to PLT call */ +extern "C" int __i386_libc_sigprocmask(int how, const sigset_t *set, sigset_t *old) __attribute__((visibility("hidden"))); +extern "C" int __i386_libc_sigprocmask(int how, const sigset_t *set, sigset_t *old) +{ + return __libc_sigprocmask(how, set, old); +} + + extern "C" __attribute__((weak)) pid_t wait4(pid_t, int *, int, struct rusage *) { From d1da5b9e16e2907975bb2850bb80a9327e676b94 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 20 Jun 2019 15:51:46 +0200 Subject: [PATCH 37/67] libc_noux: override __libc_sigaction This is a follow-up commit to the libc update. The FreeBSD implementation of sigset or sigaction calls the __libc_sigaction now. The patch fixes the SIGWINCH handling for Vim when interactively resizing the terminal window. Fixes #3424 --- repos/ports/src/lib/libc_noux/plugin.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/repos/ports/src/lib/libc_noux/plugin.cc b/repos/ports/src/lib/libc_noux/plugin.cc index 655aac990c8..15407a08aaf 100644 --- a/repos/ports/src/lib/libc_noux/plugin.cc +++ b/repos/ports/src/lib/libc_noux/plugin.cc @@ -936,7 +936,8 @@ extern "C" int _sigaction(int signum, const struct sigaction *act, struct sigact } -extern "C" int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) __attribute__((alias("_sigaction"))); +extern "C" int sigaction(int, const struct sigaction *, struct sigaction *) __attribute__((alias("_sigaction"))); +extern "C" int __libc_sigaction(int, const struct sigaction *, struct sigaction *) __attribute__((alias("_sigaction"))); /********************* From a0c71cffd4017c8d9c2124783e879c82ec237a75 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 24 Jun 2019 10:51:54 +0200 Subject: [PATCH 38/67] Solo5 tests require x86_64 --- repos/libports/run/solo5.run | 4 ++-- repos/libports/run/solo5_ping.run | 2 +- repos/libports/run/solo5_ssp.run | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/repos/libports/run/solo5.run b/repos/libports/run/solo5.run index 8b5e3b3c609..e0446ffd489 100644 --- a/repos/libports/run/solo5.run +++ b/repos/libports/run/solo5.run @@ -1,5 +1,5 @@ -if {![have_spec 64bit]} { - puts "\nSolo5 requires a 64bit architecture\n" +if {![have_spec x86_64]} { + puts "\nTest requires x86_64\n" exit 0 } diff --git a/repos/libports/run/solo5_ping.run b/repos/libports/run/solo5_ping.run index 96ca697ea66..1218371cdd7 100644 --- a/repos/libports/run/solo5_ping.run +++ b/repos/libports/run/solo5_ping.run @@ -1,5 +1,5 @@ if {![have_spec x86_64]} { - puts "\nSolo5 requires a 64bit architecture\n" + puts "\nTest requires x86_64\n" exit 0 } diff --git a/repos/libports/run/solo5_ssp.run b/repos/libports/run/solo5_ssp.run index 658dc2bc746..fdd82beb1fb 100644 --- a/repos/libports/run/solo5_ssp.run +++ b/repos/libports/run/solo5_ssp.run @@ -1,5 +1,5 @@ -if {![have_spec 64bit]} { - puts "\nSolo5 requires a 64bit architecture\n" +if {![have_spec x86_64]} { + puts "\nTest requires x86_64\n" exit 0 } From 63e69d35e022ed1b94e6114c54aad713fa35f750 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 24 Jun 2019 11:03:34 +0200 Subject: [PATCH 39/67] Disable unsupported autopilot tests on rpi3 --- repos/gems/run/depot_download.run | 2 +- repos/libports/run/fetchurl.inc | 2 +- repos/libports/run/libc_filesystem_test.inc | 8 ++++---- repos/libports/run/lwip.run | 1 + repos/libports/run/nic_bridge.run | 5 +++++ repos/os/run/fb_bench.run | 1 + repos/os/run/nic_dump.run | 3 ++- repos/os/run/nic_router_flood.run | 1 + repos/os/run/ping.run | 1 + repos/os/run/ping_nic_router.run | 1 + 10 files changed, 18 insertions(+), 7 deletions(-) diff --git a/repos/gems/run/depot_download.run b/repos/gems/run/depot_download.run index 7375a329072..ffdde729023 100644 --- a/repos/gems/run/depot_download.run +++ b/repos/gems/run/depot_download.run @@ -1,6 +1,6 @@ create_boot_directory -if {[have_spec linux] || [have_spec imx7d_sabre] || +if {[have_spec linux] || [have_spec imx7d_sabre] || [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script does not support this platform." exit 0 diff --git a/repos/libports/run/fetchurl.inc b/repos/libports/run/fetchurl.inc index 091f548c584..f0a9d77fd83 100644 --- a/repos/libports/run/fetchurl.inc +++ b/repos/libports/run/fetchurl.inc @@ -4,7 +4,7 @@ # \date 2016-06-05 # -if {[have_spec linux] || [have_spec imx7d_sabre] || +if {[have_spec linux] || [have_spec imx7d_sabre] || [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script does not support this platform." exit 0 diff --git a/repos/libports/run/libc_filesystem_test.inc b/repos/libports/run/libc_filesystem_test.inc index cd30bf61460..17b48fe2b01 100644 --- a/repos/libports/run/libc_filesystem_test.inc +++ b/repos/libports/run/libc_filesystem_test.inc @@ -9,14 +9,14 @@ if {[have_spec odroid_xu] || [have_spec zynq]} { exit 0 } -# use SD on ARM -set use_sd_card_drv [expr [have_spec pbxa9]] +# use SD on Qemu/pbxa9 +set use_sd_card_drv [expr [have_include "power_on/qemu"] && [have_spec pbxa9]] # use AHCI on x86 set use_ahci [expr [have_spec x86] && ![have_spec linux]] -# use ram_block on Linux -set use_ram_block [have_spec linux] +# use ram_block on Linux and Qemu/rpi3 +set use_ram_block [expr [have_spec linux] || [expr [have_include "power_on/qemu"] && [have_spec rpi3]]] if {[catch { exec which $mkfs_cmd } ]} { puts stderr "Error: $mkfs_cmd not installed, aborting test"; exit } diff --git a/repos/libports/run/lwip.run b/repos/libports/run/lwip.run index 3e5bf06f167..6c28d22860b 100644 --- a/repos/libports/run/lwip.run +++ b/repos/libports/run/lwip.run @@ -23,6 +23,7 @@ if {[expr [have_spec linux]] || [expr [have_spec imx53] && [have_spec trustzone]] || [expr [have_spec imx7d_sabre]] || + [have_spec rpi3] || [expr [have_spec riscv]]} { puts "\n Run script is not supported on this platform. \n"; exit 0 } diff --git a/repos/libports/run/nic_bridge.run b/repos/libports/run/nic_bridge.run index b096ba6a3c3..e3c4dd52ad8 100644 --- a/repos/libports/run/nic_bridge.run +++ b/repos/libports/run/nic_bridge.run @@ -3,6 +3,11 @@ if {![have_include power_on/qemu]} { exit 0 } +if {[have_spec rpi3]} { + puts "\n Run script is not supported on this platform. \n"; + exit 0 +} + create_boot_directory import_from_depot [depot_user]/src/[base_src] \ diff --git a/repos/os/run/fb_bench.run b/repos/os/run/fb_bench.run index cca3d1b7ef7..4aca6554886 100644 --- a/repos/os/run/fb_bench.run +++ b/repos/os/run/fb_bench.run @@ -1,6 +1,7 @@ if {[have_spec odroid_xu] || [have_spec imx7d_sabre] || [have_spec imx6q_sabrelite] || + [have_spec rpi3] || [have_spec zynq] || [have_spec imx53] && [have_spec foc]} { puts "\n Run script is not supported on this platform. \n"; diff --git a/repos/os/run/nic_dump.run b/repos/os/run/nic_dump.run index a50e9b8e511..6b4605f034d 100644 --- a/repos/os/run/nic_dump.run +++ b/repos/os/run/nic_dump.run @@ -1,4 +1,5 @@ -if {[have_spec foc] || [have_spec odroid_xu] || [have_spec linux] || [have_spec imx7d_sabre] || +if {[have_spec foc] || [have_spec odroid_xu] || [have_spec linux] || + [have_spec imx7d_sabre] || [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script is not supported on this platform." exit 0 diff --git a/repos/os/run/nic_router_flood.run b/repos/os/run/nic_router_flood.run index eb39a512f69..aaa2bde00c0 100644 --- a/repos/os/run/nic_router_flood.run +++ b/repos/os/run/nic_router_flood.run @@ -1,5 +1,6 @@ if {![have_include power_on/qemu] || [have_spec foc] || + [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script is not supported on this platform." diff --git a/repos/os/run/ping.run b/repos/os/run/ping.run index 1a9a6939d82..aa53607b276 100644 --- a/repos/os/run/ping.run +++ b/repos/os/run/ping.run @@ -1,4 +1,5 @@ if {[have_spec foc] || [have_spec linux] || [have_spec imx7d_sabre] || + [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script is not supported on this platform." exit 0 diff --git a/repos/os/run/ping_nic_router.run b/repos/os/run/ping_nic_router.run index dbbf17e7191..7dcdef06295 100644 --- a/repos/os/run/ping_nic_router.run +++ b/repos/os/run/ping_nic_router.run @@ -1,4 +1,5 @@ if {[have_spec foc] || [have_spec odroid_xu] || [have_spec linux] || [have_spec imx7d_sabre] || + [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script is not supported on this platform." exit 0 From 716453aaa1baa1d1e49d5953c3f439dd199fdd9f Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 24 Jun 2019 11:14:57 +0200 Subject: [PATCH 40/67] gpt_write: fix pointer to local variable This problem surfaced with the new tool chain that changes the stack layout. A pointer to the the config XML data was kept in the main object but pointed to a stack variable. This patch fixes it by removing the pointer. Fixes #3416 --- repos/gems/src/app/gpt_write/main.cc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/repos/gems/src/app/gpt_write/main.cc b/repos/gems/src/app/gpt_write/main.cc index 391f8e159e7..5ff518d3304 100644 --- a/repos/gems/src/app/gpt_write/main.cc +++ b/repos/gems/src/app/gpt_write/main.cc @@ -61,8 +61,6 @@ struct Gpt::Writer Util::Number_of_bytes _entry_alignment { 4096u }; - Genode::Xml_node *_config { nullptr }; - void _handle_config(Genode::Xml_node config) { _verbose = config.attribute_value("verbose", false); @@ -83,8 +81,6 @@ struct Gpt::Writer if (_wipe && (_initialize || commands)) { Genode::warning("will exit after wiping"); } - - _config = &config; } /************ @@ -692,15 +688,13 @@ struct Gpt::Writer * \return true if actions were executed successfully, otherwise * false */ - bool execute_actions() + bool execute_actions(Genode::Xml_node actions) { if (_wipe) { return _wipe_tables(); } if (_initialize) { _initialize_tables(); } try { - Genode::Xml_node actions = _config->sub_node("actions"); - actions.for_each_sub_node([&] (Genode::Xml_node node) { bool result = false; @@ -750,14 +744,19 @@ struct Main Util::init_random(_heap); + Genode::Xml_node const config = _config_rom.xml(); + try { - _writer.construct(_block, _config_rom.xml()); + _writer.construct(_block, config); } catch (...) { _env.parent().exit(1); return; } - bool const success = _writer->execute_actions(); + bool success = false; + config.with_sub_node("actions", [&] (Genode::Xml_node actions) { + success = _writer->execute_actions(actions); }); + _env.parent().exit(success ? 0 : 1); } }; From 48a361107f00287421e79c2afaa31e00712a4765 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 24 Jun 2019 11:20:42 +0200 Subject: [PATCH 41/67] gpt_write: fix false-positive fallthrough warning --- repos/gems/src/app/gpt_write/util.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/gems/src/app/gpt_write/util.h b/repos/gems/src/app/gpt_write/util.h index 27ccfee1ccd..385f62f495a 100644 --- a/repos/gems/src/app/gpt_write/util.h +++ b/repos/gems/src/app/gpt_write/util.h @@ -92,8 +92,8 @@ namespace Util { /* handle suffixes */ if (i > 0) switch (s[i]) { - case 'G': res *= 1024; - case 'M': res *= 1024; + case 'G': res *= 1024; [[fallthrough]]; + case 'M': res *= 1024; [[fallthrough]]; case 'K': res *= 1024; i++; default: break; } From 7e7eff0eb72b477a8a859f14ac640c51c5b0d6ab Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 18 Jun 2019 17:05:17 +0200 Subject: [PATCH 42/67] window layouter: reduce snap-back artifact When resizing windows of clients that respond very slowly to resize requests, the window's size sometimes snapped back to its original size immediately after finishing the drag operation. The problem was caused by the interplay of the layout rules (obtained via the 'rules' ROM, generated by the 'rules' report) and the temporary interactive state that occurs during drag operations. The rules are updated only at the time of releasing the button to keep the overhead while dragging the window low. However, when releasing the mouse, the (now outdated) rules kicked back into effect, triggering resize requests for the window to its old size. The patch solves this problem by decoupling the dragged state of a window from the physical release of the button. The button release triggers a transition from a DRAGGING to a SETTLING state and programs a timer. In the SETTLING state, the windows behave as in DRAGGING state, giving the interactive geometry precedence over the rules-dictated geometry. During this state, further responses of window-resize requests may come in and are handled like dragging was still in progress. After a timeout, however, the current window layout is conserved as a new rules report and the state goes back to IDLE. For clients that takes a very long time (in particular, VirtualBox when resizing the desktop, which takes sometimes multiple seconds), the snap-back artifact can still occur, but the effect is reduced. --- repos/gems/src/app/window_layouter/main.cc | 49 +++++++-------------- repos/gems/src/app/window_layouter/window.h | 5 ++- 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/repos/gems/src/app/window_layouter/main.cc b/repos/gems/src/app/window_layouter/main.cc index 66ed8929983..c92d6e355d1 100644 --- a/repos/gems/src/app/window_layouter/main.cc +++ b/repos/gems/src/app/window_layouter/main.cc @@ -48,7 +48,9 @@ struct Window_layouter::Main : Operations, Timer::Connection _drop_timer { _env }; - bool _defer_layout_change = false; + enum class Drag_state { IDLE, DRAGGING, SETTLING }; + + Drag_state _drag_state { Drag_state::IDLE }; Signal_handler
_drop_timer_handler { _env.ep(), *this, &Main::_handle_drop_timer }; @@ -138,21 +140,9 @@ struct Window_layouter::Main : Operations, */ void layout_rules_changed() override { - /* - * When re-importing rules generated by the drop operation, issue an - * updated resize request immediately instead of waiting for the - * '_drop_timer_handler'. Clear '_defer_layout_change' before calling - * '_update_window_layout' because '_gen_window_layout' evaluates - * this flag. - */ - bool const issue_resize_request = _defer_layout_change; - - _defer_layout_change = false; - _update_window_layout(); - if (issue_resize_request) - _gen_resize_request(); + _gen_resize_request(); } /** @@ -220,6 +210,11 @@ struct Window_layouter::Main : Operations, void drag(Window_id id, Window::Element element, Point clicked, Point curr) override { + if (_drag_state == Drag_state::SETTLING) + return; + + _drag_state = Drag_state::DRAGGING; + to_front(id); bool window_layout_changed = false; @@ -245,11 +240,15 @@ struct Window_layouter::Main : Operations, void _handle_drop_timer() { - /* discharge '_defer_layout_change' */ - layout_rules_changed(); + _drag_state = Drag_state::IDLE; + + _gen_rules(); + + _window_list.for_each_window([&] (Window &window) { + window.finalize_drag_operation(); }); } - void finalize_drag(Window_id id, Window::Element, Point, Point) override + void finalize_drag(Window_id, Window::Element, Point, Point) override { /* * Update window layout because highlighting may have changed after the @@ -257,17 +256,9 @@ struct Window_layouter::Main : Operations, * dragging of a resize handle, the resize handle is no longer hovered. */ _gen_window_layout(); - _gen_rules(); - _window_list.with_window(id, [&] (Window &window) { - window.finalize_drag_operation(); }); + _drag_state = Drag_state::SETTLING; - /* - * Mask the generation of resize requests until the updated rules are - * imported the next time. Discharge the masking after a timeout for - * the case where rules fixed and not fed back to the layouter. - */ - _defer_layout_change = true; _drop_timer.trigger_once(250*1000); } @@ -400,9 +391,6 @@ struct Window_layouter::Main : Operations, void Window_layouter::Main::_gen_window_layout() { - if (_defer_layout_change) - return; - /* update hover and focus state of each window */ _window_list.for_each_window([&] (Window &window) { @@ -420,9 +408,6 @@ void Window_layouter::Main::_gen_window_layout() void Window_layouter::Main::_gen_resize_request() { - if (_defer_layout_change) - return; - bool resize_needed = false; _assign_list.for_each([&] (Assign const &assign) { assign.for_each_member([&] (Assign::Member const &member) { diff --git a/repos/gems/src/app/window_layouter/window.h b/repos/gems/src/app/window_layouter/window.h index bab593ca04b..957046995b0 100644 --- a/repos/gems/src/app/window_layouter/window.h +++ b/repos/gems/src/app/window_layouter/window.h @@ -466,12 +466,13 @@ class Window_layouter::Window : public List_model::Element void finalize_drag_operation() { - _dragged = false; _drag_left_border = false; _drag_right_border = false; _drag_top_border = false; _drag_bottom_border = false; - _dragged_size = effective_inner_geometry().area(); + _geometry = effective_inner_geometry(); + _dragged_size = _geometry.area(); + _dragged = false; } void to_front_cnt(unsigned to_front_cnt) { _to_front_cnt = to_front_cnt; } From 854a154fb4c4b5ac76897a175182dfae579e3631 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Sat, 22 Jun 2019 14:27:38 +0200 Subject: [PATCH 43/67] depot_query: cache file-system accesses This patch introduces two caches to the depot-query tool. - A stat cache remembers the results of 'Directory::file_exists' calls. - The 'Cached_rom_query' caches the result of scanning the depot for a given ROM module and pkg path. To elminates the need to parse 'archive' files of pkgs referenced from other pkgs or for the repeated instantation of the same pkg. Both caches are bypassed whenever referring to the 'local' depot user. Fixes #3427 --- repos/gems/recipes/src/depot_query/content.mk | 2 +- repos/gems/src/app/depot_query/main.cc | 209 ++++++++++++++++-- 2 files changed, 192 insertions(+), 19 deletions(-) diff --git a/repos/gems/recipes/src/depot_query/content.mk b/repos/gems/recipes/src/depot_query/content.mk index 22ffb50179a..19ba5437409 100644 --- a/repos/gems/recipes/src/depot_query/content.mk +++ b/repos/gems/recipes/src/depot_query/content.mk @@ -2,7 +2,7 @@ SRC_DIR := src/app/depot_query include $(GENODE_DIR)/repos/base/recipes/src/content.inc -MIRROR_FROM_REP_DIR := include/depot include/gems/vfs.h +MIRROR_FROM_REP_DIR := include/depot include/gems/vfs.h include/gems/lru_cache.h content: $(MIRROR_FROM_REP_DIR) diff --git a/repos/gems/src/app/depot_query/main.cc b/repos/gems/src/app/depot_query/main.cc index 59dd7fdfb6f..c983c0975ac 100644 --- a/repos/gems/src/app/depot_query/main.cc +++ b/repos/gems/src/app/depot_query/main.cc @@ -18,11 +18,19 @@ #include #include #include +#include namespace Depot_query { + using namespace Depot; + + typedef String<64> Rom_label; + struct Recursion_limit; struct Dependencies; + class Stat_cache; + struct Rom_query; + class Cached_rom_query; struct Main; } @@ -144,7 +152,172 @@ class Depot_query::Dependencies }; -struct Depot_query::Main +class Depot_query::Stat_cache +{ + private: + + struct Key + { + struct Value + { + Archive::Path path; + + bool operator > (Value const &other) const + { + return strcmp(path.string(), other.path.string()) > 0; + } + + bool operator == (Value const &other) const + { + return path == other.path; + } + + } value; + }; + + struct Result { bool file_exists; }; + + typedef Lru_cache Cache; + + Cache::Size const _size; + + Cache _cache; + + Directory const &_dir; + + public: + + Stat_cache(Directory const &dir, Allocator &alloc, Xml_node const config) + : + _size({.value = config.attribute_value("stat_cache", Number_of_bytes(64*1024)) + / Cache::element_size()}), + _cache(alloc, _size), + _dir(dir) + { } + + bool file_exists(Archive::Path const path) + { + /* don't cache the state of the 'local' depot user */ + if (Archive::user(path) == "local") + return _dir.file_exists(path); + + bool result = false; + + auto hit_fn = [&] (Result const &cached_result) + { + result = cached_result.file_exists; + }; + + auto miss_fn = [&] (Cache::Missing_element &missing_element) + { + Result const stat_result { _dir.file_exists(path) }; + + /* + * Don't cache negative results because files may appear + * during installation. Later queries may find files absent + * from earlier queries. + */ + if (stat_result.file_exists) + missing_element.construct(stat_result); + }; + + Key const key { .value = { .path = path } }; + (void)_cache.try_apply(key, hit_fn, miss_fn); + + return result; + } +}; + + +struct Depot_query::Rom_query : Interface +{ + /** + * Look up ROM module 'rom_label' in the archives referenced by 'pkg_path' + * + * \throw Directory::Nonexistent_directory + * \throw Directory::Nonexistent_file + * \throw File::Truncated_during_read + * \throw Recursion_limit::Reached + */ + virtual Archive::Path find_rom_in_pkg(Directory::Path const &pkg_path, + Rom_label const &rom_label, + Recursion_limit recursion_limit) = 0; +}; + + +class Depot_query::Cached_rom_query : public Rom_query +{ + private: + + struct Key + { + struct Value + { + Archive::Path pkg; + Rom_label rom; + + bool operator > (Value const &other) const + { + return strcmp(pkg.string(), other.pkg.string()) > 0 + && strcmp(rom.string(), other.rom.string()) > 0; + } + + bool operator == (Value const &other) const + { + return pkg == other.pkg && rom == other.rom; + } + + } value; + }; + + typedef Lru_cache Cache; + + Cache::Size const _size; + + Cache mutable _cache; + + Rom_query &_rom_query; + + public: + + Cached_rom_query(Rom_query &rom_query, Allocator &alloc, Xml_node const config) + : + _size({.value = config.attribute_value("rom_query_cache", Number_of_bytes(64*1024)) + / Cache::element_size() }), + _cache(alloc, _size), + _rom_query(rom_query) + { } + + Archive::Path find_rom_in_pkg(Directory::Path const &pkg_path, + Rom_label const &rom_label, + Recursion_limit recursion_limit) override + { + /* don't cache the state of the 'local' depot user */ + if (Archive::user(pkg_path) == "local") + return _rom_query.find_rom_in_pkg(pkg_path, rom_label, recursion_limit); + + Archive::Path result { }; + + auto hit_fn = [&] (Archive::Path const &path) { result = path; }; + + auto miss_fn = [&] (Cache::Missing_element &missing_element) + { + Archive::Path const path = + _rom_query.find_rom_in_pkg(pkg_path, rom_label, recursion_limit); + + if (path.valid()) + missing_element.construct(path); + }; + + Key const key { .value = { .pkg = pkg_path, .rom = rom_label } }; + (void)_cache.try_apply(key, hit_fn, miss_fn); + + return result; + } +}; + + +struct Depot_query::Main : private Rom_query { Env &_env; @@ -158,6 +331,8 @@ struct Depot_query::Main Directory _depot_dir { _root, "depot" }; + Stat_cache _depot_stat_cache { _depot_dir, _heap, _config.xml() }; + Signal_handler
_config_handler { _env.ep(), *this, &Main::_handle_config }; @@ -182,7 +357,6 @@ struct Depot_query::Main obj.destruct(); } - typedef String<64> Rom_label; typedef String<16> Architecture; typedef String<32> Version; @@ -210,17 +384,13 @@ struct Depot_query::Main }); } + Cached_rom_query _cached_rom_query { *this, _heap, _config.xml() }; + /** - * Look up ROM module 'rom_label' in the archives referenced by 'pkg_path' - * - * \throw Directory::Nonexistent_directory - * \throw Directory::Nonexistent_file - * \throw File::Truncated_during_read - * \throw Recursion_limit::Reached + * Rom_query interface */ - Archive::Path _find_rom_in_pkg(Directory::Path const &pkg_path, - Rom_label const &rom_label, - Recursion_limit recursion_limit); + Archive::Path find_rom_in_pkg(Directory::Path const &, Rom_label const &, + Recursion_limit) override; void _query_blueprint(Directory::Path const &, Xml_generator &); void _collect_source_dependencies(Archive::Path const &, Dependencies &, Recursion_limit); @@ -344,9 +514,9 @@ struct Depot_query::Main Depot_query::Archive::Path -Depot_query::Main::_find_rom_in_pkg(Directory::Path const &pkg_path, - Rom_label const &rom_label, - Recursion_limit recursion_limit) +Depot_query::Main::find_rom_in_pkg(Directory::Path const &pkg_path, + Rom_label const &rom_label, + Recursion_limit recursion_limit) { /* * \throw Directory::Nonexistent_directory @@ -375,7 +545,7 @@ Depot_query::Main::_find_rom_in_pkg(Directory::Path const &pkg_path, Archive::name(archive_path), "/", Archive::version(archive_path), "/", rom_label); - if (_depot_dir.file_exists(rom_path)) + if (_depot_stat_cache.file_exists(rom_path)) result = rom_path; } break; @@ -387,16 +557,19 @@ Depot_query::Main::_find_rom_in_pkg(Directory::Path const &pkg_path, Archive::name(archive_path), "/", Archive::version(archive_path), "/", rom_label); - if (_depot_dir.file_exists(rom_path)) + if (_depot_stat_cache.file_exists(rom_path)) result = rom_path; } break; case Archive::PKG: + Archive::Path const result_from_pkg = - _find_rom_in_pkg(archive_path, rom_label, recursion_limit); + _cached_rom_query.find_rom_in_pkg(archive_path, rom_label, recursion_limit); + if (result_from_pkg.valid()) result = result_from_pkg; + break; } }); @@ -448,7 +621,7 @@ void Depot_query::Main::_query_blueprint(Directory::Path const &pkg_path, Xml_ge } Archive::Path const rom_path = - _find_rom_in_pkg(pkg_path, label, Recursion_limit{8}); + _cached_rom_query.find_rom_in_pkg(pkg_path, label, Recursion_limit{8}); if (rom_path.valid()) { xml.node("rom", [&] () { From c00666b7e8ba65e500d0c00c207b120bab50f6ab Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Sat, 22 Jun 2019 12:15:00 +0200 Subject: [PATCH 44/67] depot_deploy.run: integrate recall_fs This is needed to deploy the current version of the window_layouter pkg. --- repos/gems/run/depot_deploy.run | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/repos/gems/run/depot_deploy.run b/repos/gems/run/depot_deploy.run index 31a392a43da..36efccf8312 100644 --- a/repos/gems/run/depot_deploy.run +++ b/repos/gems/run/depot_deploy.run @@ -153,6 +153,13 @@ install_config { + + + + + + + @@ -168,6 +175,7 @@ install_config { + @@ -180,7 +188,6 @@ install_config { - From 417191bdbd0c20166978f5f8944e9b0a41fedac1 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 17 Jun 2019 16:06:42 +0200 Subject: [PATCH 45/67] wm.run: build window_layouter This change makes the wm.run more convenient as testbed for developing the window layouter. --- repos/gems/run/wm.run | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/gems/run/wm.run b/repos/gems/run/wm.run index 78c5f30bbb1..54f4c7fdb56 100644 --- a/repos/gems/run/wm.run +++ b/repos/gems/run/wm.run @@ -151,8 +151,8 @@ close $fd file copy -force [genode_dir]/repos/gems/recipes/raw/motif_wm/wm.config [run_dir]/genode/ -build { app/decorator server/nitpicker server/wm test/nitpicker } +build { app/window_layouter app/decorator server/nitpicker server/wm test/nitpicker } -build_boot_image { decorator nitpicker wm testnit } +build_boot_image { window_layouter decorator nitpicker wm testnit } run_genode_until forever From fcdad000448acffb5929a9d34545f901cfba25ef Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 27 Jun 2019 11:12:01 +0200 Subject: [PATCH 46/67] test.run: build vfs plugins of in rom list --- repos/os/run/test.run | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/repos/os/run/test.run b/repos/os/run/test.run index d99d320ee98..3cd97250f3b 100644 --- a/repos/os/run/test.run +++ b/repos/os/run/test.run @@ -223,7 +223,14 @@ foreach rom [content_rom_modules] { # raw-archive content is installed directly into [run_dir]/genode if {![rom_module_from_raw_archive $rom]} { - lappend boot_modules $rom } + lappend boot_modules $rom + } + + # handle vfs plugin shared-object targets + if {[regexp "^vfs_(.+).lib.so$" $rom dummy plugin]} { + lappend build_targets lib/vfs/$plugin + continue + } if {[info exists src_sub_dir($rom)]} { lappend build_targets $src_sub_dir($rom) From 4c8369ab1b4d0c116a7a29adaf456bf81d3e7f16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 27 Jun 2019 12:00:46 +0200 Subject: [PATCH 47/67] tool/depot/publish: support multiple threads in xz Introduce 'XZ_THREADS' to override the default number of threads used for compression, which is still set to '1'. As using multiple threads will increase the amount of memory needed during the compression and potentially influences the size of the created archive, setting the variable limits the impact. Fixes #3431. --- tool/depot/publish | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tool/depot/publish b/tool/depot/publish index c8479f390a2..90e6fa26c00 100755 --- a/tool/depot/publish +++ b/tool/depot/publish @@ -30,6 +30,8 @@ export GENODE_DIR := $(realpath $(dir $(MAKEFILE_LIST))/../..) PUBLIC_DIR ?= $(GENODE_DIR)/public +XZ_THREADS ?= 1 + include $(GENODE_DIR)/tool/depot/mk/front_end.inc @@ -101,13 +103,14 @@ $(PUBLIC_DIR)/%.xz.sig : $(PUBLIC_DIR)/%.xz $(PUBLIC_DIR)/%.tar.xz: $(DEPOT_DIR)/% @$(ECHO) "$(DARK_COL)publish$(DEFAULT_COL) $@" $(VERBOSE)test -e $(dir $@) || mkdir -p $(dir $@) - $(VERBOSE)tar cJf $@ -C $(dir $<) $(notdir $<) + $(VERBOSE)tar cf - -C $(dir $<) $(notdir $<) | \ + xz --threads=$(XZ_THREADS) > $@ # index file $(PUBLIC_DIR)/%.xz: $(DEPOT_DIR)/% @$(ECHO) "$(DARK_COL)publish$(DEFAULT_COL) $@" $(VERBOSE)test -e $(dir $@) || mkdir -p $(dir $@) - $(VERBOSE)xz <$< >$@ + $(VERBOSE)xz --threads=$(XZ_THREADS) <$< >$@ ifneq ($(MISSING_PUBKEY_FILES),) $(MAKECMDGOALS) $(TARGETS): missing_pubkey_files From 949130d80e367daa68a59462ddb159a984ebca1f Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 27 Jun 2019 14:24:22 +0200 Subject: [PATCH 48/67] Remove warning exec_static_constructors() warning The warning falsely detected cases where shared objects where loaded before exec_static_constructors() was called as unneeded even in cases were the binary itself contained static globals. The commit also removes one redundant call to exec_static_constructors() from the block tester. --- repos/base/src/lib/ldso/main.cc | 6 +----- repos/os/src/test/block/client/main.cc | 3 --- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/repos/base/src/lib/ldso/main.cc b/repos/base/src/lib/ldso/main.cc index ba353838b91..bc7490dbba6 100644 --- a/repos/base/src/lib/ldso/main.cc +++ b/repos/base/src/lib/ldso/main.cc @@ -391,7 +391,7 @@ struct Linker::Binary : private Root_object, public Elf_object { Init::list()->exec_static_constructors(); - /* call static construtors and register destructors */ + /* call static constructors and register destructors */ Func * const ctors_start = (Func *)lookup_symbol("_ctors_start"); Func * const ctors_end = (Func *)lookup_symbol("_ctors_end"); for (Func * ctor = ctors_end; ctor != ctors_start; (*--ctor)()); @@ -677,10 +677,6 @@ void Genode::init_ldso_phdr(Env &env) void Genode::exec_static_constructors() { - if (!binary_ptr->static_construction_pending()) - warning("Don't call Genode::Env::exec_static_constructors() " - "in components without static globals"); - binary_ptr->finish_static_construction(); } diff --git a/repos/os/src/test/block/client/main.cc b/repos/os/src/test/block/client/main.cc index d1b8fcffe3d..41224fd1888 100644 --- a/repos/os/src/test/block/client/main.cc +++ b/repos/os/src/test/block/client/main.cc @@ -386,9 +386,6 @@ void perform(Genode::Env &env, Genode::Heap &heap, unsigned timeo_ms = 0) void Component::construct(Genode::Env &env) { - /* XXX execute constructors of global statics */ - env.exec_static_constructors(); - using namespace Genode; try { From 4dafdbd5b75da7632d84b4411c1148431979f93c Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Fri, 21 Jun 2019 15:04:03 +0200 Subject: [PATCH 49/67] dde_linux: update 'fec' driver to version 4.16.3 Fixes #3432 --- repos/dde_linux/fec.list | 10 + repos/dde_linux/patches/fec_ndev_owner.patch | 34 + repos/dde_linux/patches/fec_tv64.patch | 28 - .../dde_linux/patches/fec_tx_bounce_dma.patch | 8 +- repos/dde_linux/ports/dde_linux.hash | 2 +- repos/dde_linux/ports/dde_linux.port | 6 +- repos/dde_linux/src/drivers/nic/fec/dummy.c | 146 ++++- .../dde_linux/src/drivers/nic/fec/lx_emul.cc | 155 +++-- repos/dde_linux/src/drivers/nic/fec/lx_emul.h | 615 +++++++++++++++--- repos/dde_linux/src/drivers/nic/fec/target.mk | 21 +- repos/dde_linux/src/drivers/usb/dummies.c | 2 +- .../dde_linux/src/drivers/usb_host/dummies.c | 2 +- .../dde_linux/src/include/lx_emul/compiler.h | 6 + repos/dde_linux/src/include/lx_emul/kernel.h | 1 + repos/dde_linux/src/include/lx_emul/kobject.h | 2 +- 15 files changed, 833 insertions(+), 205 deletions(-) create mode 100644 repos/dde_linux/patches/fec_ndev_owner.patch delete mode 100644 repos/dde_linux/patches/fec_tv64.patch diff --git a/repos/dde_linux/fec.list b/repos/dde_linux/fec.list index 9f83f66c258..1ad83228b71 100644 --- a/repos/dde_linux/fec.list +++ b/repos/dde_linux/fec.list @@ -2,8 +2,13 @@ linux-x.x.x/drivers/net/ethernet/freescale/fec.h linux-x.x.x/drivers/net/ethernet/freescale/fec_main.c linux-x.x.x/drivers/net/ethernet/freescale/fec_ptp.c linux-x.x.x/drivers/net/phy/mdio_bus.c +linux-x.x.x/drivers/net/phy/mdio_device.c +linux-x.x.x/drivers/net/phy/mdio-boardinfo.c +linux-x.x.x/drivers/net/phy/mdio-boardinfo.h linux-x.x.x/drivers/net/phy/phy_device.c linux-x.x.x/drivers/net/phy/phy.c +linux-x.x.x/drivers/net/phy/phy-c45.c +linux-x.x.x/drivers/net/phy/phy-core.c linux-x.x.x/drivers/net/phy/at803x.c linux-x.x.x/net/core/skbuff.c linux-x.x.x/net/ethernet/eth.c @@ -14,21 +19,26 @@ linux-x.x.x/include/asm-generic/bitops/__fls.h linux-x.x.x/include/asm-generic/bitops/ffs.h linux-x.x.x/include/asm-generic/bitops/fls.h linux-x.x.x/include/asm-generic/bitops/fls64.h +linux-x.x.x/include/linux/cgroup-defs.h linux-x.x.x/include/linux/errqueue.h +linux-x.x.x/include/linux/ethtool.h linux-x.x.x/include/linux/fec.h linux-x.x.x/include/linux/gpio/consumer.h linux-x.x.x/include/linux/if_ether.h linux-x.x.x/include/linux/list.h linux-x.x.x/include/linux/list_nulls.h linux-x.x.x/include/linux/log2.h +linux-x.x.x/include/linux/mdio.h linux-x.x.x/include/linux/mii.h linux-x.x.x/include/linux/mod_devicetable.h linux-x.x.x/include/linux/net.h linux-x.x.x/include/linux/netdev_features.h linux-x.x.x/include/linux/phy.h linux-x.x.x/include/linux/ptp_clock_kernel.h +linux-x.x.x/include/linux/rbtree.h linux-x.x.x/include/linux/rculist.h linux-x.x.x/include/linux/rculist_nulls.h +linux-x.x.x/include/linux/refcount.h linux-x.x.x/include/linux/skbuff.h linux-x.x.x/include/linux/socket.h linux-x.x.x/include/linux/timecounter.h diff --git a/repos/dde_linux/patches/fec_ndev_owner.patch b/repos/dde_linux/patches/fec_ndev_owner.patch new file mode 100644 index 00000000000..2667139ebd6 --- /dev/null +++ b/repos/dde_linux/patches/fec_ndev_owner.patch @@ -0,0 +1,34 @@ +diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c +index 74664a6..38cc18a 100644 +--- a/drivers/net/phy/phy_device.c ++++ b/drivers/net/phy/phy_device.c +@@ -944,7 +944,10 @@ EXPORT_SYMBOL(phy_attached_print); + int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, + u32 flags, phy_interface_t interface) + { ++#if 0 ++ /* 'driver' has not been set yet on Genode */ + struct module *ndev_owner = dev->dev.parent->driver->owner; ++#endif + struct mii_bus *bus = phydev->mdio.bus; + struct device *d = &phydev->mdio.dev; + bool using_genphy = false; +@@ -955,7 +958,7 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, + * our own module->refcnt here, otherwise we would not be able to + * unload later on. + */ +- if (ndev_owner != bus->owner && !try_module_get(bus->owner)) { ++ if (/*ndev_owner != bus->owner &&*/ !try_module_get(bus->owner)) { + dev_err(&dev->dev, "failed to get the bus module\n"); + return -EIO; + } +@@ -1060,7 +1063,9 @@ error_module_put: + module_put(d->driver->owner); + error_put_device: + put_device(d); ++#if 0 + if (ndev_owner != bus->owner) ++#endif + module_put(bus->owner); + return err; + } diff --git a/repos/dde_linux/patches/fec_tv64.patch b/repos/dde_linux/patches/fec_tv64.patch deleted file mode 100644 index 3decced6c1f..00000000000 --- a/repos/dde_linux/patches/fec_tv64.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/include/net/sock.h b/include/net/sock.h -index 14d3c07..818a1d1 100644 ---- a/include/net/sock.h -+++ b/include/net/sock.h -@@ -2148,8 +2148,8 @@ sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) - */ - if (sock_flag(sk, SOCK_RCVTSTAMP) || - (sk->sk_tsflags & SOF_TIMESTAMPING_RX_SOFTWARE) || -- (kt.tv64 && sk->sk_tsflags & SOF_TIMESTAMPING_SOFTWARE) || -- (hwtstamps->hwtstamp.tv64 && -+ (kt && sk->sk_tsflags & SOF_TIMESTAMPING_SOFTWARE) || -+ (hwtstamps->hwtstamp && - (sk->sk_tsflags & SOF_TIMESTAMPING_RAW_HARDWARE))) - __sock_recv_timestamp(msg, sk, skb); - else -diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index b2df375..02c065f 100644 ---- a/net/core/skbuff.c -+++ b/net/core/skbuff.c -@@ -4212,7 +4212,7 @@ EXPORT_SYMBOL(skb_try_coalesce); - */ - void skb_scrub_packet(struct sk_buff *skb, bool xnet) - { -- skb->tstamp.tv64 = 0; -+ skb->tstamp = 0; - skb->pkt_type = PACKET_HOST; - skb->skb_iif = 0; - skb->ignore_df = 0; diff --git a/repos/dde_linux/patches/fec_tx_bounce_dma.patch b/repos/dde_linux/patches/fec_tx_bounce_dma.patch index 4b0b4ee7786..1d6f0817e98 100644 --- a/repos/dde_linux/patches/fec_tx_bounce_dma.patch +++ b/repos/dde_linux/patches/fec_tx_bounce_dma.patch @@ -1,11 +1,11 @@ diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c -index b2a3220..18629c6 100644 +index d4604bc..3f72629 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c -@@ -2825,7 +2825,7 @@ fec_enet_alloc_txq_buffers(struct net_device *ndev, unsigned int queue) +@@ -2798,7 +2798,7 @@ fec_enet_alloc_txq_buffers(struct net_device *ndev, unsigned int queue) txq = fep->tx_queue[queue]; - bdp = txq->tx_bd_base; - for (i = 0; i < txq->tx_ring_size; i++) { + bdp = txq->bd.base; + for (i = 0; i < txq->bd.ring_size; i++) { - txq->tx_bounce[i] = kmalloc(FEC_ENET_TX_FRSIZE, GFP_KERNEL); + txq->tx_bounce[i] = kmalloc(FEC_ENET_TX_FRSIZE, GFP_KERNEL | GFP_LX_DMA); if (!txq->tx_bounce[i]) diff --git a/repos/dde_linux/ports/dde_linux.hash b/repos/dde_linux/ports/dde_linux.hash index 6fe9053470a..914809fc3b0 100644 --- a/repos/dde_linux/ports/dde_linux.hash +++ b/repos/dde_linux/ports/dde_linux.hash @@ -1 +1 @@ -4832c9de27d57c6e6eb3c04a6ff6be61b0237216 +aa28d681fc4c5c74f8e287608db1aedcb5cc35fc diff --git a/repos/dde_linux/ports/dde_linux.port b/repos/dde_linux/ports/dde_linux.port index bd72fdf7693..ac25d38e62a 100644 --- a/repos/dde_linux/ports/dde_linux.port +++ b/repos/dde_linux/ports/dde_linux.port @@ -109,9 +109,9 @@ HASH_INPUT += $(REP_DIR)/lxip.list # Freescale Ethernet controller # SRC_DIR_FEC := src/drivers/nic/fec -VERSION_FEC := 4.4.3 +VERSION_FEC := 4.16.3 URL(fec) := https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_FEC).tar.xz -SHA(fec) := 0b379cb19bbd7e38fc5a9a000ea927db55cce519a7400ec7fa705c581a6491dd +SHA(fec) := 0d6971a81da97e38b974c5eba31a74803bfe41aabc46d406c3acda56306c81a3 DIR(fec) := $(SRC_DIR_FEC) TAR_OPT(fec) := --strip-components=1 --files-from - < <(sed 's/-x.x.x/-$(VERSION_FEC)/g' $(REP_DIR)/fec.list) HASH_INPUT += $(REP_DIR)/fec.list @@ -209,6 +209,6 @@ PATCH_OPT(patches/intel_fb_hotplug.patch) := -p1 -d$(SRC_DIR_INTEL_FB) # Freescale NIC PATCH_OPT(patches/fec_skbuff_cast.patch) := -p1 -d$(SRC_DIR_FEC) PATCH_OPT(patches/fec_tx_bounce_dma.patch) := -p1 -d$(SRC_DIR_FEC) -PATCH_OPT(patches/fec_tv64.patch) := -p1 -d$(SRC_DIR_FEC) +PATCH_OPT(patches/fec_ndev_owner.patch) := -p1 -d$(SRC_DIR_FEC) # vi: set ft=make : diff --git a/repos/dde_linux/src/drivers/nic/fec/dummy.c b/repos/dde_linux/src/drivers/nic/fec/dummy.c index d0a1aee5aa3..6284a723d20 100644 --- a/repos/dde_linux/src/drivers/nic/fec/dummy.c +++ b/repos/dde_linux/src/drivers/nic/fec/dummy.c @@ -5,6 +5,16 @@ #include #include +void bus_unregister(struct bus_type *bus) +{ + TRACE_AND_STOP; +} + +void class_unregister(struct class *cls) +{ + TRACE_AND_STOP; +} + size_t copy_from_user(void *to, void const *from, size_t len) { TRACE_AND_STOP; @@ -45,6 +55,11 @@ void dma_free_coherent(struct device * d, size_t size, void *vaddr, dma_addr_t b TRACE_AND_STOP; } +void driver_unregister(struct device_driver *drv) +{ + TRACE_AND_STOP; +} + void dst_release(struct dst_entry *dst) { TRACE_AND_STOP; @@ -61,6 +76,17 @@ void eth_hw_addr_random(struct net_device *dev) TRACE_AND_STOP; } +void ethtool_convert_legacy_u32_to_link_mode(unsigned long *dst, u32 legacy_u32) +{ + TRACE_AND_STOP; +} + +bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32, + const unsigned long *src) +{ + TRACE_AND_STOP; +} + u32 ethtool_op_get_link(struct net_device * d) { TRACE_AND_STOP; @@ -89,12 +115,22 @@ void free_netdev(struct net_device * d) TRACE_AND_STOP; } +void free_uid(struct user_struct *dummy) +{ + TRACE_AND_STOP; +} + bool gfp_pfmemalloc_allowed(gfp_t g) { TRACE_AND_STOP; return -1; } +bool gfpflags_allow_blocking(const gfp_t gfp_flags) +{ + TRACE_AND_STOP; +} + int in_irq(void) { TRACE_AND_STOP; @@ -113,11 +149,31 @@ void *kmap_atomic(struct page *page) return NULL; } +const char *kobject_name(const struct kobject *kobj) +{ + TRACE_AND_STOP; +} + void kunmap_atomic(void *addr) { TRACE_AND_STOP; } +void might_sleep() +{ + TRACE_AND_STOP; +} + +void mm_unaccount_pinned_pages(struct mmpin *mmp) +{ + TRACE_AND_STOP; +} + +void module_put(struct module *mod) +{ + TRACE_AND_STOP; +} + void netif_tx_disable(struct net_device *dev) { TRACE_AND_STOP; @@ -158,36 +214,65 @@ struct timespec64 ns_to_timespec64(const s64 nsec) return ret; } +int of_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *env) +{ + TRACE_AND_STOP; +} + +int of_mdio_parse_addr(struct device *dev, const struct device_node *np) +{ + TRACE_AND_STOP; +} + struct device_node *of_node_get(struct device_node *node) { TRACE_AND_STOP; return NULL; } +void of_phy_deregister_fixed_link(struct device_node *np) +{ + TRACE_AND_STOP; +} + int of_phy_register_fixed_link(struct device_node *np) { TRACE_AND_STOP; return -1; } -void ptp_clock_event(struct ptp_clock *ptp, struct ptp_clock_event *event) +bool of_property_read_bool(const struct device_node *np, const char *propname) { TRACE_AND_STOP; } -int ptp_clock_index(struct ptp_clock *ptp) +void phy_led_triggers_unregister(struct phy_device *phy) { TRACE_AND_STOP; - return -1; } -int ptp_clock_unregister(struct ptp_clock *ptp) +void pm_runtime_disable(struct device *dev) +{ + TRACE_AND_STOP; +} + +int pm_runtime_put(struct device *dev) +{ + TRACE_AND_STOP; +} + +void ptp_clock_event(struct ptp_clock *ptp, struct ptp_clock_event *event) +{ + TRACE_AND_STOP; +} + +int ptp_clock_index(struct ptp_clock *ptp) { TRACE_AND_STOP; return -1; } -int regulator_disable(struct regulator *r) +int ptp_clock_unregister(struct ptp_clock *ptp) { TRACE_AND_STOP; return -1; @@ -214,80 +299,99 @@ void read_unlock_bh(rwlock_t * l) TRACE_AND_STOP; } -unsigned int tcp_hdrlen(const struct sk_buff *skb) +int regulator_disable(struct regulator *r) { TRACE_AND_STOP; return -1; } -u64 timecounter_cyc2time(struct timecounter *tc, cycle_t cycle_tstamp) +int request_threaded_irq(unsigned int irq, irq_handler_t handler, + irq_handler_t thread_fn, + unsigned long flags, const char *name, void *dev) { TRACE_AND_STOP; - return -1; } -void tso_build_data(struct sk_buff *skb, struct tso_t *tso, int size) +void sk_free(struct sock *sk) { TRACE_AND_STOP; } -void tso_build_hdr(struct sk_buff *skb, char *hdr, struct tso_t *tso, int size, bool is_last) +void sock_efree(struct sk_buff *skb) { TRACE_AND_STOP; } -int tso_count_descs(struct sk_buff *skb) +int strcmp(const char *s1, const char *s2) { TRACE_AND_STOP; return -1; } -void tso_start(struct sk_buff *skb, struct tso_t *tso) +char *strncpy(char *dst, const char *src, size_t s) { TRACE_AND_STOP; } -void unregister_netdev(struct net_device * d) +int sysfs_create_link_nowarn(struct kobject *kobj, + struct kobject *target, + const char *name) { TRACE_AND_STOP; } -void __vlan_hwaccel_put_tag(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci) +void sysfs_remove_link(struct kobject *kobj, const char *name) { TRACE_AND_STOP; } -void module_put(struct module *mod) +unsigned int tcp_hdrlen(const struct sk_buff *skb) { TRACE_AND_STOP; + return -1; } -void put_device(struct device *dev) +u64 timecounter_cyc2time(struct timecounter *tc, cycle_t cycle_tstamp) { TRACE_AND_STOP; + return -1; } -int strcmp(const char *s1, const char *s2) +void tso_build_data(struct sk_buff *skb, struct tso_t *tso, int size) +{ + TRACE_AND_STOP; +} + +void tso_build_hdr(struct sk_buff *skb, char *hdr, struct tso_t *tso, int size, bool is_last) +{ + TRACE_AND_STOP; +} + +int tso_count_descs(struct sk_buff *skb) { TRACE_AND_STOP; return -1; } -void class_unregister(struct class *cls) +void tso_start(struct sk_buff *skb, struct tso_t *tso) { TRACE_AND_STOP; } -void bus_unregister(struct bus_type *bus) +void unregister_netdev(struct net_device * d) { TRACE_AND_STOP; } -void driver_unregister(struct device_driver *drv) +void usleep_range(unsigned long min, unsigned long max) +{ + TRACE_AND_STOP; +} + +void __vlan_hwaccel_put_tag(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci) { TRACE_AND_STOP; } struct user_namespace init_user_ns; int sysctl_tstamp_allow_data; - diff --git a/repos/dde_linux/src/drivers/nic/fec/lx_emul.cc b/repos/dde_linux/src/drivers/nic/fec/lx_emul.cc index e60e6e23d2c..9a0c2ea143e 100644 --- a/repos/dde_linux/src/drivers/nic/fec/lx_emul.cc +++ b/repos/dde_linux/src/drivers/nic/fec/lx_emul.cc @@ -436,6 +436,7 @@ const struct of_device_id *of_match_device(const struct of_device_id *matches, return nullptr; } + void * devm_ioremap_resource(struct device *dev, struct resource *res) { Fec * fec = (Fec*) dev->plat_dev->dev.of_node; @@ -674,15 +675,15 @@ struct page *alloc_pages(gfp_t gfp_mask, unsigned int order) } -void *__alloc_page_frag(struct page_frag_cache *, unsigned int const fragsz, - gfp_t const gfp_mask) +void *page_frag_alloc(struct page_frag_cache *, unsigned int const fragsz, + gfp_t const gfp_mask) { struct page *page = allocate_pages(gfp_mask, fragsz); return page ? page->addr : page; } -void __free_page_frag(void *addr) +void page_frag_free(void *addr) { struct page *page = Addr_to_page_mapping::remove((unsigned long)addr); @@ -693,6 +694,7 @@ void __free_page_frag(void *addr) kfree(page); } + int driver_register(struct device_driver *drv) { new (Lx::Malloc::mem()) Driver(drv); @@ -899,9 +901,10 @@ bool napi_schedule_prep(struct napi_struct *n) } -void napi_complete(struct napi_struct *n) +bool napi_complete_done(struct napi_struct *n, int work_done) { clear_bit(NAPI_STATE_SCHED, &n->state); + return true; } @@ -982,7 +985,7 @@ static int of_mdiobus_register_phy(Fec::Mdio::Phy & ph, struct mii_bus *mdio) if (!phy || IS_ERR(phy)) return 1; phy->irq = ph.gpio_irq; - phy->dev.of_node = (device_node*) &ph; + phy->mdio.dev.of_node = (device_node*) &ph; /* All data is now stored in the phy struct; * register it */ @@ -1129,10 +1132,23 @@ u64 timecounter_read(struct timecounter *tc) return nsec; } + /********************* ** DUMMY FUNCTIONS ** *********************/ +int bus_register(struct bus_type *bus) +{ + TRACE; + return 0; +} + +int class_register(struct class_ *cls) +{ + TRACE; + return 0; +} + void clk_disable_unprepare(struct clk * c) { TRACE; @@ -1144,6 +1160,12 @@ int clk_prepare_enable(struct clk * c) return 0; } +int device_bind_driver(struct device *dev) +{ + TRACE; + return 0; +} + void device_initialize(struct device *dev) { TRACE; @@ -1155,167 +1177,180 @@ int device_init_wakeup(struct device *dev, bool val) return 0; } -struct regulator *__must_check devm_regulator_get(struct device *dev, const char *id) +int device_set_wakeup_enable(struct device *dev, bool enable) { TRACE; - return nullptr; + return 0; } -struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, unsigned int index) +struct regulator *__must_check devm_regulator_get(struct device *dev, const char *id) { TRACE; return nullptr; } -bool of_phy_is_fixed_link(struct device_node *np) +void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, size_t size, + enum dma_data_direction dir) { TRACE; - return 0; } -int pinctrl_pm_select_default_state(struct device *dev) +void dma_sync_single_for_device(struct device *dev, dma_addr_t addr, + size_t size, enum dma_data_direction dir) { TRACE; - return -1; } -int pinctrl_pm_select_sleep_state(struct device *dev) +struct device *get_device(struct device *dev) { TRACE; - return -1; + return dev; } -struct resource *platform_get_resource(struct platform_device * d, unsigned r1, unsigned r2) +struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, unsigned int index) { TRACE; return nullptr; } -void pm_runtime_enable(struct device *dev) +bool netdev_uses_dsa(struct net_device *dev) { TRACE; + return false; } -void pm_runtime_get_noresume(struct device *dev) +void netif_tx_lock_bh(struct net_device *dev) { TRACE; } -int pm_runtime_set_active(struct device *dev) +void netif_tx_start_all_queues(struct net_device *dev) { TRACE; - return 0; } -void pm_runtime_set_autosuspend_delay(struct device *dev, int delay) +void netif_tx_unlock_bh(struct net_device *dev) { TRACE; } -void pm_runtime_use_autosuspend(struct device *dev) +void netif_wake_queue(struct net_device * d) { TRACE; } -struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, struct device *parent) +const void *of_get_mac_address(struct device_node *np) { TRACE; - return (ptp_clock*)0xdeadbeef; + return nullptr; } -int regulator_enable(struct regulator * d) +int of_machine_is_compatible(const char *compat) + { TRACE; return 0; } -int class_register(struct class_ *cls) +void of_node_put(struct device_node *node) +{ + TRACE; +} + +bool of_phy_is_fixed_link(struct device_node *np) { TRACE; return 0; } -int try_module_get(struct module *mod) +void phy_led_trigger_change_speed(struct phy_device *phy) +{ + TRACE; +} + +int phy_led_triggers_register(struct phy_device *phy) { TRACE; return -1; } -struct device *get_device(struct device *dev) +int pinctrl_pm_select_default_state(struct device *dev) { TRACE; - return dev; + return -1; } -int device_bind_driver(struct device *dev) +int pinctrl_pm_select_sleep_state(struct device *dev) { TRACE; - return 0; + return -1; } -void netif_tx_start_all_queues(struct net_device *dev) +int platform_get_irq_byname(struct platform_device *dev, const char *name) { TRACE; + return -1; } -void netif_tx_lock_bh(struct net_device *dev) +struct resource *platform_get_resource(struct platform_device * d, unsigned r1, unsigned r2) { TRACE; + return nullptr; } -int device_set_wakeup_enable(struct device *dev, bool enable) +int platform_irq_count(struct platform_device *dev) { TRACE; return 0; } -void trace_consume_skb(struct sk_buff * sb) +void pm_runtime_enable(struct device *dev) { TRACE; } -void trace_kfree_skb(struct sk_buff * sb, void * p) +void pm_runtime_get_noresume(struct device *dev) { TRACE; } -void netif_tx_unlock_bh(struct net_device *dev) +int pm_runtime_set_active(struct device *dev) { TRACE; + return 0; } -void netif_wake_queue(struct net_device * d) +void pm_runtime_use_autosuspend(struct device *dev) { TRACE; } -bool netdev_uses_dsa(struct net_device *dev) +void pm_runtime_set_autosuspend_delay(struct device *dev, int delay) { TRACE; - return false; } -void dma_sync_single_for_device(struct device *dev, dma_addr_t addr, - size_t size, enum dma_data_direction dir) +struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, struct device *parent) { TRACE; + return (ptp_clock*)0xdeadbeef; } -void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, size_t size, - enum dma_data_direction dir) +void put_device(struct device *dev) { TRACE; } -void of_node_put(struct device_node *node) +int regulator_enable(struct regulator * d) { TRACE; + return 0; } -const void *of_get_mac_address(struct device_node *np) +int request_module(const char *fmt, ...) { TRACE; - return nullptr; + return 0; } void rtnl_lock(void) @@ -1328,16 +1363,36 @@ void rtnl_unlock(void) TRACE; } -int request_module(const char *fmt, ...) +void secpath_reset(struct sk_buff *skb) { TRACE; - return 0; } -int bus_register(struct bus_type *bus) +int sysfs_create_link(struct kobject *kobj, struct kobject *target, const char *name) { TRACE; - return 0; + return -1; +} + +void trace_consume_skb(struct sk_buff * sb) +{ + TRACE; +} + +void trace_kfree_skb(struct sk_buff * sb, void * p) +{ + TRACE; +} + +void trace_mdio_access(void *dummy, ...) +{ + TRACE; +} + +int try_module_get(struct module *mod) +{ + TRACE; + return -1; } } diff --git a/repos/dde_linux/src/drivers/nic/fec/lx_emul.h b/repos/dde_linux/src/drivers/nic/fec/lx_emul.h index c376188ebac..685e041259f 100644 --- a/repos/dde_linux/src/drivers/nic/fec/lx_emul.h +++ b/repos/dde_linux/src/drivers/nic/fec/lx_emul.h @@ -19,10 +19,43 @@ #include +#include #include #include #include +static inline void __read_once_size(const volatile void *p, void *res, int size) +{ + switch (size) { + case 1: *(__u8 *)res = *(volatile __u8 *)p; break; + case 2: *(__u16 *)res = *(volatile __u16 *)p; break; + case 4: *(__u32 *)res = *(volatile __u32 *)p; break; + case 8: *(__u64 *)res = *(volatile __u64 *)p; break; + default: + barrier(); + __builtin_memcpy((void *)res, (const void *)p, size); + barrier(); + } +} + +#ifdef __cplusplus +#define READ_ONCE(x) \ +({ \ + barrier(); \ + x; \ +}) +#else +#define READ_ONCE(x) \ +({ \ + union { typeof(x) __val; char __c[1]; } __u; \ + __read_once_size(&(x), __u.__c, sizeof(x)); \ + __u.__val; \ +}) +#endif + + +#include + void lx_backtrace(void); #define DEBUG_LINUX_PRINTK 0 @@ -59,8 +92,6 @@ typedef int clockid_t; enum { PAGE_SHIFT = 12 }; enum { HZ = 100UL, }; -struct list_head; - typedef __u16 __le16; typedef __u32 __le32; typedef __u64 __le64; @@ -129,7 +160,6 @@ enum { __GFP_REPEAT = 0x00000400u, }; -#include #include #include #include @@ -138,6 +168,7 @@ enum { #include #include #include +#include enum { ETH_HLEN = 14, @@ -206,11 +237,6 @@ static inline s64 timespec64_to_ns(const struct timespec64 *ts) ktime_t ns_to_ktime(u64 ns); -struct device_node -{ - const char * full_name; -}; - struct device; struct device_driver; @@ -220,6 +246,7 @@ struct bus_type const struct attribute_group **dev_groups; int (*match)(struct device *dev, struct device_driver *drv); + int (*uevent)(struct device *dev, struct kobj_uevent_env *env); int (*probe)(struct device *dev); const struct dev_pm_ops *pm; @@ -255,6 +282,7 @@ struct platform_device; struct device { char name[32]; struct device * parent; + struct kobject kobj; struct device_driver *driver; void * platform_data; void * driver_data; @@ -263,7 +291,8 @@ struct device { struct bus_type *bus; struct class *class; struct device_node *of_node; - struct platform_device * plat_dev; + struct fwnode_handle *fwnode; + struct platform_device *plat_dev; }; struct platform_device { @@ -358,6 +387,7 @@ struct net_device netdev_features_t features; struct net_device_stats stats; netdev_features_t hw_features; + int ifindex; const struct net_device_ops *netdev_ops; const struct ethtool_ops *ethtool_ops; const struct header_ops *header_ops; @@ -365,7 +395,10 @@ struct net_device unsigned int priv_flags; unsigned short hard_header_len; unsigned long mtu; + unsigned int min_mtu; + unsigned long max_mtu; unsigned short type; + unsigned char min_header_len; unsigned char addr_len; struct netdev_hw_addr_list mc; unsigned char *dev_addr; @@ -373,7 +406,7 @@ struct net_device unsigned long tx_queue_len; int watchdog_timeo; struct timer_list watchdog_timer; - struct device dev; + struct device dev; u16 gso_max_segs; struct phy_device *phydev; }; @@ -427,8 +460,6 @@ static inline int rcu_read_lock_bh_held(void) { return 1; } unsigned int jiffies_to_usecs(const unsigned long j); -struct rb_node {}; - #define __aligned(x) __attribute__((aligned(x))) #define kmemcheck_bitfield_begin(name) @@ -602,7 +633,10 @@ bool netif_queue_stopped(const struct net_device *dev); #define CONFIG_ARM 1 #define CONFIG_ARCH_MXC 1 +#define CONFIG_DEBUG_LOCK_ALLOC 1 +#define CONFIG_MDIO_DEVICE 1 #define CONFIG_OF_MDIO 1 +#define CONFIG_PHYLIB 1 #define CONFIG_PTP_1588_CLOCK 1 void rtnl_lock(void); @@ -617,26 +651,7 @@ void netif_tx_unlock_bh(struct net_device *dev); void napi_enable(struct napi_struct *n); void napi_disable(struct napi_struct *n); -static inline void __read_once_size(const volatile void *p, void *res, int size) -{ - switch (size) { - case 1: *(__u8 *)res = *(volatile __u8 *)p; break; - case 2: *(__u16 *)res = *(volatile __u16 *)p; break; - case 4: *(__u32 *)res = *(volatile __u32 *)p; break; - case 8: *(__u64 *)res = *(volatile __u64 *)p; break; - default: - barrier(); - __builtin_memcpy((void *)res, (const void *)p, size); - barrier(); - } -} - -#define READ_ONCE(x) \ -({ \ - union { typeof(x) __val; char __c[1]; } __u; \ - __read_once_size(&(x), __u.__c, sizeof(x)); \ - __u.__val; \ -}) +#define __randomize_layout extern unsigned long find_next_bit(const unsigned long *addr, unsigned long size, unsigned long offset); @@ -669,12 +684,6 @@ gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb); void dma_sync_single_for_device(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir); -bool napi_schedule_prep(struct napi_struct *n); - -void __napi_schedule(struct napi_struct *n); - -void napi_complete(struct napi_struct *n); - void *dev_get_platdata(const struct device *dev); int is_valid_ether_addr(const u8 *); @@ -710,6 +719,473 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np); struct resource *platform_get_resource(struct platform_device *, unsigned, unsigned); +/******************************* + ** asm-generic/atomic-long.h ** + *******************************/ + +static inline int atomic_long_cmpxchg(atomic_long_t *v, long old, long n) { + return cmpxchg(&v->counter, old, n); } + +/************************ + ** linux/capability.h ** + ************************/ + +bool capable(int); + +/************************* + ** linux/cgroup-defs.h ** + *************************/ + +struct cgroup; + +/****************** + ** linux/cred.h ** + ******************/ + +struct user_struct *current_user(); + +/******************* + ** linux/delay.h ** + *******************/ + +void usleep_range(unsigned long min, unsigned long max); + +/************************* + ** linux/etherdevice.h ** + *************************/ + +static inline void ether_addr_copy(u8 *dst, const u8 *src) +{ + *(u32 *)dst = *(const u32 *)src; + *(u16 *)(dst+ 4) = *(const u16 *)(src + 4); +} + +/********************* + ** linux/ethtool.h ** + *********************/ + +struct ethtool_link_ksettings; + +/**************** + ** linux/fs.h ** + ****************/ + +typedef struct { + size_t written; + size_t count; + union { + char __user *buf; + void *data; + } arg; + int error; +} read_descriptor_t; + +/******************** + ** linux/fwnode.h ** + ********************/ + +struct fwnode_handle { int dummy; }; + +/********************** + ** linux/mm_types.h ** + **********************/ + +struct page_frag_cache +{ + bool pfmemalloc; +}; + +/***************** + ** linux/gfp.h ** + *****************/ + +void *page_frag_alloc(struct page_frag_cache *nc, + unsigned int fragsz, gfp_t gfp_mask); + +void page_frag_free(void *addr); + +/********************* + ** linux/if_vlan.h ** + *********************/ + +static inline bool eth_type_vlan(__be16 ethertype) { return false; } + +/*********************** + ** linux/interrupt.h ** + ***********************/ + +#define IRQF_SHARED 0x00000080 +#define IRQF_ONESHOT 0x00002000 + +int request_threaded_irq(unsigned int irq, irq_handler_t handler, + irq_handler_t thread_fn, + unsigned long flags, const char *name, void *dev); + +/********************* + ** linux/lockdep.h ** + *********************/ + +struct lockdep_map { }; + +#define mutex_release(l, n, i) + +/***************************** + ** linux/mod_devicetable.h ** + *****************************/ + +#define MDIO_NAME_SIZE 32 + +/************************ + ** linux/memcontrol.h ** + ************************/ + +struct mem_cgroup; + +#define mem_cgroup_sockets_enabled 0 + +static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg) { + return false; } + +/*********************** + ** linux/netdevice.h ** + ***********************/ + +void __napi_schedule(struct napi_struct *n); + +typedef struct sk_buff **(*gro_receive_t)(struct sk_buff **, struct sk_buff *); + +struct sk_buff **call_gro_receive(gro_receive_t cb, struct sk_buff **head, struct sk_buff *skb); + +void dev_consume_skb_any(struct sk_buff *skb); + +bool napi_complete_done(struct napi_struct *n, int work_done); + +bool napi_schedule_prep(struct napi_struct *n); + +void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff **pp, int flush); + +/**************** + ** linux/of.h ** + ****************/ + +struct device_node +{ + const char * full_name; + struct fwnode_handle fwnode; +}; + +#define of_fwnode_handle(node) \ + ({ \ + typeof(node) __of_fwnode_handle_node = (node); \ + \ + __of_fwnode_handle_node ? \ + &__of_fwnode_handle_node->fwnode : NULL; \ + }) + +int of_machine_is_compatible(const char *compat); + +bool of_property_read_bool(const struct device_node *np, const char *propname); + +/*********************** + ** linux/of_device.h ** + ***********************/ + +int of_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *env); + +/********************* + ** linux/of_mdio.h ** + *********************/ + +int of_mdio_parse_addr(struct device *dev, const struct device_node *np); + +void of_phy_deregister_fixed_link(struct device_node *np); + +/***************** + ** linux/pci.h ** + *****************/ + +int dev_is_pci(struct device *dev); + +struct pci_dev; + +struct device_node * pci_device_to_OF_node(const struct pci_dev *pdev); + +#define to_pci_dev(n) NULL + +/****************************** + ** linux/phy_led_triggers.h ** + ******************************/ + +void phy_led_trigger_change_speed(struct phy_device *phy); + +int phy_led_triggers_register(struct phy_device *phy); + +void phy_led_triggers_unregister(struct phy_device *phy); + +/***************************** + ** linux/platform_device.h ** + *****************************/ + +int platform_get_irq_byname(struct platform_device *dev, const char *name); + +int platform_irq_count(struct platform_device *); + +/************************ + ** linux/pm_runtime.h ** + ************************/ + +void pm_runtime_disable(struct device *dev); + +int pm_runtime_put(struct device *dev); + +/********************* + ** linux/preempt.h ** + *********************/ + +#define in_task() (1) + +/********************** + ** linux/rcupdate.h ** + **********************/ + +#define rcu_assign_pointer(p, v) (p = v); + +#define rcu_dereference_protected(p, c) p + +/************************* + ** linux/scatterlist.h ** + *************************/ + +#define sg_is_last(sg) ((sg)->page_link & 0x02) + +/************************** + ** linux/sched/signal.h ** + **************************/ + +unsigned long rlimit(unsigned int limit); + +/************************ + ** linux/sched/user.h ** + ************************/ + +struct user_struct +{ + atomic_long_t locked_vm; +}; + +void free_uid(struct user_struct *); + +struct user_struct *get_uid(struct user_struct *u); + +/****************** + ** linux/sctp.h ** + ******************/ + +struct sctphdr +{ + unsigned unused; +}; + +struct kmem_cache *kmem_cache_create_usercopy(const char *name, size_t size, + size_t align, slab_flags_t flags, + size_t useroffset, size_t usersize, + void (*ctor)(void *)); + +/****************** + ** linux/slab.h ** + ******************/ + +void *kcalloc(size_t n, size_t size, gfp_t flags); + +void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **); + +/********************** + ** linux/spinlock.h ** + **********************/ + +int spin_is_locked(spinlock_t *lock); + +/******************** + ** linux/stddef.h ** + ********************/ + +#define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER)) + +/******************* + ** linux/sysfs.h ** + *******************/ + +int sysfs_create_link(struct kobject *kobj, struct kobject *target, const char *name); + +int sysfs_create_link_nowarn(struct kobject *kobj, struct kobject *target, const char *name); + +void sysfs_remove_link(struct kobject *kobj, const char *name); + +/************************* + ** linux/thread_info.h ** + *************************/ + +static inline void check_object_size(const void *ptr, unsigned long n, + bool to_user) { } + +void __bad_copy_from(void); +void __bad_copy_to(void); + +static inline void copy_overflow(int size, unsigned long count) +{ + WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count); +} + +static __always_inline bool +check_copy_size(const void *addr, size_t bytes, bool is_source) +{ + int sz = __compiletime_object_size(addr); + if (unlikely(sz >= 0 && sz < bytes)) { + if (!__builtin_constant_p(bytes)) + copy_overflow(sz, bytes); + else if (is_source) + __bad_copy_from(); + else + __bad_copy_to(); + return false; + } + check_object_size(addr, bytes, is_source); + return true; +} + +/**************************** + ** linux/user_namespace.h ** + ****************************/ + +struct user_namespace { }; + +/******************** + ** linux/uidgid.h ** + ********************/ + +kuid_t make_kuid(struct user_namespace *from, uid_t uid); + +/***************** + ** linux/uio.h ** + *****************/ + +struct kvec +{ + void *iov_base; + size_t iov_len; +}; + +bool _copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i); + +static __always_inline __must_check +bool copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i) +{ + if (unlikely(!check_copy_size(addr, bytes, false))) + return false; + else + return _copy_from_iter_full(addr, bytes, i); +} + +bool copy_from_iter_full_nocache(void *addr, size_t bytes, struct iov_iter *i); + +bool csum_and_copy_from_iter_full(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); + +/****************** + ** linux/wait.h ** + ******************/ + +bool wq_has_sleeper(struct wait_queue_head *wq_head); + +/******************** + ** net/checksum.h ** + ********************/ + +static inline __wsum +csum_block_sub(__wsum csum, __wsum csum2, int offset) +{ + return csum_block_add(csum, ~csum2, offset); +} + +static inline __wsum csum_unfold(__sum16 n) +{ + return (__force __wsum)n; +} + +/************************** + ** net/flow_dissector.h ** + **************************/ + +#define FLOW_DISSECTOR_F_PARSE_1ST_FRAG BIT(0) + +/************************* + ** net/net_namespace.h ** + *************************/ + +struct net; + +/****************** + ** net/l3mdev.h ** + ******************/ + +int l3mdev_master_ifindex_by_index(struct net *net, int ifindex); + +/********************* + ** net/pkt_sched.h ** + *********************/ + +#define DEFAULT_TX_QUEUE_LEN 1000 + +/*********************** + ** soc/imx/cpuidle.h ** + ***********************/ + +static inline void imx6q_cpuidle_fec_irqs_used(void) { } +static inline void imx6q_cpuidle_fec_irqs_unused(void) { } + +/************************* + ** trace/events/mdio.h ** + *************************/ + +void trace_mdio_access(void *dummy, ...); + +/********************************* + ** uapi/asm-generic/resource.h ** + *********************************/ + +# define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */ + +/***************************** + ** uapi/linux/capability.h ** + *****************************/ + +#define CAP_IPC_LOCK 14 + +/************************* + ** uapi/linux/kernel.h ** + *************************/ + +#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) + +/****************************** + ** uapi/linux/libc-compat.h ** + ******************************/ + +#define __UAPI_DEF_IF_IFMAP 1 +#define __UAPI_DEF_IF_IFNAMSIZ 1 +#define __UAPI_DEF_IF_IFREQ 1 +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1 + +/************************ + ** uapi/linux/types.h ** + ************************/ + +typedef unsigned __poll_t; + +/************************/ + +#define DECLARE_BITMAP(name,bits) \ + unsigned long name[BITS_TO_LONGS(bits)] + #include #include #include @@ -727,30 +1203,6 @@ bool device_may_wakeup(struct device *dev); int enable_irq_wake(unsigned int irq); int disable_irq_wake(unsigned int irq); -struct ethtool_ops { - int(*get_settings)(struct net_device *, struct ethtool_cmd *); - int(*set_settings)(struct net_device *, struct ethtool_cmd *); - void(*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *); - int(*get_regs_len)(struct net_device *); - void(*get_regs)(struct net_device *, struct ethtool_regs *, void *); - void(*get_wol)(struct net_device *, struct ethtool_wolinfo *); - int(*set_wol)(struct net_device *, struct ethtool_wolinfo *); - int(*nway_reset)(struct net_device *); - u32(*get_link)(struct net_device *); - int(*get_coalesce)(struct net_device *, struct ethtool_coalesce *); - int(*set_coalesce)(struct net_device *, struct ethtool_coalesce *); - void(*get_pauseparam)(struct net_device *, struct ethtool_pauseparam*); - int(*set_pauseparam)(struct net_device *, struct ethtool_pauseparam*); - void(*get_strings)(struct net_device *, u32 stringset, u8 *); - void(*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *); - int(*get_sset_count)(struct net_device *, int); - int(*get_ts_info)(struct net_device *, struct ethtool_ts_info *); - int(*get_tunable)(struct net_device *, - const struct ethtool_tunable *, void *); - int(*set_tunable)(struct net_device *, - const struct ethtool_tunable *, const void *); -}; - u32 ethtool_op_get_link(struct net_device *); void *dma_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); @@ -764,10 +1216,6 @@ int pinctrl_pm_select_sleep_state(struct device *dev); void netif_tx_disable(struct net_device *dev); -#include - -#define rcu_assign_pointer(p, v) (p = v); - #include #define netdev_hw_addr_list_for_each(ha, l) \ @@ -899,8 +1347,6 @@ typedef int rwlock_t; bool gfp_pfmemalloc_allowed(gfp_t); -struct user_namespace {}; - struct cred { struct user_namespace * user_ns; }; @@ -909,7 +1355,10 @@ struct file { const struct cred * f_cred; }; -struct net; +struct net +{ + struct user_namespace * user_ns; +}; struct percpu_counter { s64 count; @@ -975,9 +1424,6 @@ struct net *dev_net(const struct net_device *dev); #define read_pnet(pnet) (&init_net) -#define DECLARE_BITMAP(name,bits) \ - unsigned long name[BITS_TO_LONGS(bits)] - void bitmap_fill(unsigned long *dst, int nbits); void bitmap_zero(unsigned long *dst, int nbits); @@ -1041,7 +1487,10 @@ void page_counter_uncharge(struct page_counter *counter, unsigned long nr_pages) enum { UNDER_LIMIT, SOFT_LIMIT, OVER_LIMIT }; -struct inode {}; +struct inode +{ + kuid_t i_uid; +}; struct vm_area_struct; @@ -1097,11 +1546,6 @@ struct page *virt_to_head_page(const void *x); typeof(type) name #define this_cpu_ptr(ptr) ptr -struct page_frag_cache -{ - bool pfmemalloc; -}; - void *__alloc_page_frag(struct page_frag_cache *nc, unsigned int fragsz, gfp_t gfp_mask); unsigned long local_irq_save(unsigned long flags); @@ -1170,7 +1614,10 @@ void sg_mark_end(struct scatterlist *sg); void sg_set_buf(struct scatterlist *, const void *, unsigned int); void sg_set_page(struct scatterlist *, struct page *, unsigned int, unsigned int); -struct inet_skb_parm { }; +struct inet_skb_parm +{ + int iif; +}; enum { IPPROTO_IP = 0, @@ -1374,10 +1821,6 @@ struct device_node *of_get_next_available_child(const struct device_node *node, for (child = of_get_next_available_child(parent, NULL); child != NULL; \ child = of_get_next_available_child(parent, child)) -u32 mmd_eee_cap_to_ethtool_sup_t(u16 eee_cap); -u32 mmd_eee_adv_to_ethtool_adv_t(u16 eee_adv); -u16 ethtool_adv_to_mmd_eee_adv_t(u32 adv); - int driver_register(struct device_driver *drv); void driver_unregister(struct device_driver *drv); @@ -1401,9 +1844,10 @@ static inline bool is_multicast_ether_addr_64bits(const u8 addr[6+2]) static inline bool ether_addr_equal_64bits(const u8 addr1[6+2], const u8 addr2[6+2]) { - u64 fold = (*(const u64 *)addr1) ^ (*(const u64 *)addr2); + const u16 *a = (const u16 *)addr1; + const u16 *b = (const u16 *)addr2; - return (fold << 16) == 0; + return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0; } static inline bool eth_proto_is_802_3(__be16 proto) @@ -1483,6 +1927,7 @@ void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp); struct pm_qos_request {}; #define dma_wmb() __asm__ __volatile__ ("dmb oshst" : : : "memory") + #include #endif /* _SRC__DRIVERS__NIC__FEC__LX_EMUL_H_ */ diff --git a/repos/dde_linux/src/drivers/nic/fec/target.mk b/repos/dde_linux/src/drivers/nic/fec/target.mk index 82651bfe0d6..117aa615fe9 100644 --- a/repos/dde_linux/src/drivers/nic/fec/target.mk +++ b/repos/dde_linux/src/drivers/nic/fec/target.mk @@ -29,16 +29,17 @@ CC_C_OPT += -std=gnu89 # # Reduce build noise of compiling contrib code # -CC_OPT_fec_ptp = -Wno-unused-but-set-variable -Wno-unused-variable \ - -Wno-maybe-uninitialized -Wno-uninitialized -CC_OPT_fec_main = -Wno-unused-but-set-variable -Wno-unused-variable \ - -Wno-pointer-sign -Wno-int-conversion -Wno-unused-function \ - -Wno-uninitialized -CC_OPT_skbuff = -Wno-pointer-sign -Wno-int-conversion -Wno-uninitialized -CC_OPT_mdio_bus = -Wno-implicit-int -Wno-unused-function -Wno-pointer-sign -CC_OPT_eth = -Wno-pointer-sign -Wno-unused-function -CC_OPT_phy = -Wno-unused-function -Wno-unused-but-set-variable -CC_OPT_at803x = -Wno-unused-variable +CC_OPT_fec_ptp = -Wno-unused-but-set-variable -Wno-unused-variable \ + -Wno-maybe-uninitialized -Wno-uninitialized +CC_OPT_fec_main = -Wno-unused-but-set-variable -Wno-unused-variable \ + -Wno-pointer-sign -Wno-int-conversion -Wno-unused-function \ + -Wno-uninitialized +CC_OPT_skbuff = -Wno-pointer-sign -Wno-int-conversion -Wno-uninitialized +CC_OPT_mdio_bus = -Wno-implicit-int -Wno-unused-function -Wno-pointer-sign +CC_OPT_eth = -Wno-pointer-sign -Wno-unused-function +CC_OPT_phy = -Wno-unused-function -Wno-unused-but-set-variable +CC_OPT_phy_device = -Wno-unused-function +CC_OPT_at803x = -Wno-unused-variable vpath %.c $(LX_CONTRIB_DIR)/drivers/net/ethernet/freescale vpath %.c $(LX_CONTRIB_DIR)/drivers/net/phy diff --git a/repos/dde_linux/src/drivers/usb/dummies.c b/repos/dde_linux/src/drivers/usb/dummies.c index 2510b25099b..2650596cb63 100644 --- a/repos/dde_linux/src/drivers/usb/dummies.c +++ b/repos/dde_linux/src/drivers/usb/dummies.c @@ -258,7 +258,7 @@ int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh, *********************/ int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...) { TRACE; return 0; } -char *kobject_name(const struct kobject *kobj) { TRACE; return 0; } +const char *kobject_name(const struct kobject *kobj) { TRACE; return 0; } char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask) { TRACE; return 0; } diff --git a/repos/dde_linux/src/drivers/usb_host/dummies.c b/repos/dde_linux/src/drivers/usb_host/dummies.c index a15795c733a..a3eda534e94 100644 --- a/repos/dde_linux/src/drivers/usb_host/dummies.c +++ b/repos/dde_linux/src/drivers/usb_host/dummies.c @@ -231,7 +231,7 @@ int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh, *********************/ int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...) { TRACE; return 0; } -char *kobject_name(const struct kobject *kobj) { TRACE; return 0; } +const char *kobject_name(const struct kobject *kobj) { TRACE; return 0; } char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask) { TRACE; return 0; } diff --git a/repos/dde_linux/src/include/lx_emul/compiler.h b/repos/dde_linux/src/include/lx_emul/compiler.h index a4d67a69be5..896bd7da797 100644 --- a/repos/dde_linux/src/include/lx_emul/compiler.h +++ b/repos/dde_linux/src/include/lx_emul/compiler.h @@ -70,6 +70,10 @@ #define smp_read_barrier_depends() do { } while (0) #define smp_store_mb(var, value) do { WRITE_ONCE(var, value); barrier(); } while (0) +#ifndef __compiletime_object_size +# define __compiletime_object_size(obj) -1 +#endif + /************************** ** linux/compiler-gcc.h ** **************************/ @@ -78,6 +82,8 @@ #define __packed __attribute__((packed)) #endif +#define __weak __attribute__((weak)) + #define __aligned(x) __attribute__((aligned(x))) #define uninitialized_var(x) x = x diff --git a/repos/dde_linux/src/include/lx_emul/kernel.h b/repos/dde_linux/src/include/lx_emul/kernel.h index 5a687d35192..cbb5aa69b93 100644 --- a/repos/dde_linux/src/include/lx_emul/kernel.h +++ b/repos/dde_linux/src/include/lx_emul/kernel.h @@ -26,6 +26,7 @@ #define __is_defined(x) ___is_defined(x) #define IS_BUILTIN(option) __is_defined(option) #define IS_ENABLED(option) IS_BUILTIN(option) +#define IS_REACHABLE(option) IS_BUILTIN(option) /******************** ** linux/kernel.h ** diff --git a/repos/dde_linux/src/include/lx_emul/kobject.h b/repos/dde_linux/src/include/lx_emul/kobject.h index 2ed0ab34542..8f6f580a80e 100644 --- a/repos/dde_linux/src/include/lx_emul/kobject.h +++ b/repos/dde_linux/src/include/lx_emul/kobject.h @@ -52,6 +52,6 @@ struct kobj_uevent_env; int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...); void kobject_put(struct kobject *); -char *kobject_name(const struct kobject *kobj); +const char *kobject_name(const struct kobject *kobj); char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask); struct kobject * kobject_create_and_add(const char *, struct kobject *); From 5dd1abcc2da7fae757e34989c971c53954114b0c Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Thu, 27 Jun 2019 19:41:57 +0200 Subject: [PATCH 50/67] depot: add recipe for drivers_nic-imx7d_sabre Fixes #3433 --- .../pkg/drivers_nic-imx7d_sabre/README | 3 ++ .../pkg/drivers_nic-imx7d_sabre/archives | 2 ++ .../recipes/pkg/drivers_nic-imx7d_sabre/hash | 1 + .../raw/drivers_nic-imx7d_sabre/content.mk | 4 +++ .../drivers_nic-imx7d_sabre/drivers.config | 31 +++++++++++++++++++ .../recipes/raw/drivers_nic-imx7d_sabre/hash | 1 + tool/run/depot.inc | 1 + 7 files changed, 43 insertions(+) create mode 100644 repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/README create mode 100644 repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/archives create mode 100644 repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash create mode 100644 repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/content.mk create mode 100644 repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/drivers.config create mode 100644 repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/hash diff --git a/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/README b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/README new file mode 100644 index 00000000000..b9ad938515e --- /dev/null +++ b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/README @@ -0,0 +1,3 @@ + + Device drivers needed for scenarios + using one network interface diff --git a/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/archives b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/archives new file mode 100644 index 00000000000..97bdb9a0c8c --- /dev/null +++ b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/archives @@ -0,0 +1,2 @@ +_/src/fec_nic_drv +_/raw/drivers_nic-imx7d_sabre diff --git a/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash new file mode 100644 index 00000000000..3da4bbb87d8 --- /dev/null +++ b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash @@ -0,0 +1 @@ +2019-06-27 faeb36a0166e161f7f3565a03d62e025c980cd3c diff --git a/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/content.mk b/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/content.mk new file mode 100644 index 00000000000..91a38338ddf --- /dev/null +++ b/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/content.mk @@ -0,0 +1,4 @@ +content: drivers.config + +drivers.config: + cp $(REP_DIR)/recipes/raw/drivers_nic-imx7d_sabre/$@ $@ diff --git a/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/drivers.config b/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/drivers.config new file mode 100644 index 00000000000..f75b339c560 --- /dev/null +++ b/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/drivers.config @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/hash b/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/hash new file mode 100644 index 00000000000..60a2d6e1764 --- /dev/null +++ b/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/hash @@ -0,0 +1 @@ +2019-06-27 583a26eccfd3241f727170f5d9451c9f2d55d3b4 diff --git a/tool/run/depot.inc b/tool/run/depot.inc index 9e804c99315..da513070a57 100644 --- a/tool/run/depot.inc +++ b/tool/run/depot.inc @@ -482,6 +482,7 @@ proc drivers_nic_pkg { } { if {[have_spec zynq_qemu]} { return drivers_nic-zynq } if {[have_spec imx53_qsb]} { return drivers_nic-imx53_qsb } if {[have_spec imx6q_sabrelite]} { return drivers_nic-imx6q_sabrelite } + if {[have_spec imx7d_sabre]} { return drivers_nic-imx7d_sabre } puts stderr "drivers_nic package undefined for this build configuration" exit 1 From 71ce1442c8cc97e552214b75b3a9fe4e3c7723a0 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Thu, 27 Jun 2019 19:42:01 +0200 Subject: [PATCH 51/67] run: enable 'imx7d_sabre' in network tests Fixes #3434 --- repos/gems/run/depot_download.run | 2 +- repos/libports/run/fetchurl.inc | 2 +- repos/libports/run/lwip.run | 1 - repos/os/run/nic_dump.run | 2 +- repos/os/run/ping.run | 2 +- repos/os/run/ping_nic_router.run | 2 +- repos/ports/run/netperf.inc | 2 +- 7 files changed, 6 insertions(+), 7 deletions(-) diff --git a/repos/gems/run/depot_download.run b/repos/gems/run/depot_download.run index ffdde729023..038313bec26 100644 --- a/repos/gems/run/depot_download.run +++ b/repos/gems/run/depot_download.run @@ -1,6 +1,6 @@ create_boot_directory -if {[have_spec linux] || [have_spec imx7d_sabre] || [have_spec rpi3] || +if {[have_spec linux] || [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script does not support this platform." exit 0 diff --git a/repos/libports/run/fetchurl.inc b/repos/libports/run/fetchurl.inc index f0a9d77fd83..173376e9600 100644 --- a/repos/libports/run/fetchurl.inc +++ b/repos/libports/run/fetchurl.inc @@ -4,7 +4,7 @@ # \date 2016-06-05 # -if {[have_spec linux] || [have_spec imx7d_sabre] || [have_spec rpi3] || +if {[have_spec linux] || [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script does not support this platform." exit 0 diff --git a/repos/libports/run/lwip.run b/repos/libports/run/lwip.run index 6c28d22860b..679c0748144 100644 --- a/repos/libports/run/lwip.run +++ b/repos/libports/run/lwip.run @@ -22,7 +22,6 @@ if {[expr [have_spec linux]] || [expr [have_spec imx53] && [have_spec trustzone]] || - [expr [have_spec imx7d_sabre]] || [have_spec rpi3] || [expr [have_spec riscv]]} { puts "\n Run script is not supported on this platform. \n"; exit 0 } diff --git a/repos/os/run/nic_dump.run b/repos/os/run/nic_dump.run index 6b4605f034d..b063baa8c0d 100644 --- a/repos/os/run/nic_dump.run +++ b/repos/os/run/nic_dump.run @@ -1,5 +1,5 @@ if {[have_spec foc] || [have_spec odroid_xu] || [have_spec linux] || - [have_spec imx7d_sabre] || [have_spec rpi3] || + [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script is not supported on this platform." exit 0 diff --git a/repos/os/run/ping.run b/repos/os/run/ping.run index aa53607b276..bd138ff9b5c 100644 --- a/repos/os/run/ping.run +++ b/repos/os/run/ping.run @@ -1,4 +1,4 @@ -if {[have_spec foc] || [have_spec linux] || [have_spec imx7d_sabre] || +if {[have_spec foc] || [have_spec linux] || [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script is not supported on this platform." diff --git a/repos/os/run/ping_nic_router.run b/repos/os/run/ping_nic_router.run index 7dcdef06295..acc9a890a85 100644 --- a/repos/os/run/ping_nic_router.run +++ b/repos/os/run/ping_nic_router.run @@ -1,4 +1,4 @@ -if {[have_spec foc] || [have_spec odroid_xu] || [have_spec linux] || [have_spec imx7d_sabre] || +if {[have_spec foc] || [have_spec odroid_xu] || [have_spec linux] || [have_spec rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script is not supported on this platform." diff --git a/repos/ports/run/netperf.inc b/repos/ports/run/netperf.inc index de1b8b1ab99..f01ed78246b 100644 --- a/repos/ports/run/netperf.inc +++ b/repos/ports/run/netperf.inc @@ -21,7 +21,7 @@ if {[have_include "power_on/qemu"] && exit 0 } -if {[expr [have_spec imx53] && [have_spec trustzone]] || [have_spec imx7d_sabre]} { +if {[expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script is not supported on this platform." exit 0 } From db6e013577e1566d85779585e95ceeafa00f4e68 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 25 Jun 2019 19:04:44 +0200 Subject: [PATCH 52/67] clipboard: match client labels against focus When setting the config attribute 'match_labels="yes"', the clipboard performs plausibility checks for copy and paste operations against the nitpicker focus. Issue #3437 --- repos/os/src/server/clipboard/main.cc | 89 ++++++++++++++++++++------- 1 file changed, 68 insertions(+), 21 deletions(-) diff --git a/repos/os/src/server/clipboard/main.cc b/repos/os/src/server/clipboard/main.cc index 0d8b2e80b3b..30b00d07d92 100644 --- a/repos/os/src/server/clipboard/main.cc +++ b/repos/os/src/server/clipboard/main.cc @@ -76,15 +76,11 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy Genode::Attached_rom_dataspace _config { _env, "config" }; - bool _verbose_config() - { - char const *attr = "verbose"; - return _config.xml().attribute_value(attr, false); - } - - bool verbose { _verbose_config() }; + bool _verbose = false; + bool _match_labels = false; typedef Genode::String<100> Domain; + typedef Genode::String<100> Label; Genode::Attached_rom_dataspace _focus_ds { _env, "focus" }; @@ -94,6 +90,7 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy { _env.ep(), *this, &Main::_handle_focus }; Domain _focused_domain { }; + Label _focused_label { }; /** * Handle configuration changes @@ -101,7 +98,8 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy void _handle_config() { _config.update(); - verbose = _verbose_config(); + _verbose = _config.xml().attribute_value("verbose", false); + _match_labels = _config.xml().attribute_value("match_labels", false); } /** @@ -114,14 +112,14 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy _focus_ds.update(); _focused_domain = Domain(); + _focused_label = Label(); - try { - Genode::Xml_node focus(_focus_ds.local_addr(), _focus_ds.size()); - - if (focus.attribute_value("active", false)) - _focused_domain = focus.attribute_value("domain", Domain()); + Genode::Xml_node const focus = _focus_ds.xml(); - } catch (...) { } + if (focus.attribute_value("active", false)) { + _focused_domain = focus.attribute_value("domain", Domain()); + _focused_label = focus.attribute_value("label", Label()); + } } Domain _domain(Genode::Session_label const &label) const @@ -135,20 +133,30 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy return Domain(); } - Domain _domain(Rom::Reader const &reader) const + Label _label(Rom::Reader const &reader) const { Rom::Session_component const &rom_session = static_cast(reader); - return _domain(rom_session.label()); + return rom_session.label(); } - Domain _domain(Rom::Writer const &writer) const + Domain _domain(Rom::Reader const &reader) const + { + return _domain(_label(reader)); + } + + Label _label(Rom::Writer const &writer) const { Report::Session_component const &report_session = static_cast(writer); - return _domain(report_session.label()); + return report_session.label(); + } + + Domain _domain(Rom::Writer const &writer) const + { + return _domain(_label(writer)); } bool _flow_defined(Domain const &from, Domain const &to) const @@ -175,6 +183,39 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy return result; } + bool _client_label_matches_focus(Genode::Session_label const &label) const + { + using namespace Genode; + + /* + * The client label has the suffix " -> clipboard". Strip off this + * part to make the label comparable with the label of the client's + * nitpicker session (which has of course no such suffix). + */ + char const *suffix = " -> clipboard"; + size_t const suffix_len = strlen(suffix); + + if (label.length() < suffix_len + 1) + return false; + + size_t const truncated_label_len = label.length() - suffix_len - 1; + + Session_label const + truncated_label(Cstring(label.string(), truncated_label_len)); + + /* + * We accept any subsystem of the client to have the nitpicker focus. + * E.g., a multi-window application may have multiple nitpicker + * sessions, one for each window. The labels of all of those nitpicker + * session share the first part with application's clipboard label. + */ + bool const focus_lies_in_client_subsystem = + !strcmp(_focused_label.string(), truncated_label.string(), + truncated_label_len); + + return focus_lies_in_client_subsystem; + } + /** * Rom::Module::Read_policy interface */ @@ -185,6 +226,9 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy Domain const from_domain = _domain(writer); Domain const to_domain = _domain(reader); + if (_match_labels && !_client_label_matches_focus(_label(reader))) + return false; + if (from_domain == to_domain) return true; @@ -194,14 +238,16 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy return false; } - /** * Rom::Module::Write_policy interface */ bool write_permitted(Rom::Module const &module, Rom::Writer const &writer) const override { - if (_focused_domain.valid() && _domain(writer) == _focused_domain) + bool const domain_matches = + _focused_domain.valid() && _domain(writer) == _focused_domain; + + if ((!_match_labels || _client_label_matches_focus(_label(writer))) && domain_matches) return true; warning("unexpected attempt by '", writer.label(), "' " @@ -212,11 +258,12 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy Rom::Registry _rom_registry { _env.ram(), _env.rm(), *this, *this }; - Report::Root report_root = { _env, _sliced_heap, _rom_registry, verbose }; + Report::Root report_root = { _env, _sliced_heap, _rom_registry, _verbose }; Rom ::Root rom_root = { _env, _sliced_heap, _rom_registry }; Main(Genode::Env &env) : _env(env) { + _handle_config(); _focus_ds.sigh(_focus_handler); _handle_focus(); From 6399fc12acf0a275cdffb7f1298ac5d776a51a7b Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 1 Jul 2019 16:05:09 +0200 Subject: [PATCH 53/67] clipboard: allow for dynamic reconfiguration --- repos/os/src/server/clipboard/main.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/repos/os/src/server/clipboard/main.cc b/repos/os/src/server/clipboard/main.cc index 30b00d07d92..0f272bf5fa7 100644 --- a/repos/os/src/server/clipboard/main.cc +++ b/repos/os/src/server/clipboard/main.cc @@ -263,6 +263,7 @@ struct Clipboard::Main : Rom::Module::Read_policy, Rom::Module::Write_policy Main(Genode::Env &env) : _env(env) { + _config.sigh(_config_handler); _handle_config(); _focus_ds.sigh(_focus_handler); From fc7b983a40a33f9b7b7e4b07747ef723f107ddef Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 25 Jun 2019 16:46:04 +0200 Subject: [PATCH 54/67] terminal: clipboard support Fixes #2079 --- repos/gems/recipes/src/terminal/used_apis | 1 + repos/gems/src/server/terminal/README | 20 ++- repos/gems/src/server/terminal/main.cc | 123 +++++++++++++ .../src/server/terminal/text_screen_surface.h | 165 +++++++++++++++++- .../char_cell_array_character_screen.h | 2 +- repos/os/include/terminal/types.h | 17 ++ 6 files changed, 323 insertions(+), 5 deletions(-) diff --git a/repos/gems/recipes/src/terminal/used_apis b/repos/gems/recipes/src/terminal/used_apis index aec14c9df46..ad8294e0663 100644 --- a/repos/gems/recipes/src/terminal/used_apis +++ b/repos/gems/recipes/src/terminal/used_apis @@ -5,5 +5,6 @@ input_session nitpicker_gfx terminal_session timer_session +report_session vfs gems diff --git a/repos/gems/src/server/terminal/README b/repos/gems/src/server/terminal/README index b2ae8a590a8..2a3ec4dbbe5 100644 --- a/repos/gems/src/server/terminal/README +++ b/repos/gems/src/server/terminal/README @@ -1,14 +1,14 @@ This is a graphical terminal implementation. It provides the Terminal service and uses a nitpicker session for screen representation. -Configuration -~~~~~~~~~~~~~ + +Color configuration +~~~~~~~~~~~~~~~~~~~ The default color palette can be configured via the XML configuration node like follows. There are 16 colors configurable - index 0-7 normal color and index 8-15 bright (bold) colors. - ! ! ! @@ -17,3 +17,17 @@ index 0-7 normal color and index 8-15 bright (bold) colors. ! ... ! + +Clipboard support +~~~~~~~~~~~~~~~~~ + +With the '' attribute 'copy="yes"' specified, the terminal allows +the user to select text to be reported to a "clipboard" report. The selection +mode is activated by holding the left shift key. While the selection mode +is active, the text position under mouse pointer is highlighted and the +user can select text via the left mouse button. Upon release of the mouse +button, the selection is reported. + +Vice versa, with the '' attribute 'paste="yes"' specified, the +terminal allows the user to paste the content of a "clipboard" ROM session +to the terminal client by pressing the middle mouse button. diff --git a/repos/gems/src/server/terminal/main.cc b/repos/gems/src/server/terminal/main.cc index dd520c7bb2e..fbacec3b4ca 100644 --- a/repos/gems/src/server/terminal/main.cc +++ b/repos/gems/src/server/terminal/main.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -72,6 +73,9 @@ struct Terminal::Main : Character_consumer Color_palette _color_palette { }; + Constructible _clipboard_rom { }; + Constructible _clipboard_reporter { }; + void _handle_config(); Signal_handler
_config_handler { @@ -82,6 +86,14 @@ struct Terminal::Main : Character_consumer Framebuffer _framebuffer { _env, _config_handler }; + Point _pointer { }; /* pointer positon in pixels */ + + bool _shift_pressed = false; + + bool _selecting = false; + + struct Paste_buffer { char buffer[READ_BUFFER_SIZE]; } _paste_buffer { }; + typedef Pixel_rgb565 PT; Constructible> _text_screen_surface { }; @@ -139,6 +151,9 @@ struct Terminal::Main : Character_consumer Signal_handler
_input_handler { _env.ep(), *this, &Main::_handle_input }; + void _report_clipboard_selection(); + void _paste_clipboard_content(); + Main(Env &env) : _env(env) { _timer .sigh(_flush_handler); @@ -170,6 +185,12 @@ void Terminal::Main::_handle_config() _font.construct(_heap, _root_dir, cache_limit); + _clipboard_reporter.conditional(config.attribute_value("copy", false), + _env, "clipboard", "clipboard"); + + _clipboard_rom.conditional(config.attribute_value("paste", false), + _env, "clipboard"); + /* * Adapt terminal to font or framebuffer mode changes */ @@ -252,6 +273,56 @@ void Terminal::Main::_handle_input() { _input.for_each_event([&] (Input::Event const &event) { + event.handle_absolute_motion([&] (int x, int y) { + + _pointer = Point(x, y); + + if (_shift_pressed) { + _text_screen_surface->pointer(_pointer); + _schedule_flush(); + } + + if (_selecting) { + _text_screen_surface->define_selection(_pointer); + _schedule_flush(); + } + }); + + if (event.key_press(Input::KEY_LEFTSHIFT)) { + if (_clipboard_reporter.constructed()) { + _shift_pressed = true; + _text_screen_surface->clear_selection(); + _text_screen_surface->pointer(_pointer); + _schedule_flush(); + } + } + + if (event.key_release(Input::KEY_LEFTSHIFT)) { + _shift_pressed = false; + _text_screen_surface->pointer(Point(-1, -1)); + _schedule_flush(); + } + + if (event.key_press(Input::BTN_LEFT)) { + if (_shift_pressed) { + _selecting = true; + _text_screen_surface->start_selection(_pointer); + } else { + _text_screen_surface->clear_selection(); + } + _schedule_flush(); + } + + if (event.key_release(Input::BTN_LEFT)) { + if (_selecting) { + _selecting = false; + _report_clipboard_selection(); + } + } + + if (event.key_press(Input::BTN_MIDDLE)) + _paste_clipboard_content(); + event.handle_press([&] (Input::Keycode, Codepoint codepoint) { /* function-key unicodes */ @@ -304,4 +375,56 @@ void Terminal::Main::_handle_input() } +void Terminal::Main::_report_clipboard_selection() +{ + if (!_clipboard_reporter.constructed()) + return; + + _clipboard_reporter->generate([&] (Xml_generator &xml) { + _text_screen_surface->for_each_selected_character([&] (Codepoint c) { + String<10> const utf8(c); + if (utf8.valid()) + xml.append_sanitized(utf8.string(), utf8.length() - 1); + }); + }); +} + + +void Terminal::Main::_paste_clipboard_content() +{ + if (!_clipboard_rom.constructed()) + return; + + _clipboard_rom->update(); + + _paste_buffer = { }; + + /* leave last byte as zero-termination in tact */ + size_t const max_len = sizeof(_paste_buffer.buffer) - 1; + size_t const len = + _clipboard_rom->xml().decoded_content(_paste_buffer.buffer, max_len); + + if (len == max_len) { + warning("clipboard content exceeds paste buffer"); + return; + } + + if (len >= (size_t)_read_buffer.avail_capacity()) { + warning("clipboard content exceeds read-buffer capacity"); + return; + } + + for (Utf8_ptr utf8(_paste_buffer.buffer); utf8.complete(); utf8 = utf8.next()) { + + Codepoint const c = utf8.codepoint(); + + /* filter out control characters */ + if (c.value < 32 && c.value != 10) + continue; + + _read_buffer.add(c); + } +} + + void Component::construct(Genode::Env &env) { static Terminal::Main main(env); } diff --git a/repos/gems/src/server/terminal/text_screen_surface.h b/repos/gems/src/server/terminal/text_screen_surface.h index 3dba87959ba..ac038323b39 100644 --- a/repos/gems/src/server/terminal/text_screen_surface.h +++ b/repos/gems/src/server/terminal/text_screen_surface.h @@ -91,6 +91,17 @@ class Terminal::Text_screen_surface Point start() const { return Point(1, 1); } bool valid() const { return columns*lines > 0; } + + /** + * Return character position at given pixel coordinates + */ + Position position(Point p) const + { + if (char_width.value == 0 || char_height == 0) + return Position { }; + + return Position((p.x() << 8) / char_width.value, p.y() / char_height); + } }; /** @@ -133,6 +144,29 @@ class Terminal::Text_screen_surface Decoder _decoder { _character_screen }; + struct Selection + { + Position start { }; + Position end { }; + + bool defined = false; + + bool selected(Position pos) const + { + return defined && pos.in_range(start, end); + } + + template + void for_each_line(FN const &fn) const + { + for (int i = min(start.y, end.y); i <= max(start.y, end.y); i++) + fn(i); + } + + } _selection { }; + + Position _pointer { -1, -1 }; + public: /** @@ -199,7 +233,20 @@ class Terminal::Text_screen_surface Char_cell const cell = _cell_array.get_cell(column, line); - _font.apply_glyph(cell.codepoint(), [&] (Glyph_painter::Glyph const &glyph) { + Codepoint codepoint = cell.codepoint(); + + /* display absent codepoints as whitespace */ + bool const codepoint_valid = (codepoint.value != 0); + + bool const selected = _selection.selected(Position(column, line)) + && codepoint_valid; + + bool const pointer = (_pointer == Position(column, line)); + + if (!codepoint_valid) + codepoint = Codepoint{' '}; + + _font.apply_glyph(codepoint, [&] (Glyph_painter::Glyph const &glyph) { Color_palette::Highlighted const highlighted { cell.highlight() }; @@ -216,6 +263,16 @@ class Terminal::Text_screen_surface Color fg_color = _palette.foreground(fg_idx, highlighted); Color bg_color = _palette.background(bg_idx, highlighted); + if (selected) { + bg_color = Color(180, 180, 180); + fg_color = Color( 50, 50, 50); + } + + if (pointer) { + bg_color = Color(220, 220, 220); + fg_color = Color( 50, 50, 50); + } + if (cell.has_cursor()) { fg_color = Color( 63, 63, 63); bg_color = Color(255, 255, 255); @@ -271,6 +328,8 @@ class Terminal::Text_screen_surface void apply_character(Character c) { + clear_selection(); + /* submit character to sequence decoder */ _decoder.insert(c); } @@ -284,6 +343,110 @@ class Terminal::Text_screen_surface * Return size in colums/rows */ Area size() const { return _geometry.size(); } + + /** + * Set pointer position in pixels (to show the cursor) + */ + void pointer(Point pointer) + { + auto position_valid = [&] (Position pos) { + return pos.y >= 0 && pos.y < (int)_geometry.lines; }; + + /* update old position */ + if (position_valid(_pointer)) + _cell_array.mark_line_as_dirty(_pointer.y); + + _pointer = _geometry.position(pointer); + + /* update new position */ + if (position_valid(_pointer)) + _cell_array.mark_line_as_dirty(_pointer.y); + } + + /** + * Set anchor point of selection + * + * \param pointer pointer position in pixels + */ + void start_selection(Point pointer) + { + if (_selection.defined) + clear_selection(); + + _selection.start = _geometry.position(pointer); + + define_selection(pointer); + } + + /** + * Set end position of current selection + * + * \param pointer pointer position in pixels + */ + void define_selection(Point pointer) + { + _selection.for_each_line([&] (int line) { + _cell_array.mark_line_as_dirty(line); }); + + _selection.end = _geometry.position(pointer); + _selection.defined = true; + + _selection.for_each_line([&] (int line) { + _cell_array.mark_line_as_dirty(line); }); + } + + void clear_selection() + { + if (!_selection.defined) + return; + + _selection.for_each_line([&] (int line) { + _cell_array.mark_line_as_dirty(line); }); + + _selection.defined = false; + } + + template + void for_each_selected_character(FN const &fn) const + { + for (unsigned row = 0; row < _geometry.lines; row++) { + bool skip_remaining_chars_on_row = false; + + for (unsigned column = 0; column < _geometry.columns; column++) { + + if (skip_remaining_chars_on_row) + continue; + + if (!_selection.selected(Position(column, row))) + continue; + + Codepoint const c { _cell_array.get_cell(column, row).value }; + + if (c.value == 0) { + + auto remaining_line_empty = [&] () + { + for (unsigned i = column + 1; i < _geometry.columns; i++) + if (_cell_array.get_cell(i, row).value) + return false; + + return true; + }; + + /* generate one line break at the end of a selected line */ + if (remaining_line_empty()) { + fn(Codepoint{'\n'}); + skip_remaining_chars_on_row = true; + + } else { + fn(Codepoint{' '}); + } + } else { + fn(c); + } + } + } + } }; #endif /* _TEXT_SCREEN_SURFACE_H_ */ diff --git a/repos/os/include/terminal/char_cell_array_character_screen.h b/repos/os/include/terminal/char_cell_array_character_screen.h index d6c218b2316..16b6941219d 100644 --- a/repos/os/include/terminal/char_cell_array_character_screen.h +++ b/repos/os/include/terminal/char_cell_array_character_screen.h @@ -20,7 +20,7 @@ struct Char_cell { - Genode::uint16_t value { ' ' }; + Genode::uint16_t value { 0 }; unsigned char attr; unsigned char color; diff --git a/repos/os/include/terminal/types.h b/repos/os/include/terminal/types.h index 07499879b70..7bd8f3ee0dc 100644 --- a/repos/os/include/terminal/types.h +++ b/repos/os/include/terminal/types.h @@ -76,6 +76,23 @@ struct Terminal::Position bool operator != (Position const &pos) const { return (pos.x != x) || (pos.y != y); } + bool operator >= (Position const &other) const + { + if (y > other.y) + return true; + + if (y == other.y && x >= other.x) + return true; + + return false; + } + + bool in_range(Position start, Position end) const + { + return (end >= start) ? *this >= start && end >= *this + : *this >= end && start >= *this; + } + /** * Return true if position lies within the specified boundaries */ From 2da604a6e2bf1d53bf5ac4a4a0607fca36824032 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 1 Jul 2019 09:09:19 +0200 Subject: [PATCH 55/67] terminal: make color 4 less green, less saturated Issue #3406 --- repos/gems/src/server/terminal/color_palette.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/gems/src/server/terminal/color_palette.h b/repos/gems/src/server/terminal/color_palette.h index 8dd4c654b65..7f82fed4b23 100644 --- a/repos/gems/src/server/terminal/color_palette.h +++ b/repos/gems/src/server/terminal/color_palette.h @@ -47,7 +47,7 @@ class Terminal::Color_palette " " /* red */ " " /* green */ " " /* yellow */ - " " /* blue */ + " " /* blue */ " " /* magenta */ " " /* cyan */ " " /* white */ From 1fe9b07c990c3f56c365f54f142ddb2fbb9e3a44 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 27 Jun 2019 19:03:03 +0200 Subject: [PATCH 56/67] wm: forwarding of clipboard ROM/Report sessions The labels of clipboard ROM and clipboard report sessions of WM clients must be consistent with the client's nitpicker label. Hence, we must route those sessions through the window manager, analogously to the approach taken for shape reports in #3165. Issue #3437 --- repos/gems/recipes/pkg/motif_wm/runtime | 11 ++- repos/gems/recipes/pkg/themed_wm/runtime | 6 +- repos/gems/recipes/pkg/wm/runtime | 4 +- repos/gems/recipes/raw/motif_wm/wm.config | 21 +++-- repos/gems/recipes/raw/wm/wm.config | 39 +++++---- repos/gems/run/launcher.run | 2 +- repos/gems/run/sculpt/leitzentrale.config | 4 +- repos/gems/run/wm.run | 4 +- repos/gems/src/server/wm/main.cc | 2 + repos/gems/src/server/wm/report_forwarder.h | 5 +- repos/gems/src/server/wm/rom_forwarder.h | 96 +++++++++++++++++++++ repos/libports/run/mupdf.run | 4 +- repos/libports/run/qt5_common.inc | 2 +- repos/ports/run/vbox_win.inc | 4 +- 14 files changed, 167 insertions(+), 37 deletions(-) create mode 100644 repos/gems/src/server/wm/rom_forwarder.h diff --git a/repos/gems/recipes/pkg/motif_wm/runtime b/repos/gems/recipes/pkg/motif_wm/runtime index c01a5627516..b963b61c9e3 100644 --- a/repos/gems/recipes/pkg/motif_wm/runtime +++ b/repos/gems/recipes/pkg/motif_wm/runtime @@ -1,8 +1,15 @@ - + + + + + + + + - + diff --git a/repos/gems/recipes/pkg/themed_wm/runtime b/repos/gems/recipes/pkg/themed_wm/runtime index 8bff9dca668..39f04e7e52e 100644 --- a/repos/gems/recipes/pkg/themed_wm/runtime +++ b/repos/gems/recipes/pkg/themed_wm/runtime @@ -3,11 +3,13 @@ - + + + - + diff --git a/repos/gems/recipes/pkg/wm/runtime b/repos/gems/recipes/pkg/wm/runtime index 76bfe5f31e3..9c92c01a972 100644 --- a/repos/gems/recipes/pkg/wm/runtime +++ b/repos/gems/recipes/pkg/wm/runtime @@ -3,7 +3,9 @@ - + + + diff --git a/repos/gems/recipes/raw/motif_wm/wm.config b/repos/gems/recipes/raw/motif_wm/wm.config index 0296db9902f..0651567530c 100644 --- a/repos/gems/recipes/raw/motif_wm/wm.config +++ b/repos/gems/recipes/raw/motif_wm/wm.config @@ -19,7 +19,11 @@ - + + + + + @@ -45,7 +49,7 @@ - + @@ -56,6 +60,8 @@ + + @@ -75,9 +81,9 @@ - - - + + + @@ -92,10 +98,9 @@ + - - - + diff --git a/repos/gems/recipes/raw/wm/wm.config b/repos/gems/recipes/raw/wm/wm.config index 862bf4f98af..080f5dc4e70 100644 --- a/repos/gems/recipes/raw/wm/wm.config +++ b/repos/gems/recipes/raw/wm/wm.config @@ -20,36 +20,39 @@ - + - + - + - + - + - + - + + + - + - + - + - + - + - + - + + @@ -74,7 +77,7 @@ - + @@ -84,8 +87,10 @@ - - + + + + diff --git a/repos/gems/run/launcher.run b/repos/gems/run/launcher.run index 385d081460c..e672faa8ad0 100644 --- a/repos/gems/run/launcher.run +++ b/repos/gems/run/launcher.run @@ -143,7 +143,7 @@ install_config { - + diff --git a/repos/gems/run/sculpt/leitzentrale.config b/repos/gems/run/sculpt/leitzentrale.config index 6e5a8aecf61..d463d9b0942 100644 --- a/repos/gems/run/sculpt/leitzentrale.config +++ b/repos/gems/run/sculpt/leitzentrale.config @@ -107,7 +107,9 @@ - + + + diff --git a/repos/gems/run/wm.run b/repos/gems/run/wm.run index 54f4c7fdb56..d337e6eca5e 100644 --- a/repos/gems/run/wm.run +++ b/repos/gems/run/wm.run @@ -74,7 +74,9 @@ install_config { - + + + diff --git a/repos/gems/src/server/wm/main.cc b/repos/gems/src/server/wm/main.cc index 577cff690a1..de95b140b1a 100644 --- a/repos/gems/src/server/wm/main.cc +++ b/repos/gems/src/server/wm/main.cc @@ -23,6 +23,7 @@ /* local includes */ #include #include +#include namespace Wm { @@ -110,6 +111,7 @@ struct Wm::Main { env.ep(), *this, &Main::handle_resize_request_update }; Report_forwarder _report_forwarder { env, heap }; + Rom_forwarder _rom_forwarder { env, heap }; Main(Genode::Env &env) : env(env) { diff --git a/repos/gems/src/server/wm/report_forwarder.h b/repos/gems/src/server/wm/report_forwarder.h index 3284aa94c1b..50c212ee0b5 100644 --- a/repos/gems/src/server/wm/report_forwarder.h +++ b/repos/gems/src/server/wm/report_forwarder.h @@ -1,5 +1,5 @@ /* - * \brief Report service for intercepting shape reports + * \brief Report service for intercepting shape and clipboard reports * \author Norman Feske * \date 2019-02-18 * @@ -7,6 +7,9 @@ * policy to an application's shape report as done for the application's * 'Nitpicker' session. This consistency is needed by the pointer to correlate * the currently hovered nitpicker session with the reported shapes. + * Analogously, clipboard reports can be routed through the window + * manager to support the clipboard component with associating its clients + * with nitpicker's reported focus. */ /* diff --git a/repos/gems/src/server/wm/rom_forwarder.h b/repos/gems/src/server/wm/rom_forwarder.h new file mode 100644 index 00000000000..5da945943b5 --- /dev/null +++ b/repos/gems/src/server/wm/rom_forwarder.h @@ -0,0 +1,96 @@ +/* + * \brief ROM service for intercepting clipboard ROMs + * \author Norman Feske + * \date 2019-06-26 + * + * This ROM service can be used as proxy for clipboard ROMs to ensure the + * consistency of the client labels appearing at the clipboard component + * with the label of the currently focused nitpicker client. + */ + +/* + * Copyright (C) 2019 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _ROM_FORWARDER_H_ +#define _ROM_FORWARDER_H_ + +/* Genode includes */ +#include +#include + +namespace Wm { struct Rom_forwarder; } + + +struct Wm::Rom_forwarder +{ + struct Session : Genode::Rpc_object + { + Genode::Env &_env; + Genode::Rom_connection _connection; + + Session(Genode::Env &env, Genode::Session_label const &label) + : _env(env), _connection(env, label.string()) + { _env.ep().manage(*this); } + + ~Session() { _env.ep().dissolve(*this); } + + void upgrade(Genode::Session::Resources const &resources) + { + _connection.upgrade(resources); + } + + + /*************************** + ** Rom_session interface ** + ***************************/ + + Genode::Rom_dataspace_capability dataspace() override + { + return _connection.dataspace(); + } + + bool update() override + { + return _connection.update(); + } + + void sigh(Signal_context_capability sigh) override + { + _connection.sigh(sigh); + } + }; + + struct Root : Genode::Root_component + { + Genode::Env &_env; + Genode::Allocator &_alloc; + + Session *_create_session(char const *args) override + { + return new (md_alloc()) Session(_env, Genode::label_from_args(args)); + } + + void _upgrade_session(Session *session, const char *args) override + { + session->upgrade(Genode::session_resources_from_args(args)); + } + + Root(Genode::Env &env, Genode::Allocator &alloc) + : + Genode::Root_component(env.ep(), alloc), + _env(env), _alloc(alloc) + { + _env.parent().announce(env.ep().manage(*this)); + } + + } _root; + + Rom_forwarder(Genode::Env &env, Genode::Allocator &alloc) + : _root(env, alloc) { } +}; + +#endif /* _ROM_FORWARDER_H_ */ diff --git a/repos/libports/run/mupdf.run b/repos/libports/run/mupdf.run index f445562780a..f7928121388 100644 --- a/repos/libports/run/mupdf.run +++ b/repos/libports/run/mupdf.run @@ -70,7 +70,9 @@ set config { - + + + diff --git a/repos/libports/run/qt5_common.inc b/repos/libports/run/qt5_common.inc index 5137a2e53aa..7c1392921a1 100644 --- a/repos/libports/run/qt5_common.inc +++ b/repos/libports/run/qt5_common.inc @@ -187,7 +187,7 @@ proc qt5_start_nodes { feature_arg } { - + diff --git a/repos/ports/run/vbox_win.inc b/repos/ports/run/vbox_win.inc index 50db1b3618f..2c4cd088a8b 100644 --- a/repos/ports/run/vbox_win.inc +++ b/repos/ports/run/vbox_win.inc @@ -144,7 +144,9 @@ if { $use_vms > 1 } { - + + + From e4412a3e566130f234510a9d7fd563827936b516 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 25 Jun 2019 15:02:57 +0200 Subject: [PATCH 57/67] noux_vim.run: clipboard integration with wm This patch enhances the noux_vim.run scenario to make it usable as a testing ground of the terminal's and window manager's resize and clipboard handling. Issue #2079 --- repos/ports/run/noux_vim.run | 111 ++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 2 deletions(-) diff --git a/repos/ports/run/noux_vim.run b/repos/ports/run/noux_vim.run index 85f7b29664d..7298db13f0e 100644 --- a/repos/ports/run/noux_vim.run +++ b/repos/ports/run/noux_vim.run @@ -3,11 +3,17 @@ create_boot_directory import_from_depot [depot_user]/src/[base_src] \ [depot_user]/pkg/[drivers_interactive_pkg] \ [depot_user]/pkg/terminal \ + [depot_user]/pkg/motif_wm \ [depot_user]/src/init \ + [depot_user]/src/nitpicker \ + [depot_user]/src/nit_fb \ + [depot_user]/src/clipboard \ + [depot_user]/src/report_rom \ [depot_user]/src/libc \ [depot_user]/src/noux \ [depot_user]/src/posix \ [depot_user]/src/ncurses \ + [depot_user]/src/clipboard \ [depot_user]/src/vim install_config { @@ -47,11 +53,101 @@ install_config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + @@ -85,9 +181,20 @@ install_config { + + + } -build_boot_image { } +set fd [open [run_dir]/genode/focus w] +puts $fd " focus\" domain=\"default\"/>" +close $fd + +file copy -force [genode_dir]/repos/gems/recipes/raw/motif_wm/wm.config [run_dir]/genode/ + +build { server/wm server/clipboard server/terminal } + +build_boot_image { wm clipboard terminal } run_genode_until forever From 605f9abf9602b90202242ae03e1f619167acd976 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 27 Jun 2019 22:49:12 +0200 Subject: [PATCH 58/67] sculpt: integrate global clipboard Issue #3437 --- repos/gems/recipes/pkg/sculpt/archives | 1 + repos/gems/run/sculpt.run | 21 +++++++++++++++++++ repos/gems/run/sculpt/clipboard.config | 6 ++++++ repos/gems/run/sculpt/fonts.config | 2 +- repos/gems/src/app/sculpt_manager/main.cc | 2 ++ .../gems/src/app/sculpt_manager/model/route.h | 9 ++++++-- .../app/sculpt_manager/model/runtime_config.h | 3 +++ .../src/app/sculpt_manager/model/service.h | 20 +++++++++++------- .../sculpt_manager/runtime/file_browser.cc | 5 +++++ 9 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 repos/gems/run/sculpt/clipboard.config diff --git a/repos/gems/recipes/pkg/sculpt/archives b/repos/gems/recipes/pkg/sculpt/archives index dcc769efb1e..21c673f1d60 100644 --- a/repos/gems/recipes/pkg/sculpt/archives +++ b/repos/gems/recipes/pkg/sculpt/archives @@ -3,6 +3,7 @@ _/pkg/wifi _/pkg/depot_download _/pkg/terminal _/src/report_rom +_/src/clipboard _/src/init _/src/ram_fs _/src/fs_rom diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index fd806d4cdc6..d68b619301a 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -61,6 +61,7 @@ install_config { + @@ -112,6 +113,7 @@ install_config { + @@ -369,6 +371,19 @@ install_config { + + + + + + + + + + + + + @@ -442,6 +457,12 @@ install_config { + + + + + + diff --git a/repos/gems/run/sculpt/clipboard.config b/repos/gems/run/sculpt/clipboard.config new file mode 100644 index 00000000000..927904e4195 --- /dev/null +++ b/repos/gems/run/sculpt/clipboard.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/repos/gems/run/sculpt/fonts.config b/repos/gems/run/sculpt/fonts.config index b0623a1ce09..f0cf4f7fa40 100644 --- a/repos/gems/run/sculpt/fonts.config +++ b/repos/gems/run/sculpt/fonts.config @@ -1,4 +1,4 @@ - + diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 3eec7ef5c21..a39a4b65b4f 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -930,6 +930,8 @@ void Sculpt::Main::_handle_nitpicker_mode() _gui.font_size(text_size); _fonts_config.generate([&] (Xml_generator &xml) { + xml.attribute("copy", true); + xml.attribute("paste", true); xml.node("vfs", [&] () { gen_named_node(xml, "rom", "Vera.ttf"); gen_named_node(xml, "rom", "VeraMono.ttf"); diff --git a/repos/gems/src/app/sculpt_manager/model/route.h b/repos/gems/src/app/sculpt_manager/model/route.h index e24a39e178a..6655a6d61e1 100644 --- a/repos/gems/src/app/sculpt_manager/model/route.h +++ b/repos/gems/src/app/sculpt_manager/model/route.h @@ -122,8 +122,13 @@ struct Sculpt::Route : List_model::Element gen_named_node(xml, "service", Service::name_attr(required), [&] () { - if (required_label.valid()) - xml.attribute("label", required_label); + if (required_label.valid()) { + + if (selected_service->match_label == Service::Match_label::LAST) + xml.attribute("label_last", required_label); + else + xml.attribute("label", required_label); + } selected_service->gen_xml(xml); }); diff --git a/repos/gems/src/app/sculpt_manager/model/runtime_config.h b/repos/gems/src/app/sculpt_manager/model/runtime_config.h index fa1ea58da56..82f5836c179 100644 --- a/repos/gems/src/app/sculpt_manager/model/runtime_config.h +++ b/repos/gems/src/app/sculpt_manager/model/runtime_config.h @@ -324,6 +324,9 @@ class Sculpt::Runtime_config _pf_info { _r, Type::ROM, "platform information", "platform_info" }, _system { _r, Type::ROM, "system status", "config -> system" }, _report { _r, Type::REPORT, "system reports" }, + _shape { _r, Type::REPORT, "pointer shape", "shape", Service::Match_label::LAST }, + _copy { _r, Type::REPORT, "global clipboard", "clipboard", Service::Match_label::LAST }, + _paste { _r, Type::ROM, "global clipboard", "clipboard", Service::Match_label::LAST }, _rm { _r, Type::RM, "custom virtual memory objects" }, _io_mem { _r, Type::IO_MEM, "raw hardware access" }, _io_port { _r, Type::IO_PORT, "raw hardware access" }, diff --git a/repos/gems/src/app/sculpt_manager/model/service.h b/repos/gems/src/app/sculpt_manager/model/service.h index c117d6d5bab..0267b6e2c1d 100644 --- a/repos/gems/src/app/sculpt_manager/model/service.h +++ b/repos/gems/src/app/sculpt_manager/model/service.h @@ -29,10 +29,13 @@ struct Sculpt::Service RM, IO_MEM, IO_PORT, IRQ, REPORT, ROM, TERMINAL, TRACE, USB, RTC, PLATFORM, VM, UNDEFINED }; - Start_name server { }; /* invalid for parent service */ - Type type; - Label label; - Info info; + enum class Match_label { EXACT, LAST }; + + Start_name server { }; /* invalid for parent service */ + Type type; + Label label; + Info info; + Match_label match_label { Match_label::EXACT }; /** * Return name attribute value of node @@ -72,8 +75,11 @@ struct Sculpt::Service /** * Constructor for parent service */ - Service(Type type, Info const &info, Label const &label = Label()) - : type(type), label(label), info(info) { } + Service(Type type, Info const &info, Label const &label = Label(), + Match_label match_label = Match_label::EXACT) + : + type(type), label(label), info(info), match_label(match_label) + { } void gen_xml(Xml_generator &xml) const { @@ -84,7 +90,7 @@ struct Sculpt::Service if (!parent) xml.attribute("name", server); - if (label.valid()) + if (label.valid() && match_label == Match_label::EXACT) xml.attribute("label", label); }); } diff --git a/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc b/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc index d720b661e32..7db7fcc13a7 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc @@ -91,6 +91,11 @@ void Sculpt::gen_terminal_start(Xml_generator &xml, Rom_name const &name, gen_parent_route (xml); gen_parent_route (xml); gen_parent_route (xml); + gen_parent_route(xml); + + gen_named_node(xml, "service", Rom_session::service_name(), [&] () { + xml.attribute("label", "clipboard"); + xml.node("parent", [&] () { }); }); gen_named_node(xml, "service", Rom_session::service_name(), [&] () { xml.attribute("label", "config"); From c92a9ce591c46eed69ee2d147889c88cb6067d4f Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 28 Jun 2019 14:00:29 +0200 Subject: [PATCH 59/67] sculpt: show names of unsatisfied launchers The diagnostic messages presented in the runtime dialog lacked the name if the subsystem was created from a launcher, e.g., the 'vm'. Instead of determining the subsystem name from the start-XML-node (a launcher has no 'name' attribute but the name corresponds to the launcher's file name), the name is now passed as a dedicated argument. --- repos/gems/src/app/depot_deploy/child.h | 2 +- repos/gems/src/app/sculpt_manager/deploy.cc | 11 +++++------ repos/gems/src/app/sculpt_manager/deploy.h | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/repos/gems/src/app/depot_deploy/child.h b/repos/gems/src/app/depot_deploy/child.h index e3583948381..96b820550bf 100644 --- a/repos/gems/src/app/depot_deploy/child.h +++ b/repos/gems/src/app/depot_deploy/child.h @@ -232,7 +232,7 @@ class Depot_deploy::Child : public List_model::Element : Xml_node(""); if (_condition == UNSATISFIED && _start_xml.constructed()) - fn(_start_xml->xml(), launcher_xml); + fn(_start_xml->xml(), launcher_xml, _name); } void mark_as_incomplete(Xml_node missing) diff --git a/repos/gems/src/app/sculpt_manager/deploy.cc b/repos/gems/src/app/sculpt_manager/deploy.cc index 0aa11cc4ab8..a0e8f980b36 100644 --- a/repos/gems/src/app/sculpt_manager/deploy.cc +++ b/repos/gems/src/app/sculpt_manager/deploy.cc @@ -42,10 +42,8 @@ void Sculpt::Deploy::gen_child_diagnostics(Xml_generator &xml) const typedef Registered_no_delete Registered_message; Registry messages { }; - auto gen_missing_dependencies = [&] (Xml_node start) + auto gen_missing_dependencies = [&] (Xml_node start, Start_name const &name) { - Start_name const name = start.attribute_value("name", Start_name()); - _for_each_missing_server(start, [&] (Start_name const &server) { Message const new_message(Pretty(name), " requires ", Pretty(server)); @@ -60,9 +58,10 @@ void Sculpt::Deploy::gen_child_diagnostics(Xml_generator &xml) const }); }; - _children.for_each_unsatisfied_child([&] (Xml_node start, Xml_node launcher) { - gen_missing_dependencies(start); - gen_missing_dependencies(launcher); + _children.for_each_unsatisfied_child([&] (Xml_node start, Xml_node launcher, + Start_name const &name) { + gen_missing_dependencies(start, name); + gen_missing_dependencies(launcher, name); }); /* diff --git a/repos/gems/src/app/sculpt_manager/deploy.h b/repos/gems/src/app/sculpt_manager/deploy.h index 7b7572386de..80c9623072f 100644 --- a/repos/gems/src/app/sculpt_manager/deploy.h +++ b/repos/gems/src/app/sculpt_manager/deploy.h @@ -174,7 +174,7 @@ struct Sculpt::Deploy bool any_unsatisfied_child() const { bool all_satisfied = true; - _children.for_each_unsatisfied_child([&] (Xml_node, Xml_node) { + _children.for_each_unsatisfied_child([&] (Xml_node, Xml_node, Start_name const &) { all_satisfied = false; }); return !all_satisfied; } From 58a0f5c30b176f93b02a3c97e2a6d81b86bf0af7 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Sat, 29 Jun 2019 12:18:12 +0200 Subject: [PATCH 60/67] sculpt: break possible depot-query feedback loop Fixes #3436 --- repos/gems/src/app/sculpt_manager/main.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index a39a4b65b4f..5494d316f31 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -249,6 +249,16 @@ struct Sculpt::Main : Input_event_handler, Xml_node const blueprint = _blueprint_rom.xml(); + /* + * Drop intermediate results that will be superseded by a newer query. + * This is important because an outdated blueprint would be disregarded + * by 'handle_deploy' anyway while at the same time a new query is + * issued. This can result a feedback loop where blueprints are + * requested but never applied. + */ + if (blueprint.attribute_value("version", 0U) != _query_version.value) + return; + _runtime_state.apply_to_construction([&] (Component &component) { _popup_dialog.apply_blueprint(component, blueprint); }); From c7e79030dddbff465e4237cff9e5b5afc0957e39 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Sat, 29 Jun 2019 18:56:31 +0200 Subject: [PATCH 61/67] sculpt: limit rate of depot queries The triggering of a new depot query can happen more than once per activation of the sculpt manager if multiple conditions call for updated information about the depot. When this happens, the depot-query component produces intermediate results, which are not consumed by the sculpt manager. By deferring depot queries for a few milliseconds, we avoid such intermediate queries, relieving the workload of the depot-query component at system boot time. Issue #3436 --- repos/gems/src/app/sculpt_manager/main.cc | 29 ++++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 5494d316f31..65dae97bfe3 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -18,6 +18,7 @@ #include #include #include +#include /* included from depot_deploy tool */ #include @@ -213,14 +214,15 @@ struct Sculpt::Main : Input_event_handler, return _query_version; } - /** - * Depot_query interface - */ - void trigger_depot_query() override - { - _query_version.value++; + Timer::Connection _timer { _env }; + + Timer::One_shot_timeout
_deferred_depot_query_handler { + _timer, *this, &Main::_handle_deferred_depot_query }; + void _handle_deferred_depot_query(Duration) + { if (_deploy._arch.valid()) { + _query_version.value++; _depot_query_reporter.generate([&] (Xml_generator &xml) { xml.attribute("arch", _deploy._arch); xml.attribute("version", _query_version.value); @@ -233,6 +235,21 @@ struct Sculpt::Main : Input_event_handler, } } + /** + * Depot_query interface + */ + void trigger_depot_query() override + { + /* + * Defer the submission of the query for a few milliseconds because + * 'trigger_depot_query' may be consecutively called several times + * while evaluating different conditions. Without deferring, the depot + * query component would produce intermediate results that take time + * but are ultimately discarded. + */ + _deferred_depot_query_handler.schedule(Microseconds{5000}); + } + /********************* ** Blueprint query ** From 3b0d694f42c07f1588f5002b1fb9a580f8a5fe50 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Sat, 29 Jun 2019 13:51:02 +0200 Subject: [PATCH 62/67] pkg/noux-system: clipboard support Issue #3437 --- repos/ports/recipes/pkg/noux-system/runtime | 4 +++- repos/ports/recipes/raw/noux-system/noux-system.config | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/repos/ports/recipes/pkg/noux-system/runtime b/repos/ports/recipes/pkg/noux-system/runtime index cd3db6cddfd..7e5c3c1455c 100644 --- a/repos/ports/recipes/pkg/noux-system/runtime +++ b/repos/ports/recipes/pkg/noux-system/runtime @@ -7,7 +7,9 @@ - + + + diff --git a/repos/ports/recipes/raw/noux-system/noux-system.config b/repos/ports/recipes/raw/noux-system/noux-system.config index 8c88d7d3a9a..25c9e9edb92 100644 --- a/repos/ports/recipes/raw/noux-system/noux-system.config +++ b/repos/ports/recipes/raw/noux-system/noux-system.config @@ -8,6 +8,7 @@ + @@ -18,16 +19,22 @@ + + + + - + + + From 0c3d3e7c8f29d492320b1e8993d1dbf39115b150 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 1 Jul 2019 16:39:05 +0200 Subject: [PATCH 63/67] pkg/qt5_textedit: clipboard support Issue #3437 --- repos/libports/recipes/pkg/qt5_textedit/runtime | 2 ++ repos/libports/recipes/raw/qt5_textedit/textedit.config | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/repos/libports/recipes/pkg/qt5_textedit/runtime b/repos/libports/recipes/pkg/qt5_textedit/runtime index a8fda6b8d63..d42dea8a7f9 100644 --- a/repos/libports/recipes/pkg/qt5_textedit/runtime +++ b/repos/libports/recipes/pkg/qt5_textedit/runtime @@ -4,6 +4,8 @@ + + diff --git a/repos/libports/recipes/raw/qt5_textedit/textedit.config b/repos/libports/recipes/raw/qt5_textedit/textedit.config index b0d5b6da364..c60c34f46bc 100644 --- a/repos/libports/recipes/raw/qt5_textedit/textedit.config +++ b/repos/libports/recipes/raw/qt5_textedit/textedit.config @@ -1,4 +1,4 @@ - + From 6380ad1c802be3d5bc707f98b12f710588faefa4 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 1 Jul 2019 16:57:00 +0200 Subject: [PATCH 64/67] pkg/vbox5-nova-sculpt: clipboard support To enable the clipboard for a VM, add the following node to the sub node of your machine.vbox configuration: Issue #3437 --- repos/gems/run/sculpt/machine.vbox | 1 + repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/repos/gems/run/sculpt/machine.vbox b/repos/gems/run/sculpt/machine.vbox index 00013120b1b..9e90f44c1b6 100644 --- a/repos/gems/run/sculpt/machine.vbox +++ b/repos/gems/run/sculpt/machine.vbox @@ -45,6 +45,7 @@ + diff --git a/repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime b/repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime index 523f3c31926..21069f30fce 100755 --- a/repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime +++ b/repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime @@ -7,11 +7,12 @@ - - + + + From 17d32b3e1571a7ba43cca87a2fc5d40849084f84 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 9 Jul 2019 09:06:21 +0200 Subject: [PATCH 65/67] depot: update recipe hashes --- repos/base-fiasco/recipes/src/base-fiasco/hash | 2 +- repos/base-foc/recipes/src/base-foc-arndale/hash | 2 +- repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash | 2 +- repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash | 2 +- repos/base-foc/recipes/src/base-foc-pbxa9/hash | 2 +- repos/base-foc/recipes/src/base-foc-pc/hash | 2 +- repos/base-foc/recipes/src/base-foc-rpi3/hash | 2 +- repos/base-hw/recipes/api/base-hw/hash | 2 +- repos/base-hw/recipes/src/base-hw-arndale/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx53_qsb/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash | 2 +- repos/base-hw/recipes/src/base-hw-muen/hash | 2 +- repos/base-hw/recipes/src/base-hw-nit6_solox/hash | 2 +- repos/base-hw/recipes/src/base-hw-odroid_xu/hash | 2 +- repos/base-hw/recipes/src/base-hw-panda/hash | 2 +- repos/base-hw/recipes/src/base-hw-pbxa9/hash | 2 +- repos/base-hw/recipes/src/base-hw-pc/hash | 2 +- repos/base-hw/recipes/src/base-hw-rpi/hash | 2 +- repos/base-hw/recipes/src/base-hw-rpi3/hash | 2 +- repos/base-hw/recipes/src/base-hw-zynq_qemu/hash | 2 +- repos/base-linux/recipes/api/base-linux/hash | 2 +- repos/base-linux/recipes/src/base-linux/hash | 2 +- repos/base-nova/recipes/src/base-nova/hash | 2 +- repos/base-okl4/recipes/src/base-okl4/hash | 2 +- repos/base-pistachio/recipes/src/base-pistachio/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-x86/hash | 2 +- repos/base/recipes/api/base/hash | 2 +- repos/base/recipes/pkg/test-ds_ownership/hash | 2 +- repos/base/recipes/pkg/test-log/hash | 2 +- repos/base/recipes/pkg/test-mmio/hash | 2 +- repos/base/recipes/pkg/test-new_delete/hash | 2 +- repos/base/recipes/pkg/test-reconstructible/hash | 2 +- repos/base/recipes/pkg/test-registry/hash | 2 +- repos/base/recipes/pkg/test-rm_fault/hash | 2 +- repos/base/recipes/pkg/test-rm_fault_no_nox/hash | 2 +- repos/base/recipes/pkg/test-rm_nested/hash | 2 +- repos/base/recipes/pkg/test-sanitizer/hash | 2 +- repos/base/recipes/pkg/test-stack_smash/hash | 2 +- repos/base/recipes/pkg/test-synced_interface/hash | 2 +- repos/base/recipes/pkg/test-timer/hash | 2 +- repos/base/recipes/pkg/test-xml_generator/hash | 2 +- repos/base/recipes/pkg/test-xml_node/hash | 2 +- repos/base/recipes/src/test-ds_ownership/hash | 2 +- repos/base/recipes/src/test-log/hash | 2 +- repos/base/recipes/src/test-mmio/hash | 2 +- repos/base/recipes/src/test-new_delete/hash | 2 +- repos/base/recipes/src/test-reconstructible/hash | 2 +- repos/base/recipes/src/test-registry/hash | 2 +- repos/base/recipes/src/test-rm_fault/hash | 2 +- repos/base/recipes/src/test-rm_nested/hash | 2 +- repos/base/recipes/src/test-sanitizer/hash | 2 +- repos/base/recipes/src/test-segfault/hash | 2 +- repos/base/recipes/src/test-stack_smash/hash | 2 +- repos/base/recipes/src/test-synced_interface/hash | 2 +- repos/base/recipes/src/test-timer/hash | 2 +- repos/base/recipes/src/test-xml_generator/hash | 2 +- repos/base/recipes/src/test-xml_node/hash | 2 +- repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash | 2 +- repos/dde_bsd/recipes/src/bsd_audio_drv/hash | 2 +- repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash | 2 +- repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash | 2 +- repos/dde_linux/recipes/pkg/drivers_interactive-rpi/hash | 2 +- repos/dde_linux/recipes/pkg/drivers_nic-imx53_qsb/hash | 2 +- repos/dde_linux/recipes/pkg/drivers_nic-imx6q_sabrelite/hash | 2 +- repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash | 2 +- repos/dde_linux/recipes/pkg/wifi/hash | 2 +- repos/dde_linux/recipes/src/fec_nic_drv/hash | 2 +- repos/dde_linux/recipes/src/intel_fb_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_drv/hash | 2 +- repos/dde_linux/recipes/src/vfs_lxip/hash | 2 +- repos/dde_linux/recipes/src/wifi_drv/hash | 2 +- repos/dde_rump/recipes/src/rump/hash | 2 +- repos/demo/recipes/src/demo/hash | 2 +- repos/gems/recipes/api/gems/hash | 2 +- repos/gems/recipes/pkg/backdrop/hash | 2 +- repos/gems/recipes/pkg/depot_download/hash | 2 +- repos/gems/recipes/pkg/drivers_managed-pc/hash | 2 +- repos/gems/recipes/pkg/drivers_nic-muen/hash | 2 +- repos/gems/recipes/pkg/drivers_nic-pc/hash | 2 +- repos/gems/recipes/pkg/drivers_nic-rpi/hash | 2 +- repos/gems/recipes/pkg/fonts_fs/hash | 2 +- repos/gems/recipes/pkg/motif_decorator/hash | 2 +- repos/gems/recipes/pkg/motif_wm/hash | 2 +- repos/gems/recipes/pkg/nano3d/hash | 2 +- repos/gems/recipes/pkg/sculpt-installation/hash | 2 +- repos/gems/recipes/pkg/sculpt/hash | 2 +- repos/gems/recipes/pkg/sticks_blue_backdrop/hash | 2 +- repos/gems/recipes/pkg/terminal/hash | 2 +- repos/gems/recipes/pkg/test-depot_query_index/hash | 2 +- repos/gems/recipes/pkg/test-fs_tool/hash | 2 +- repos/gems/recipes/pkg/test-libc_vfs_audit/hash | 2 +- repos/gems/recipes/pkg/test-magic_ring_buffer/hash | 2 +- repos/gems/recipes/pkg/test-pipe/hash | 2 +- repos/gems/recipes/pkg/themed_decorator/hash | 2 +- repos/gems/recipes/pkg/themed_wm/hash | 2 +- repos/gems/recipes/pkg/trace_fs/hash | 2 +- repos/gems/recipes/pkg/window_layouter/hash | 2 +- repos/gems/recipes/pkg/wm/hash | 2 +- repos/gems/recipes/raw/motif_wm/hash | 2 +- repos/gems/recipes/raw/wm/hash | 2 +- repos/gems/recipes/src/backdrop/hash | 2 +- repos/gems/recipes/src/cpu_load_display/hash | 2 +- repos/gems/recipes/src/decorator/hash | 2 +- repos/gems/recipes/src/depot_deploy/hash | 2 +- repos/gems/recipes/src/depot_download_manager/hash | 2 +- repos/gems/recipes/src/depot_query/hash | 2 +- repos/gems/recipes/src/driver_manager/hash | 2 +- repos/gems/recipes/src/file_terminal/hash | 2 +- repos/gems/recipes/src/fs_query/hash | 2 +- repos/gems/recipes/src/fs_tool/hash | 2 +- repos/gems/recipes/src/gpt_write/hash | 2 +- repos/gems/recipes/src/menu_view/hash | 2 +- repos/gems/recipes/src/mixer_gui_qt/hash | 2 +- repos/gems/recipes/src/nano3d/hash | 2 +- repos/gems/recipes/src/nit_fader/hash | 2 +- repos/gems/recipes/src/pipe/hash | 2 +- repos/gems/recipes/src/sculpt_manager/hash | 2 +- repos/gems/recipes/src/ssh_terminal/hash | 2 +- repos/gems/recipes/src/terminal/hash | 2 +- repos/gems/recipes/src/test-magic_ring_buffer/hash | 2 +- repos/gems/recipes/src/test-tiled_wm/hash | 2 +- repos/gems/recipes/src/themed_decorator/hash | 2 +- repos/gems/recipes/src/vfs_audit/hash | 2 +- repos/gems/recipes/src/vfs_import/hash | 2 +- repos/gems/recipes/src/vfs_trace/hash | 2 +- repos/gems/recipes/src/vfs_ttf/hash | 2 +- repos/gems/recipes/src/window_layouter/hash | 2 +- repos/gems/recipes/src/wm/hash | 2 +- repos/libports/recipes/api/jitterentropy/hash | 2 +- repos/libports/recipes/api/libc/hash | 2 +- repos/libports/recipes/api/libc_setjmp/hash | 2 +- repos/libports/recipes/api/stdcxx/hash | 2 +- repos/libports/recipes/pkg/acpica/hash | 2 +- repos/libports/recipes/pkg/gcov/hash | 2 +- repos/libports/recipes/pkg/pdf_view/hash | 2 +- repos/libports/recipes/pkg/qt5_textedit/hash | 2 +- repos/libports/recipes/pkg/test-expat/hash | 2 +- repos/libports/recipes/pkg/test-gnatio/hash | 2 +- repos/libports/recipes/pkg/test-ldso/hash | 2 +- repos/libports/recipes/pkg/test-libc/hash | 2 +- repos/libports/recipes/pkg/test-libc_connect_lwip/hash | 2 +- repos/libports/recipes/pkg/test-libc_connect_lxip/hash | 2 +- .../libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash | 2 +- .../libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash | 2 +- repos/libports/recipes/pkg/test-libc_counter/hash | 2 +- repos/libports/recipes/pkg/test-libc_getenv/hash | 2 +- repos/libports/recipes/pkg/test-libc_pipe/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_block/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_counter/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_fs/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_ram/hash | 2 +- repos/libports/recipes/pkg/test-pthread/hash | 2 +- repos/libports/recipes/pkg/test-python/hash | 2 +- repos/libports/recipes/pkg/test-rust/hash | 2 +- repos/libports/recipes/pkg/test-sequence/hash | 2 +- repos/libports/recipes/pkg/test-solo5/hash | 2 +- repos/libports/recipes/pkg/test-spark/hash | 2 +- repos/libports/recipes/pkg/test-spark_exception/hash | 2 +- repos/libports/recipes/pkg/test-spark_secondary_stack/hash | 2 +- repos/libports/recipes/pkg/test-stdcxx/hash | 2 +- repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash | 2 +- repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash | 2 +- repos/libports/recipes/pkg/test-timed_semaphore/hash | 2 +- repos/libports/recipes/raw/qt5_textedit/hash | 2 +- repos/libports/recipes/src/acpica/hash | 2 +- repos/libports/recipes/src/curl/hash | 2 +- repos/libports/recipes/src/drm/hash | 2 +- repos/libports/recipes/src/expat/hash | 2 +- repos/libports/recipes/src/extract/hash | 2 +- repos/libports/recipes/src/fetchurl/hash | 2 +- repos/libports/recipes/src/freetype/hash | 2 +- repos/libports/recipes/src/gcov/hash | 2 +- repos/libports/recipes/src/gmp/hash | 2 +- repos/libports/recipes/src/icu/hash | 2 +- repos/libports/recipes/src/jbig2dec/hash | 2 +- repos/libports/recipes/src/jpeg/hash | 2 +- repos/libports/recipes/src/libarchive/hash | 2 +- repos/libports/recipes/src/libc/hash | 2 +- repos/libports/recipes/src/libcrypto/hash | 2 +- repos/libports/recipes/src/libiconv/hash | 2 +- repos/libports/recipes/src/liblzma/hash | 2 +- repos/libports/recipes/src/libpng/hash | 2 +- repos/libports/recipes/src/libssh/hash | 2 +- repos/libports/recipes/src/libssl/hash | 2 +- repos/libports/recipes/src/mesa/hash | 2 +- repos/libports/recipes/src/mpc/hash | 2 +- repos/libports/recipes/src/mpfr/hash | 2 +- repos/libports/recipes/src/mupdf/hash | 2 +- repos/libports/recipes/src/ncurses/hash | 2 +- repos/libports/recipes/src/openjpeg/hash | 2 +- repos/libports/recipes/src/pcre/hash | 2 +- repos/libports/recipes/src/pcre16/hash | 2 +- repos/libports/recipes/src/pdf_view/hash | 2 +- repos/libports/recipes/src/posix/hash | 2 +- repos/libports/recipes/src/python/hash | 2 +- repos/libports/recipes/src/qt5_calculatorform/hash | 2 +- repos/libports/recipes/src/qt5_component/hash | 2 +- repos/libports/recipes/src/qt5_core/hash | 2 +- repos/libports/recipes/src/qt5_gui/hash | 2 +- repos/libports/recipes/src/qt5_launchpad/hash | 2 +- repos/libports/recipes/src/qt5_network/hash | 2 +- repos/libports/recipes/src/qt5_opengl/hash | 2 +- repos/libports/recipes/src/qt5_openglwindow/hash | 2 +- repos/libports/recipes/src/qt5_printsupport/hash | 2 +- repos/libports/recipes/src/qt5_qjpeg/hash | 2 +- repos/libports/recipes/src/qt5_qml/hash | 2 +- repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash | 2 +- repos/libports/recipes/src/qt5_qpa_nitpicker/hash | 2 +- repos/libports/recipes/src/qt5_qpluginwidget/hash | 2 +- repos/libports/recipes/src/qt5_qt_labs_folderlistmodel/hash | 2 +- repos/libports/recipes/src/qt5_qtquick2/hash | 2 +- repos/libports/recipes/src/qt5_qtquick_layouts/hash | 2 +- repos/libports/recipes/src/qt5_qtquick_virtualkeyboard/hash | 2 +- repos/libports/recipes/src/qt5_qtquick_window/hash | 2 +- repos/libports/recipes/src/qt5_quick/hash | 2 +- repos/libports/recipes/src/qt5_samegame/hash | 2 +- repos/libports/recipes/src/qt5_scriptclassic/hash | 2 +- repos/libports/recipes/src/qt5_sql/hash | 2 +- repos/libports/recipes/src/qt5_svg/hash | 2 +- repos/libports/recipes/src/qt5_test/hash | 2 +- repos/libports/recipes/src/qt5_testqstring/hash | 2 +- repos/libports/recipes/src/qt5_tetrix/hash | 2 +- repos/libports/recipes/src/qt5_textedit/hash | 2 +- repos/libports/recipes/src/qt5_ui_tools/hash | 2 +- repos/libports/recipes/src/qt5_virtualkeyboard/hash | 2 +- repos/libports/recipes/src/qt5_webkit/hash | 2 +- repos/libports/recipes/src/qt5_widgets/hash | 2 +- repos/libports/recipes/src/qt5_xml/hash | 2 +- repos/libports/recipes/src/sanitizer/hash | 2 +- repos/libports/recipes/src/solo5/hash | 2 +- repos/libports/recipes/src/spark/hash | 2 +- repos/libports/recipes/src/stdcxx/hash | 2 +- repos/libports/recipes/src/test-expat/hash | 2 +- repos/libports/recipes/src/test-gnatio/hash | 2 +- repos/libports/recipes/src/test-ldso/hash | 2 +- repos/libports/recipes/src/test-libc/hash | 2 +- repos/libports/recipes/src/test-libc_connect/hash | 2 +- repos/libports/recipes/src/test-libc_counter/hash | 2 +- repos/libports/recipes/src/test-libc_getenv/hash | 2 +- repos/libports/recipes/src/test-libc_pipe/hash | 2 +- repos/libports/recipes/src/test-libc_vfs/hash | 2 +- repos/libports/recipes/src/test-libc_vfs_block/hash | 2 +- repos/libports/recipes/src/test-netty/hash | 2 +- repos/libports/recipes/src/test-pthread/hash | 2 +- repos/libports/recipes/src/test-python/hash | 2 +- repos/libports/recipes/src/test-qpluginwidget/hash | 2 +- repos/libports/recipes/src/test-qt_core/hash | 2 +- repos/libports/recipes/src/test-qt_quick/hash | 2 +- repos/libports/recipes/src/test-rust/hash | 2 +- repos/libports/recipes/src/test-solo5/hash | 2 +- repos/libports/recipes/src/test-spark/hash | 2 +- repos/libports/recipes/src/test-spark_exception/hash | 2 +- repos/libports/recipes/src/test-spark_secondary_stack/hash | 2 +- repos/libports/recipes/src/test-stdcxx/hash | 2 +- repos/libports/recipes/src/test-tcp/hash | 2 +- repos/libports/recipes/src/test-timed_semaphore/hash | 2 +- repos/libports/recipes/src/vesa_drv/hash | 2 +- repos/libports/recipes/src/vfs_fatfs/hash | 2 +- repos/libports/recipes/src/vfs_jitterentropy/hash | 2 +- repos/libports/recipes/src/vfs_lwip/hash | 2 +- repos/libports/recipes/src/zlib/hash | 2 +- repos/os/recipes/pkg/chroot/hash | 2 +- repos/os/recipes/pkg/clipboard/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-imx53_qsb/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-linux/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-muen/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-pbxa9/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-pc/hash | 2 +- repos/os/recipes/pkg/drivers_nic-linux/hash | 2 +- repos/os/recipes/pkg/drivers_nic-pbxa9/hash | 2 +- repos/os/recipes/pkg/drivers_nic-zynq/hash | 2 +- repos/os/recipes/pkg/fs_rom/hash | 2 +- repos/os/recipes/pkg/mixer/hash | 2 +- repos/os/recipes/pkg/nic_router-nat/hash | 2 +- repos/os/recipes/pkg/nit_focus/hash | 2 +- repos/os/recipes/pkg/rom_filter/hash | 2 +- repos/os/recipes/pkg/rom_reporter/hash | 2 +- repos/os/recipes/pkg/test-block/hash | 2 +- repos/os/recipes/pkg/test-block_cache/hash | 2 +- repos/os/recipes/pkg/test-clipboard/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config_loader/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config_slave/hash | 2 +- repos/os/recipes/pkg/test-fault_detection/hash | 2 +- repos/os/recipes/pkg/test-fs_log/hash | 2 +- repos/os/recipes/pkg/test-fs_packet/hash | 2 +- repos/os/recipes/pkg/test-fs_report/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update_fs/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update_ram/hash | 2 +- repos/os/recipes/pkg/test-init/hash | 2 +- repos/os/recipes/pkg/test-init_loop/hash | 2 +- repos/os/recipes/pkg/test-lx_block/hash | 2 +- repos/os/recipes/pkg/test-nic_loopback/hash | 2 +- repos/os/recipes/pkg/test-part_block_gpt/hash | 2 +- repos/os/recipes/pkg/test-part_block_mbr/hash | 2 +- repos/os/recipes/pkg/test-ram_fs_chunk/hash | 2 +- repos/os/recipes/pkg/test-read_only_rom/hash | 2 +- repos/os/recipes/pkg/test-report_rom/hash | 2 +- repos/os/recipes/pkg/test-resource_request/hash | 2 +- repos/os/recipes/pkg/test-resource_yield/hash | 2 +- repos/os/recipes/pkg/test-rom_block/hash | 2 +- repos/os/recipes/pkg/test-rom_filter/hash | 2 +- repos/os/recipes/pkg/test-rtc/hash | 2 +- repos/os/recipes/pkg/test-signal/hash | 2 +- repos/os/recipes/pkg/test-slab/hash | 2 +- repos/os/recipes/pkg/test-terminal_crosslink/hash | 2 +- repos/os/recipes/pkg/test-trace/hash | 2 +- repos/os/recipes/pkg/test-trace_logger/hash | 2 +- repos/os/recipes/pkg/test-utf8/hash | 2 +- repos/os/recipes/pkg/test-vfs_stress_fs/hash | 2 +- repos/os/recipes/pkg/test-vfs_stress_ram/hash | 2 +- repos/os/recipes/pkg/test-weak_ptr/hash | 2 +- repos/os/recipes/src/acpi_drv/hash | 2 +- repos/os/recipes/src/ahci_drv/hash | 2 +- repos/os/recipes/src/block_cache/hash | 2 +- repos/os/recipes/src/boot_fb_drv/hash | 2 +- repos/os/recipes/src/cached_fs_rom/hash | 2 +- repos/os/recipes/src/chroot/hash | 2 +- repos/os/recipes/src/clipboard/hash | 2 +- repos/os/recipes/src/cpu_burner/hash | 2 +- repos/os/recipes/src/dummy/hash | 2 +- repos/os/recipes/src/dynamic_rom/hash | 2 +- repos/os/recipes/src/fb_sdl/hash | 2 +- repos/os/recipes/src/fs_log/hash | 2 +- repos/os/recipes/src/fs_report/hash | 2 +- repos/os/recipes/src/fs_rom/hash | 2 +- repos/os/recipes/src/global_keys_handler/hash | 2 +- repos/os/recipes/src/imx53_qsb_drivers/hash | 2 +- repos/os/recipes/src/init/hash | 2 +- repos/os/recipes/src/input_filter/hash | 2 +- repos/os/recipes/src/lan9118_nic_drv/hash | 2 +- repos/os/recipes/src/linux_nic_drv/hash | 2 +- repos/os/recipes/src/loader/hash | 2 +- repos/os/recipes/src/log_core/hash | 2 +- repos/os/recipes/src/log_terminal/hash | 2 +- repos/os/recipes/src/lx_block/hash | 2 +- repos/os/recipes/src/mixer/hash | 2 +- repos/os/recipes/src/nic_bridge/hash | 2 +- repos/os/recipes/src/nic_loopback/hash | 2 +- repos/os/recipes/src/nic_router/hash | 2 +- repos/os/recipes/src/nit_fb/hash | 2 +- repos/os/recipes/src/nit_focus/hash | 2 +- repos/os/recipes/src/nitpicker/hash | 2 +- repos/os/recipes/src/nvme_drv/hash | 2 +- repos/os/recipes/src/part_block/hash | 2 +- repos/os/recipes/src/pbxa9_drivers/hash | 2 +- repos/os/recipes/src/platform_drv/hash | 2 +- repos/os/recipes/src/ps2_drv/hash | 2 +- repos/os/recipes/src/ram_block/hash | 2 +- repos/os/recipes/src/ram_fs/hash | 2 +- repos/os/recipes/src/report_rom/hash | 2 +- repos/os/recipes/src/rom_block/hash | 2 +- repos/os/recipes/src/rom_filter/hash | 2 +- repos/os/recipes/src/rom_logger/hash | 2 +- repos/os/recipes/src/rom_reporter/hash | 2 +- repos/os/recipes/src/rom_to_file/hash | 2 +- repos/os/recipes/src/rpi_fb_drv/hash | 2 +- repos/os/recipes/src/rtc_drv/hash | 2 +- repos/os/recipes/src/sequence/hash | 2 +- repos/os/recipes/src/terminal_crosslink/hash | 2 +- repos/os/recipes/src/terminal_log/hash | 2 +- repos/os/recipes/src/test-block/hash | 2 +- repos/os/recipes/src/test-bomb/hash | 2 +- repos/os/recipes/src/test-clipboard/hash | 2 +- repos/os/recipes/src/test-dynamic_config/hash | 2 +- repos/os/recipes/src/test-fault_detection/hash | 2 +- repos/os/recipes/src/test-fs_packet/hash | 2 +- repos/os/recipes/src/test-fs_report/hash | 2 +- repos/os/recipes/src/test-immutable_rom/hash | 2 +- repos/os/recipes/src/test-init/hash | 2 +- repos/os/recipes/src/test-init_loop/hash | 2 +- repos/os/recipes/src/test-nic_loopback/hash | 2 +- repos/os/recipes/src/test-ram_fs_chunk/hash | 2 +- repos/os/recipes/src/test-report_rom/hash | 2 +- repos/os/recipes/src/test-resource_request/hash | 2 +- repos/os/recipes/src/test-resource_yield/hash | 2 +- repos/os/recipes/src/test-rom_block/hash | 2 +- repos/os/recipes/src/test-rtc/hash | 2 +- repos/os/recipes/src/test-signal/hash | 2 +- repos/os/recipes/src/test-slab/hash | 2 +- repos/os/recipes/src/test-terminal_crosslink/hash | 2 +- repos/os/recipes/src/test-trace/hash | 2 +- repos/os/recipes/src/test-trace_logger/hash | 2 +- repos/os/recipes/src/test-utf8/hash | 2 +- repos/os/recipes/src/test-vfs_stress/hash | 2 +- repos/os/recipes/src/test-weak_ptr/hash | 2 +- repos/os/recipes/src/top/hash | 2 +- repos/os/recipes/src/trace_logger/hash | 2 +- repos/os/recipes/src/trace_policy/hash | 2 +- repos/os/recipes/src/trace_subject_reporter/hash | 2 +- repos/os/recipes/src/usb_block_drv/hash | 2 +- repos/os/recipes/src/vfs/hash | 2 +- repos/os/recipes/src/zynq_nic_drv/hash | 2 +- repos/ports/recipes/pkg/arora/hash | 2 +- repos/ports/recipes/pkg/nic_router-nat-dns/hash | 2 +- repos/ports/recipes/pkg/noux-build-x86/hash | 2 +- repos/ports/recipes/pkg/noux-system/hash | 2 +- repos/ports/recipes/pkg/report_dump/hash | 2 +- repos/ports/recipes/pkg/vbox5-nova-sculpt/hash | 2 +- repos/ports/recipes/raw/noux-system/hash | 2 +- repos/ports/recipes/src/arora/hash | 2 +- repos/ports/recipes/src/bash-minimal/hash | 2 +- repos/ports/recipes/src/bash/hash | 2 +- repos/ports/recipes/src/binutils_x86/hash | 2 +- repos/ports/recipes/src/coreutils-minimal/hash | 2 +- repos/ports/recipes/src/coreutils/hash | 2 +- repos/ports/recipes/src/e2fsprogs-minimal/hash | 2 +- repos/ports/recipes/src/e2fsprogs/hash | 2 +- repos/ports/recipes/src/findutils/hash | 2 +- repos/ports/recipes/src/gcc_x86/hash | 2 +- repos/ports/recipes/src/gnumake/hash | 2 +- repos/ports/recipes/src/grep/hash | 2 +- repos/ports/recipes/src/libgetdns/hash | 2 +- repos/ports/recipes/src/lighttpd/hash | 2 +- repos/ports/recipes/src/noux/hash | 2 +- repos/ports/recipes/src/sed/hash | 2 +- repos/ports/recipes/src/seoul/hash | 2 +- repos/ports/recipes/src/stubby/hash | 2 +- repos/ports/recipes/src/tar/hash | 2 +- repos/ports/recipes/src/tclsh/hash | 2 +- repos/ports/recipes/src/vbox5-nova/hash | 2 +- repos/ports/recipes/src/vbox5/hash | 2 +- repos/ports/recipes/src/verify/hash | 2 +- repos/ports/recipes/src/vim-minimal/hash | 2 +- repos/ports/recipes/src/vim/hash | 2 +- repos/ports/recipes/src/which/hash | 2 +- 433 files changed, 433 insertions(+), 433 deletions(-) diff --git a/repos/base-fiasco/recipes/src/base-fiasco/hash b/repos/base-fiasco/recipes/src/base-fiasco/hash index 1c60bd1520d..15f3a25d9e8 100644 --- a/repos/base-fiasco/recipes/src/base-fiasco/hash +++ b/repos/base-fiasco/recipes/src/base-fiasco/hash @@ -1 +1 @@ -2019-06-11 7dc0f622c058db8b66ba583050e5a5a4b1382b31 +2019-07-08 1b0e1040842b8f9a8f547f47e1fe8b859383525a diff --git a/repos/base-foc/recipes/src/base-foc-arndale/hash b/repos/base-foc/recipes/src/base-foc-arndale/hash index 5110614dfc1..25534b509bc 100644 --- a/repos/base-foc/recipes/src/base-foc-arndale/hash +++ b/repos/base-foc/recipes/src/base-foc-arndale/hash @@ -1 +1 @@ -2019-06-11 d8780f267342dca75094330e29c0b77a75b71387 +2019-07-08 f3bfd189708c82317b021ffdc53ba80128037465 diff --git a/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash b/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash index 074711f770f..731b56b262b 100644 --- a/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash +++ b/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash @@ -1 +1 @@ -2019-06-11 c376d13cad0898a27c13d4b0fa7d237b6437260b +2019-07-08 87f41f86afb0c19e5682e2e2d41ed182f9334ef1 diff --git a/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash b/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash index 4ecd7779f25..d683fd7e656 100644 --- a/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash +++ b/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash @@ -1 +1 @@ -2019-06-11 bb7cb7055a0a1082cf262d4b6cc670337a2f04d2 +2019-07-08 d370ecc4cb2ce3f370cfaefecbf97a1c05ef3e69 diff --git a/repos/base-foc/recipes/src/base-foc-pbxa9/hash b/repos/base-foc/recipes/src/base-foc-pbxa9/hash index 94a005394db..986fcd8a9dc 100644 --- a/repos/base-foc/recipes/src/base-foc-pbxa9/hash +++ b/repos/base-foc/recipes/src/base-foc-pbxa9/hash @@ -1 +1 @@ -2019-06-11 9ef913b141f73f30dec436389c907ef907c5ccca +2019-07-08 075559ecf0b1206c45de3fc7ccd9b6198bd41d41 diff --git a/repos/base-foc/recipes/src/base-foc-pc/hash b/repos/base-foc/recipes/src/base-foc-pc/hash index b3575007c55..298570071a6 100644 --- a/repos/base-foc/recipes/src/base-foc-pc/hash +++ b/repos/base-foc/recipes/src/base-foc-pc/hash @@ -1 +1 @@ -2019-06-11 0f2ffb36e6695f199ac19cd8a26df3565163c7e3 +2019-07-08 536625983e4733b833706e59c35591fe5d06020c diff --git a/repos/base-foc/recipes/src/base-foc-rpi3/hash b/repos/base-foc/recipes/src/base-foc-rpi3/hash index fef37f5405f..57843414a72 100644 --- a/repos/base-foc/recipes/src/base-foc-rpi3/hash +++ b/repos/base-foc/recipes/src/base-foc-rpi3/hash @@ -1 +1 @@ -2019-05-21 9649f5d5574031c45012fef7e2407a62e6c50954 +2019-07-08 5f648e24bfed0e532ad659cc87d8cf60a11efe05 diff --git a/repos/base-hw/recipes/api/base-hw/hash b/repos/base-hw/recipes/api/base-hw/hash index 56c717b594c..52057741951 100644 --- a/repos/base-hw/recipes/api/base-hw/hash +++ b/repos/base-hw/recipes/api/base-hw/hash @@ -1 +1 @@ -2019-05-15 f46f1762b82441ee270fafe09103e12c98bfe3a5 +2019-07-08 abc6d82ca4a240319850c788f29cde2655eab1d1 diff --git a/repos/base-hw/recipes/src/base-hw-arndale/hash b/repos/base-hw/recipes/src/base-hw-arndale/hash index 8c7b3458630..b21000f20c1 100644 --- a/repos/base-hw/recipes/src/base-hw-arndale/hash +++ b/repos/base-hw/recipes/src/base-hw-arndale/hash @@ -1 +1 @@ -2019-06-11 18ca1753584efb521a20136039cdc26dd46817d1 +2019-07-08 9802c13e6c8e2c677636f691c10329b4352388c8 diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash b/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash index aa4a11b303d..80fdbdb769c 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash @@ -1 +1 @@ -2019-06-11 e5da7a5c8656be96d6579c8927d97b705c93771f +2019-07-08 12c1bf367a425f5af5a3309170d930f7db9493c7 diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash index 7bb0da95571..b1c2e5e7f77 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash @@ -1 +1 @@ -2019-06-11 e263a307de24e8b4e1d0f4202ec0e47a13b605b7 +2019-07-08 d22f7b395c0fcfa1c746f32e189d45b644891f93 diff --git a/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash b/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash index 1a793c077d5..72a5fdafb9c 100644 --- a/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash +++ b/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash @@ -1 +1 @@ -2019-06-11 b1c1b6d4af62a5bc633d308e349b1ee00ea8ec51 +2019-07-08 c7b0cd5d4ded3e19b53a297062adf53959129317 diff --git a/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash b/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash index 9c25360276f..3304e16e7a8 100644 --- a/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash +++ b/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash @@ -1 +1 @@ -2019-06-11 2ad24c96c37c78658dc6181871eb7ecf4d0f3d5a +2019-07-08 83b2c1ef2ef84902f859801d1f16b9d882bcea9f diff --git a/repos/base-hw/recipes/src/base-hw-muen/hash b/repos/base-hw/recipes/src/base-hw-muen/hash index eb7fa796455..c86e0c5ae68 100644 --- a/repos/base-hw/recipes/src/base-hw-muen/hash +++ b/repos/base-hw/recipes/src/base-hw-muen/hash @@ -1 +1 @@ -2019-06-11 bb1bce72f9e6e9d7c65aa54df7e71496d39c6bd9 +2019-07-08 9e10a06a0fbbe1e3a0e6edfb392548c7c1c3f1de diff --git a/repos/base-hw/recipes/src/base-hw-nit6_solox/hash b/repos/base-hw/recipes/src/base-hw-nit6_solox/hash index 66270c851e1..b6388af7648 100644 --- a/repos/base-hw/recipes/src/base-hw-nit6_solox/hash +++ b/repos/base-hw/recipes/src/base-hw-nit6_solox/hash @@ -1 +1 @@ -2019-06-11 432da85c7881b161013a0281040265c1ea6324b7 +2019-07-08 37b1396eabb3168735dd8b25b6ef8cdd770c4f81 diff --git a/repos/base-hw/recipes/src/base-hw-odroid_xu/hash b/repos/base-hw/recipes/src/base-hw-odroid_xu/hash index 3b8ffe605c8..192e29c603a 100644 --- a/repos/base-hw/recipes/src/base-hw-odroid_xu/hash +++ b/repos/base-hw/recipes/src/base-hw-odroid_xu/hash @@ -1 +1 @@ -2019-06-11 77fbf7b927f0a9e2c489542bba754c9b46f4e058 +2019-07-08 bdcc414a1ab3da17995c7c1772d4c5f7a72fd266 diff --git a/repos/base-hw/recipes/src/base-hw-panda/hash b/repos/base-hw/recipes/src/base-hw-panda/hash index a655df337f6..1949a6a4f28 100644 --- a/repos/base-hw/recipes/src/base-hw-panda/hash +++ b/repos/base-hw/recipes/src/base-hw-panda/hash @@ -1 +1 @@ -2019-06-11 25ffc5a6afe438024de6b254dac9d04eb85b5ee3 +2019-07-08 22d39aab23ce0f611ed0b29e6c06b134a2ef6c6f diff --git a/repos/base-hw/recipes/src/base-hw-pbxa9/hash b/repos/base-hw/recipes/src/base-hw-pbxa9/hash index da2048f4236..281f5392e01 100644 --- a/repos/base-hw/recipes/src/base-hw-pbxa9/hash +++ b/repos/base-hw/recipes/src/base-hw-pbxa9/hash @@ -1 +1 @@ -2019-06-11 806b0e368a970ea3bdc30370001f6fc281c3d765 +2019-07-08 6b4aa21984a425124dd639dfdcb1472fcad707ac diff --git a/repos/base-hw/recipes/src/base-hw-pc/hash b/repos/base-hw/recipes/src/base-hw-pc/hash index 76187d8f555..b090ee6b99d 100644 --- a/repos/base-hw/recipes/src/base-hw-pc/hash +++ b/repos/base-hw/recipes/src/base-hw-pc/hash @@ -1 +1 @@ -2019-06-11 0a6ab5c860c6b8e72a2190a27ebc080e4f9f167f +2019-07-08 b6dbf7cadfbd5a6a447cfa16861ff5b93a47f4e9 diff --git a/repos/base-hw/recipes/src/base-hw-rpi/hash b/repos/base-hw/recipes/src/base-hw-rpi/hash index 77b793729e3..d118b09e86a 100644 --- a/repos/base-hw/recipes/src/base-hw-rpi/hash +++ b/repos/base-hw/recipes/src/base-hw-rpi/hash @@ -1 +1 @@ -2019-06-11 60c474fa26e64bd94e41612c92daac12fbefa246 +2019-07-08 9c6fca8b3296f4c43ffb7c861595bc8c339de306 diff --git a/repos/base-hw/recipes/src/base-hw-rpi3/hash b/repos/base-hw/recipes/src/base-hw-rpi3/hash index 5c76fbc2662..fe26b31440c 100644 --- a/repos/base-hw/recipes/src/base-hw-rpi3/hash +++ b/repos/base-hw/recipes/src/base-hw-rpi3/hash @@ -1 +1 @@ -2019-06-11 fe5960b2a356b28ad718f9749dadf75994fcd4a1 +2019-07-08 d4f12ba2b0227a165eaabc7c1d4e427ba15fc8f2 diff --git a/repos/base-hw/recipes/src/base-hw-zynq_qemu/hash b/repos/base-hw/recipes/src/base-hw-zynq_qemu/hash index b2242769c56..1e1b921d2ee 100644 --- a/repos/base-hw/recipes/src/base-hw-zynq_qemu/hash +++ b/repos/base-hw/recipes/src/base-hw-zynq_qemu/hash @@ -1 +1 @@ -2019-06-11 e7be36930cee14f9bf39b2ce019211a000cf830d +2019-07-08 326adae76d5caefb92b1fcef5d9435823880410f diff --git a/repos/base-linux/recipes/api/base-linux/hash b/repos/base-linux/recipes/api/base-linux/hash index 4f65c8fe5c7..c5880ef974c 100644 --- a/repos/base-linux/recipes/api/base-linux/hash +++ b/repos/base-linux/recipes/api/base-linux/hash @@ -1 +1 @@ -2019-06-11 e6b7c1ddae793ee628e760ec7a0a88fd0f7a956c +2019-07-08 8fcf0eb1fb129be701e3d8d2a34aca64262d4302 diff --git a/repos/base-linux/recipes/src/base-linux/hash b/repos/base-linux/recipes/src/base-linux/hash index adf57f17dec..6ab39c5f06c 100644 --- a/repos/base-linux/recipes/src/base-linux/hash +++ b/repos/base-linux/recipes/src/base-linux/hash @@ -1 +1 @@ -2019-06-11 b0adbcafad83c45b71eebd53825e1610499a6597 +2019-07-08 3fc7be4c1dfb5cb59cd439e40b7df1406ea8d6b6 diff --git a/repos/base-nova/recipes/src/base-nova/hash b/repos/base-nova/recipes/src/base-nova/hash index 88203e72776..90ff571f66f 100644 --- a/repos/base-nova/recipes/src/base-nova/hash +++ b/repos/base-nova/recipes/src/base-nova/hash @@ -1 +1 @@ -2019-06-11 0ef13777ddd8b792d75a95e5e28c9b1225724cca +2019-07-08 684d5388c0aae5fc0939b32763a6d50de0e7e602 diff --git a/repos/base-okl4/recipes/src/base-okl4/hash b/repos/base-okl4/recipes/src/base-okl4/hash index 1dee35d0e13..9372c7540f4 100644 --- a/repos/base-okl4/recipes/src/base-okl4/hash +++ b/repos/base-okl4/recipes/src/base-okl4/hash @@ -1 +1 @@ -2019-06-11 2e230b1cda3b77f528b2c3b9735d0a17b9748ce0 +2019-07-08 33866934b12b625222ee6c67436894a1783abbed diff --git a/repos/base-pistachio/recipes/src/base-pistachio/hash b/repos/base-pistachio/recipes/src/base-pistachio/hash index 88231eeaab0..8ea32866e36 100644 --- a/repos/base-pistachio/recipes/src/base-pistachio/hash +++ b/repos/base-pistachio/recipes/src/base-pistachio/hash @@ -1 +1 @@ -2019-06-11 25e1a54377c50183bea5fcf27ec00feaa1a269b5 +2019-07-08 0aa2de4d621d936fb8e05bbcb6c96d0b902a4188 diff --git a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash index f3eebe62e37..fff23cbc2bd 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash +++ b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash @@ -1 +1 @@ -2019-06-11 83b328073fd0d8e2dbf6682b745883dde1bf4e65 +2019-07-08 149f1c45571b81a63a60ebfeb45f1fc91149b8f3 diff --git a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash index 074f1185aba..1879fc97c79 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash +++ b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash @@ -1 +1 @@ -2019-06-11 ae61d52d44465a58790d729aceb391f705636e36 +2019-07-08 c7d0d1e7cde0dca197348e1b8156e7f5c2724557 diff --git a/repos/base-sel4/recipes/src/base-sel4-x86/hash b/repos/base-sel4/recipes/src/base-sel4-x86/hash index 6c131dcf5f9..aa302aa6985 100644 --- a/repos/base-sel4/recipes/src/base-sel4-x86/hash +++ b/repos/base-sel4/recipes/src/base-sel4-x86/hash @@ -1 +1 @@ -2019-06-11 4dcd307294fc37044128f343369cf0cb861a307a +2019-07-08 3a54336a4316d8634700c48a8a1ae5b816efd999 diff --git a/repos/base/recipes/api/base/hash b/repos/base/recipes/api/base/hash index 56cd2667835..1df2599835a 100644 --- a/repos/base/recipes/api/base/hash +++ b/repos/base/recipes/api/base/hash @@ -1 +1 @@ -2019-05-26 d11fd5d2fa5a8a8cdbb948a76804ed081def9339 +2019-07-08 fd09ad18cdc7950f77557fc7f4fff9b308f44c2f diff --git a/repos/base/recipes/pkg/test-ds_ownership/hash b/repos/base/recipes/pkg/test-ds_ownership/hash index 157084478bd..bc30dbf4945 100644 --- a/repos/base/recipes/pkg/test-ds_ownership/hash +++ b/repos/base/recipes/pkg/test-ds_ownership/hash @@ -1 +1 @@ -2019-05-26 f4821f4f398719040b090cacdfb9f020dc7db072 +2019-07-08 37162466a80c5444506b40c8c98cc6ea6de9b47a diff --git a/repos/base/recipes/pkg/test-log/hash b/repos/base/recipes/pkg/test-log/hash index 8586fd27bfb..7745a70bb00 100644 --- a/repos/base/recipes/pkg/test-log/hash +++ b/repos/base/recipes/pkg/test-log/hash @@ -1 +1 @@ -2019-05-26 486d828587f928aa7c31e516dcc6b7a8422f699d +2019-07-08 c1b5f195b754f1375736254664f1d9176c176503 diff --git a/repos/base/recipes/pkg/test-mmio/hash b/repos/base/recipes/pkg/test-mmio/hash index e02afb790dc..5c4e5684595 100644 --- a/repos/base/recipes/pkg/test-mmio/hash +++ b/repos/base/recipes/pkg/test-mmio/hash @@ -1 +1 @@ -2019-05-26 1bbfc023da6c575f784e22d19225cdf6b202d678 +2019-07-08 05c840ba64069e2b11d1b2121491a8b97f3ca855 diff --git a/repos/base/recipes/pkg/test-new_delete/hash b/repos/base/recipes/pkg/test-new_delete/hash index 553bc4ac55d..6887357880e 100644 --- a/repos/base/recipes/pkg/test-new_delete/hash +++ b/repos/base/recipes/pkg/test-new_delete/hash @@ -1 +1 @@ -2019-05-26 3b25055730a8c947227ecb8dcad6e0c3f88dee03 +2019-07-08 2955a95228750490c3325433ee31efcc32c23861 diff --git a/repos/base/recipes/pkg/test-reconstructible/hash b/repos/base/recipes/pkg/test-reconstructible/hash index 65dd09f63e4..ba8734325de 100644 --- a/repos/base/recipes/pkg/test-reconstructible/hash +++ b/repos/base/recipes/pkg/test-reconstructible/hash @@ -1 +1 @@ -2019-05-26 f223d348af2bc2ca8b631c83e7f14afacd8b25ba +2019-07-08 e3fb3e259cfcdbafb3b63c7b171018fa8f44d072 diff --git a/repos/base/recipes/pkg/test-registry/hash b/repos/base/recipes/pkg/test-registry/hash index df0bb79e366..7f06053165e 100644 --- a/repos/base/recipes/pkg/test-registry/hash +++ b/repos/base/recipes/pkg/test-registry/hash @@ -1 +1 @@ -2019-05-26 e946d8a1931ed8f6c0d74b6a6405beec9bbd03f5 +2019-07-08 025c967dccef6885448809592edcc99a23c21d6f diff --git a/repos/base/recipes/pkg/test-rm_fault/hash b/repos/base/recipes/pkg/test-rm_fault/hash index 3ccb0db536c..0e22fd9da4e 100644 --- a/repos/base/recipes/pkg/test-rm_fault/hash +++ b/repos/base/recipes/pkg/test-rm_fault/hash @@ -1 +1 @@ -2019-05-26 5ae8fc22cd7a28ecd96ac1a55682f25c82792def +2019-07-08 39cec48c0c94b58168c99cd9dcdf6fc1d5bdd66e diff --git a/repos/base/recipes/pkg/test-rm_fault_no_nox/hash b/repos/base/recipes/pkg/test-rm_fault_no_nox/hash index f8c9873e238..d5c8611f038 100644 --- a/repos/base/recipes/pkg/test-rm_fault_no_nox/hash +++ b/repos/base/recipes/pkg/test-rm_fault_no_nox/hash @@ -1 +1 @@ -2019-05-26 77d9c1480233aee6884d7628800dfc1936695fd7 +2019-07-08 0842f66801660cba8cd5efb0402b54710f3de773 diff --git a/repos/base/recipes/pkg/test-rm_nested/hash b/repos/base/recipes/pkg/test-rm_nested/hash index 2c2455fae5d..e79e247c0c4 100644 --- a/repos/base/recipes/pkg/test-rm_nested/hash +++ b/repos/base/recipes/pkg/test-rm_nested/hash @@ -1 +1 @@ -2019-05-26 1b2e2b5ac092de7d0bcab117f1b41ab9427d63ca +2019-07-08 a30039fc71bcfb8fe05073d5f5348757e1688abc diff --git a/repos/base/recipes/pkg/test-sanitizer/hash b/repos/base/recipes/pkg/test-sanitizer/hash index 58356b3a2ef..79729a6683e 100644 --- a/repos/base/recipes/pkg/test-sanitizer/hash +++ b/repos/base/recipes/pkg/test-sanitizer/hash @@ -1 +1 @@ -2019-05-26 d956403af65a28dcf056c15b7d93c3e1e298f589 +2019-07-08 3062c209b76f74bbfe9f3184e2cf2a4d6f5818c0 diff --git a/repos/base/recipes/pkg/test-stack_smash/hash b/repos/base/recipes/pkg/test-stack_smash/hash index 7f0ed814674..fff4649c622 100644 --- a/repos/base/recipes/pkg/test-stack_smash/hash +++ b/repos/base/recipes/pkg/test-stack_smash/hash @@ -1 +1 @@ -2019-05-26 b7615c778f9dc09b70767746603cf2bd5a8bece6 +2019-07-08 43e741d38647b816fdb6cd5a3b10de3c5be60593 diff --git a/repos/base/recipes/pkg/test-synced_interface/hash b/repos/base/recipes/pkg/test-synced_interface/hash index 83e1dc1df1c..edf2c6c4000 100644 --- a/repos/base/recipes/pkg/test-synced_interface/hash +++ b/repos/base/recipes/pkg/test-synced_interface/hash @@ -1 +1 @@ -2019-05-26 f8efa2ad043e6945cd17d68052c9f0e6966d0f32 +2019-07-08 f48c92352a33a8bab503e9edf5af7a0c9c47d686 diff --git a/repos/base/recipes/pkg/test-timer/hash b/repos/base/recipes/pkg/test-timer/hash index fbc57962fb4..17db96c1d0e 100644 --- a/repos/base/recipes/pkg/test-timer/hash +++ b/repos/base/recipes/pkg/test-timer/hash @@ -1 +1 @@ -2019-06-11 664c79514c62c3fc75f87abe362051906d46c148 +2019-07-08 02f5e81d1ecc8db4fb5f5ff78cc1e540124fc45c diff --git a/repos/base/recipes/pkg/test-xml_generator/hash b/repos/base/recipes/pkg/test-xml_generator/hash index 2fc627d6750..e1ef1f708fe 100644 --- a/repos/base/recipes/pkg/test-xml_generator/hash +++ b/repos/base/recipes/pkg/test-xml_generator/hash @@ -1 +1 @@ -2019-05-26 909cb639808d255748074e6b8028a539e9839b36 +2019-07-08 369710b5565c620340c8d461add233bbbf1478d5 diff --git a/repos/base/recipes/pkg/test-xml_node/hash b/repos/base/recipes/pkg/test-xml_node/hash index 5b397c2ccd9..ced0c533f24 100644 --- a/repos/base/recipes/pkg/test-xml_node/hash +++ b/repos/base/recipes/pkg/test-xml_node/hash @@ -1 +1 @@ -2019-05-26 6b719dc0625e3cfabf9a772a8dbdb68dfda43132 +2019-07-08 54ce4c79b98693ab03b6979b7dc0c8a6b4082ee3 diff --git a/repos/base/recipes/src/test-ds_ownership/hash b/repos/base/recipes/src/test-ds_ownership/hash index b3a5f41e7b8..60ec422c845 100644 --- a/repos/base/recipes/src/test-ds_ownership/hash +++ b/repos/base/recipes/src/test-ds_ownership/hash @@ -1 +1 @@ -2019-05-26 364992a010f156aad415ea641fe835dcb69c25af +2019-07-08 8183f267957f5c7db338191121336c602eac383c diff --git a/repos/base/recipes/src/test-log/hash b/repos/base/recipes/src/test-log/hash index 8b84b06acde..278a2dd7030 100644 --- a/repos/base/recipes/src/test-log/hash +++ b/repos/base/recipes/src/test-log/hash @@ -1 +1 @@ -2019-05-26 4b19f8cc758fc88bf71a5c5eed691fbadc0268df +2019-07-08 20762d50e848166cbdf725857347a3ff24683c30 diff --git a/repos/base/recipes/src/test-mmio/hash b/repos/base/recipes/src/test-mmio/hash index b0171b1eaca..a6674b06848 100644 --- a/repos/base/recipes/src/test-mmio/hash +++ b/repos/base/recipes/src/test-mmio/hash @@ -1 +1 @@ -2019-05-26 0d209b0a17cc841f9dc9cd7e73ed24e34762b856 +2019-07-08 652cdfdd9d1acd167bd7185a6cf616d88a73663f diff --git a/repos/base/recipes/src/test-new_delete/hash b/repos/base/recipes/src/test-new_delete/hash index f3c191d2e6e..66e0320b31d 100644 --- a/repos/base/recipes/src/test-new_delete/hash +++ b/repos/base/recipes/src/test-new_delete/hash @@ -1 +1 @@ -2019-05-26 09e2a6bf850bb29d77333a5083cc393f9862764f +2019-07-08 51e4cc7eb75188b0d1fcde1f1b057d92b64d098c diff --git a/repos/base/recipes/src/test-reconstructible/hash b/repos/base/recipes/src/test-reconstructible/hash index e10b7205b79..876f695aa46 100644 --- a/repos/base/recipes/src/test-reconstructible/hash +++ b/repos/base/recipes/src/test-reconstructible/hash @@ -1 +1 @@ -2019-05-26 54bb81f56959a75c0e123a8cda067049956a21f4 +2019-07-08 fc002925eda6f7db5206b9cee3a9822aa1cd1f41 diff --git a/repos/base/recipes/src/test-registry/hash b/repos/base/recipes/src/test-registry/hash index dcaefddb10e..dafaecbeb5f 100644 --- a/repos/base/recipes/src/test-registry/hash +++ b/repos/base/recipes/src/test-registry/hash @@ -1 +1 @@ -2019-05-26 58d0541dd76d4d1b9ec7e5ada6416821e3c8c16a +2019-07-08 d72eb842530ff6ed751e2adeaed7de8f0fa83121 diff --git a/repos/base/recipes/src/test-rm_fault/hash b/repos/base/recipes/src/test-rm_fault/hash index f9f7dee93ac..9a6f048c296 100644 --- a/repos/base/recipes/src/test-rm_fault/hash +++ b/repos/base/recipes/src/test-rm_fault/hash @@ -1 +1 @@ -2019-05-26 28e08f989d315f53301dc1f65a76da956a0964c2 +2019-07-08 f91e0412a7431e84c79bc83dced7612f642ed77c diff --git a/repos/base/recipes/src/test-rm_nested/hash b/repos/base/recipes/src/test-rm_nested/hash index db01902ca19..d29fc898bc5 100644 --- a/repos/base/recipes/src/test-rm_nested/hash +++ b/repos/base/recipes/src/test-rm_nested/hash @@ -1 +1 @@ -2019-05-26 26af0416fa565c41eb1296c14273c31c19e7c730 +2019-07-08 367fb9c90705182addcaa2f94b6307dd2aa4ff6c diff --git a/repos/base/recipes/src/test-sanitizer/hash b/repos/base/recipes/src/test-sanitizer/hash index 944d598a76a..feefe59fd67 100644 --- a/repos/base/recipes/src/test-sanitizer/hash +++ b/repos/base/recipes/src/test-sanitizer/hash @@ -1 +1 @@ -2019-05-26 e93a02aaf0bdeadacd08bbf4121538b28cf5be23 +2019-07-08 9fa40d8b5e824b1768c24feb89bfec1392f01740 diff --git a/repos/base/recipes/src/test-segfault/hash b/repos/base/recipes/src/test-segfault/hash index b7e1fc7da86..3e02b96a088 100644 --- a/repos/base/recipes/src/test-segfault/hash +++ b/repos/base/recipes/src/test-segfault/hash @@ -1 +1 @@ -2019-05-26 93ff0f74274c3497c677c8ef8c9e48443b469e17 +2019-07-08 e6bfee3e296112786768f076033e347482f30abd diff --git a/repos/base/recipes/src/test-stack_smash/hash b/repos/base/recipes/src/test-stack_smash/hash index b752e7772e4..449a16ce7b8 100644 --- a/repos/base/recipes/src/test-stack_smash/hash +++ b/repos/base/recipes/src/test-stack_smash/hash @@ -1 +1 @@ -2019-05-26 53cfbd2523ca425a1cdd92810360417d3db01354 +2019-07-08 2aa873fc4c12115140bb080f08a2e20ed87cbe08 diff --git a/repos/base/recipes/src/test-synced_interface/hash b/repos/base/recipes/src/test-synced_interface/hash index 5ecfc744253..2ad4f4b762a 100644 --- a/repos/base/recipes/src/test-synced_interface/hash +++ b/repos/base/recipes/src/test-synced_interface/hash @@ -1 +1 @@ -2019-05-26 88089b6ae0854f074e524e131beec7f54571cf23 +2019-07-08 646ab813d96cc31c9808162daee4f81e7f4bac0d diff --git a/repos/base/recipes/src/test-timer/hash b/repos/base/recipes/src/test-timer/hash index 0580e3d305d..e3ec2851ed1 100644 --- a/repos/base/recipes/src/test-timer/hash +++ b/repos/base/recipes/src/test-timer/hash @@ -1 +1 @@ -2019-06-11 6a47f4c29cf7b84c8419335d0d892e30cdca6d35 +2019-07-08 43d46908341a5dc4481e662a779fdf4bac49aa5b diff --git a/repos/base/recipes/src/test-xml_generator/hash b/repos/base/recipes/src/test-xml_generator/hash index c8195ffd3ff..64d99fdbdae 100644 --- a/repos/base/recipes/src/test-xml_generator/hash +++ b/repos/base/recipes/src/test-xml_generator/hash @@ -1 +1 @@ -2019-05-26 29cf99c516c69344af28a5a890d241972dc55234 +2019-07-08 b461241206511b752e18b9145556a2a7fae28b6e diff --git a/repos/base/recipes/src/test-xml_node/hash b/repos/base/recipes/src/test-xml_node/hash index 749433e5c1e..d5e4a2c7b2a 100644 --- a/repos/base/recipes/src/test-xml_node/hash +++ b/repos/base/recipes/src/test-xml_node/hash @@ -1 +1 @@ -2019-05-26 89e292f581f2c2fc00d122bcd11ac6a2f0395830 +2019-07-08 f2685df4451bd8b09fb4a24fd15dd7abd931e873 diff --git a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash index c53f7d757ee..6c3c5dde2ab 100644 --- a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash @@ -1 +1 @@ -2019-05-26 a693ec7f3cba41f79f2e03592b407a189a285760 +2019-07-08 c148f59757080e6359261eeb03412ab14e9a14d8 diff --git a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash index b4d0d5560c4..5932fff8cf8 100644 --- a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash @@ -1 +1 @@ -2019-05-26 13b1dc16a572afbbe3ab4c27a1105e7112641fec +2019-07-08 f42ce48fa499c93218d8660bc5613cad675432a5 diff --git a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash index 6d2d585ba93..591ee37511d 100644 --- a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash @@ -1 +1 @@ -2019-05-26 6af5fac40b7749fd3f11e8dbca47f2e5b94464b2 +2019-07-08 4aaa80b1ae1b60ba5ceda9e9d817b01c7ca5b442 diff --git a/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash b/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash index 07824072887..7c5082b6e19 100644 --- a/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash @@ -1 +1 @@ -2019-05-26 0f01df6ad7118b5cde25f603f31b9c8fb0c8d8f1 +2019-07-08 b0fc29349329ebc70e7f19cea93a23341ad9ec7a diff --git a/repos/dde_linux/recipes/pkg/drivers_interactive-rpi/hash b/repos/dde_linux/recipes/pkg/drivers_interactive-rpi/hash index 241e23ef7dd..1c6355ff895 100644 --- a/repos/dde_linux/recipes/pkg/drivers_interactive-rpi/hash +++ b/repos/dde_linux/recipes/pkg/drivers_interactive-rpi/hash @@ -1 +1 @@ -2019-05-26 0c6ba4ecf99b0b5bd0582c1447aa0ef80564933c +2019-07-08 75ba9b5a8c11d85e53546add4e53ec324c159162 diff --git a/repos/dde_linux/recipes/pkg/drivers_nic-imx53_qsb/hash b/repos/dde_linux/recipes/pkg/drivers_nic-imx53_qsb/hash index e1402bc981f..bd7a13642a6 100644 --- a/repos/dde_linux/recipes/pkg/drivers_nic-imx53_qsb/hash +++ b/repos/dde_linux/recipes/pkg/drivers_nic-imx53_qsb/hash @@ -1 +1 @@ -2019-05-26 744ff31ee621f1e8317e33ced3a2dee332b98808 +2019-07-08 8a12c4092fe735ba4ef41459ef8f281ee04daec7 diff --git a/repos/dde_linux/recipes/pkg/drivers_nic-imx6q_sabrelite/hash b/repos/dde_linux/recipes/pkg/drivers_nic-imx6q_sabrelite/hash index af71c612d92..f273507f326 100644 --- a/repos/dde_linux/recipes/pkg/drivers_nic-imx6q_sabrelite/hash +++ b/repos/dde_linux/recipes/pkg/drivers_nic-imx6q_sabrelite/hash @@ -1 +1 @@ -2019-05-26 18bfc95b90271d844b28bf00a6ae1741a58ead42 +2019-07-08 3fbff923bd3dacb912bd41f7814e39d8dbcf15b4 diff --git a/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash index 3da4bbb87d8..8c4ec6cb4a0 100644 --- a/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash +++ b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash @@ -1 +1 @@ -2019-06-27 faeb36a0166e161f7f3565a03d62e025c980cd3c +2019-07-08 22eb1f5c9d136d343223df400af544eff2bad931 diff --git a/repos/dde_linux/recipes/pkg/wifi/hash b/repos/dde_linux/recipes/pkg/wifi/hash index 75059e8b778..6cd6a1335e2 100644 --- a/repos/dde_linux/recipes/pkg/wifi/hash +++ b/repos/dde_linux/recipes/pkg/wifi/hash @@ -1 +1 @@ -2019-06-11 2efbdcd3c7421685504a65fecda990597729c142 +2019-07-08 3b58b141d1c4b2b9fa9629f76844bbbf103741d1 diff --git a/repos/dde_linux/recipes/src/fec_nic_drv/hash b/repos/dde_linux/recipes/src/fec_nic_drv/hash index e5a4f0ea047..362feac93d0 100644 --- a/repos/dde_linux/recipes/src/fec_nic_drv/hash +++ b/repos/dde_linux/recipes/src/fec_nic_drv/hash @@ -1 +1 @@ -2019-05-26 096e677effa1eb6bd31546502744adec164388b6 +2019-07-08 7c51e4525349b060af26ad830c054a7814a2b160 diff --git a/repos/dde_linux/recipes/src/intel_fb_drv/hash b/repos/dde_linux/recipes/src/intel_fb_drv/hash index 05096587b89..69d5a6a3a9a 100644 --- a/repos/dde_linux/recipes/src/intel_fb_drv/hash +++ b/repos/dde_linux/recipes/src/intel_fb_drv/hash @@ -1 +1 @@ -2019-05-26 a6497b85af5412c5eb16b27902c9b8181e7b2023 +2019-07-08 1413b9d06046eb757a33d7061b2e1b6cef6ef236 diff --git a/repos/dde_linux/recipes/src/usb_drv/hash b/repos/dde_linux/recipes/src/usb_drv/hash index e837ec4db14..b633d5f3e1e 100644 --- a/repos/dde_linux/recipes/src/usb_drv/hash +++ b/repos/dde_linux/recipes/src/usb_drv/hash @@ -1 +1 @@ -2019-05-26 c6240795bab87bf4f337bb0661e05f9d23a8222b +2019-07-08 e0ebfce24480be007bc56a1b74133b1ff3e3fdfa diff --git a/repos/dde_linux/recipes/src/vfs_lxip/hash b/repos/dde_linux/recipes/src/vfs_lxip/hash index 0636a593a35..6775ffd1848 100644 --- a/repos/dde_linux/recipes/src/vfs_lxip/hash +++ b/repos/dde_linux/recipes/src/vfs_lxip/hash @@ -1 +1 @@ -2019-05-26 f3cf7debd7aec7c8198e3e2be1e080203bbb165c +2019-07-08 4269b76215f92c490d41db409bb7bce978d93aa1 diff --git a/repos/dde_linux/recipes/src/wifi_drv/hash b/repos/dde_linux/recipes/src/wifi_drv/hash index bb1f9b8caf4..f7ea9869dc5 100644 --- a/repos/dde_linux/recipes/src/wifi_drv/hash +++ b/repos/dde_linux/recipes/src/wifi_drv/hash @@ -1 +1 @@ -2019-05-26 85454b88fbed20ad134d53874ebf8b29891c174a +2019-07-08 b47def76b9c9e2b6d5f316ca74831b09cec30918 diff --git a/repos/dde_rump/recipes/src/rump/hash b/repos/dde_rump/recipes/src/rump/hash index 39c9c21e291..3e1f82910c0 100644 --- a/repos/dde_rump/recipes/src/rump/hash +++ b/repos/dde_rump/recipes/src/rump/hash @@ -1 +1 @@ -2019-05-26 b1b3dad61a263bff6b97e10a71f775f35350c38d +2019-07-08 e7e8677a984c1a07b7d5d83333a8624177cc16f1 diff --git a/repos/demo/recipes/src/demo/hash b/repos/demo/recipes/src/demo/hash index c3effc5a20d..db7f64e703b 100644 --- a/repos/demo/recipes/src/demo/hash +++ b/repos/demo/recipes/src/demo/hash @@ -1 +1 @@ -2019-05-26 b6c2729102bd44ea1af043b7838bc4f673f72aeb +2019-07-08 e08ff86c60bbe0bdcbb39288cbd08574074191b6 diff --git a/repos/gems/recipes/api/gems/hash b/repos/gems/recipes/api/gems/hash index 9a69873a2f9..434bd18f2c2 100644 --- a/repos/gems/recipes/api/gems/hash +++ b/repos/gems/recipes/api/gems/hash @@ -1 +1 @@ -2019-05-05 4c07a7badce5ed6e84a16681db67528b7395fd46 +2019-07-08 18750ec486b7d438efd2c051b94d373eaa8ee7fd diff --git a/repos/gems/recipes/pkg/backdrop/hash b/repos/gems/recipes/pkg/backdrop/hash index 8d97c73ec15..1b56cfc3550 100644 --- a/repos/gems/recipes/pkg/backdrop/hash +++ b/repos/gems/recipes/pkg/backdrop/hash @@ -1 +1 @@ -2019-06-11 fd2ce886a47163c7036380eeb345b00aa5eb56dc +2019-07-08 3a97ac22453f8dcd2e78caa61198f5bd94250fbe diff --git a/repos/gems/recipes/pkg/depot_download/hash b/repos/gems/recipes/pkg/depot_download/hash index 2d4d794ce0c..090bd0d9b5e 100644 --- a/repos/gems/recipes/pkg/depot_download/hash +++ b/repos/gems/recipes/pkg/depot_download/hash @@ -1 +1 @@ -2019-06-11 489eef9b03e834b92bff2c10bc0d06066346c444 +2019-07-08 039ce05561ad440c744feaa3c06e234d63f29ca0 diff --git a/repos/gems/recipes/pkg/drivers_managed-pc/hash b/repos/gems/recipes/pkg/drivers_managed-pc/hash index 85ca278b668..82097b2b507 100644 --- a/repos/gems/recipes/pkg/drivers_managed-pc/hash +++ b/repos/gems/recipes/pkg/drivers_managed-pc/hash @@ -1 +1 @@ -2019-06-11 27ce269fc4e63e12e6e6c65e61c3ffe3e3d82f31 +2019-07-08 2689d86de0a25758a2ef2c6ec7d7299ca269a3f7 diff --git a/repos/gems/recipes/pkg/drivers_nic-muen/hash b/repos/gems/recipes/pkg/drivers_nic-muen/hash index 56d0de354b2..76eb4969e22 100644 --- a/repos/gems/recipes/pkg/drivers_nic-muen/hash +++ b/repos/gems/recipes/pkg/drivers_nic-muen/hash @@ -1 +1 @@ -2019-05-26 d0b540a679189b523d6a0d4ffc7f00e6fecad17a +2019-07-08 da8aa921517d6cf83701246a5e541b47bf6911a6 diff --git a/repos/gems/recipes/pkg/drivers_nic-pc/hash b/repos/gems/recipes/pkg/drivers_nic-pc/hash index e90ed65a230..3ea2ea13541 100644 --- a/repos/gems/recipes/pkg/drivers_nic-pc/hash +++ b/repos/gems/recipes/pkg/drivers_nic-pc/hash @@ -1 +1 @@ -2019-05-26 63ba8254d8275163a0e5acb0b6b16cafc260a709 +2019-07-08 93eb033b726cabbb88452cf4692b0d1f957d6964 diff --git a/repos/gems/recipes/pkg/drivers_nic-rpi/hash b/repos/gems/recipes/pkg/drivers_nic-rpi/hash index 5220547e53f..66b5d23ae5a 100644 --- a/repos/gems/recipes/pkg/drivers_nic-rpi/hash +++ b/repos/gems/recipes/pkg/drivers_nic-rpi/hash @@ -1 +1 @@ -2019-05-26 bac2db6edea9ef2925f22e4210024b6ceb0091fa +2019-07-08 3a7d056f0f545dffa0ae49533d9c8677dc7bd48c diff --git a/repos/gems/recipes/pkg/fonts_fs/hash b/repos/gems/recipes/pkg/fonts_fs/hash index d5fb90af1f3..1e8cedcebdc 100644 --- a/repos/gems/recipes/pkg/fonts_fs/hash +++ b/repos/gems/recipes/pkg/fonts_fs/hash @@ -1 +1 @@ -2019-06-11 cdf4591dfb5c349c5f4a96b8647eb0f2675bf60b +2019-07-08 97ad9511f4f57a2d36e825c922689b6c3b6935fe diff --git a/repos/gems/recipes/pkg/motif_decorator/hash b/repos/gems/recipes/pkg/motif_decorator/hash index 572ffc24a9c..fbbddee88fa 100644 --- a/repos/gems/recipes/pkg/motif_decorator/hash +++ b/repos/gems/recipes/pkg/motif_decorator/hash @@ -1 +1 @@ -2019-05-26 6b3c7189d768569d149b7abc358aa46fdcdb1dd9 +2019-07-08 159ffae61e8028b831fc5d11c4669efc670c5238 diff --git a/repos/gems/recipes/pkg/motif_wm/hash b/repos/gems/recipes/pkg/motif_wm/hash index 9cd10ac2d11..0638743d307 100644 --- a/repos/gems/recipes/pkg/motif_wm/hash +++ b/repos/gems/recipes/pkg/motif_wm/hash @@ -1 +1 @@ -2019-05-26 5d51b387e32cdd0ccbe4035e45073f937764ddf1 +2019-07-08 b696d2f501c09afe96aa5525d76c081a47c8be7b diff --git a/repos/gems/recipes/pkg/nano3d/hash b/repos/gems/recipes/pkg/nano3d/hash index 624019be01b..2ee0eae3cad 100644 --- a/repos/gems/recipes/pkg/nano3d/hash +++ b/repos/gems/recipes/pkg/nano3d/hash @@ -1 +1 @@ -2019-05-26 b456edf5cb659205e405a2ff7313e49d1a35fc06 +2019-07-08 8a93c3f6de1b79499eb52e1e938866a89b0dab4e diff --git a/repos/gems/recipes/pkg/sculpt-installation/hash b/repos/gems/recipes/pkg/sculpt-installation/hash index 2d096950ff4..8e194e958c2 100644 --- a/repos/gems/recipes/pkg/sculpt-installation/hash +++ b/repos/gems/recipes/pkg/sculpt-installation/hash @@ -1 +1 @@ -2019-06-12 00735c0a6f3c04ea78812ca6dcd704d2ac6a9535 +2019-07-08 9c7087ea335672206e5ab71cb7acf7de60ab5ba0 diff --git a/repos/gems/recipes/pkg/sculpt/hash b/repos/gems/recipes/pkg/sculpt/hash index 9cbed450186..79c09180d51 100644 --- a/repos/gems/recipes/pkg/sculpt/hash +++ b/repos/gems/recipes/pkg/sculpt/hash @@ -1 +1 @@ -2019-06-11 6370a76c4e5693f27ae9f47d87ee20e3ec069943 +2019-07-08 879550ef693bd3d8394a90b6b4e07bf9b49299c9 diff --git a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash index 1ccd642dfb6..ff46499f4b6 100644 --- a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash +++ b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash @@ -1 +1 @@ -2019-06-11 09a10e919fc087e1f3265daa542f87ac480ef866 +2019-07-08 7b94069ed35df7745a4dcdf0f8f3040c6a7db516 diff --git a/repos/gems/recipes/pkg/terminal/hash b/repos/gems/recipes/pkg/terminal/hash index e2337a35551..8a30489438b 100644 --- a/repos/gems/recipes/pkg/terminal/hash +++ b/repos/gems/recipes/pkg/terminal/hash @@ -1 +1 @@ -2019-06-11 696980cdbd76871c68e2b02935b191ae190df830 +2019-07-08 e272c619aa713664057198b209d2978778963d19 diff --git a/repos/gems/recipes/pkg/test-depot_query_index/hash b/repos/gems/recipes/pkg/test-depot_query_index/hash index 4783c5c03f1..7a564965325 100644 --- a/repos/gems/recipes/pkg/test-depot_query_index/hash +++ b/repos/gems/recipes/pkg/test-depot_query_index/hash @@ -1 +1 @@ -2019-06-11 eacd48d77f790639d256d4869ba951b26042650d +2019-07-08 bbf1dbc1e1928c51f9296dc7a5e3262cc0d4c603 diff --git a/repos/gems/recipes/pkg/test-fs_tool/hash b/repos/gems/recipes/pkg/test-fs_tool/hash index 7f5b3850f74..282228591f0 100644 --- a/repos/gems/recipes/pkg/test-fs_tool/hash +++ b/repos/gems/recipes/pkg/test-fs_tool/hash @@ -1 +1 @@ -2019-06-11 b3cc527e32cdf76d63fb964a76e8c8d2ee1b297a +2019-07-08 69a78bceb5785278fec7bb9f1384b55a89466869 diff --git a/repos/gems/recipes/pkg/test-libc_vfs_audit/hash b/repos/gems/recipes/pkg/test-libc_vfs_audit/hash index c5bbf8019b5..ce94b2dece5 100644 --- a/repos/gems/recipes/pkg/test-libc_vfs_audit/hash +++ b/repos/gems/recipes/pkg/test-libc_vfs_audit/hash @@ -1 +1 @@ -2019-06-11 3251ef13357192421bb5c072f5b8cad671894251 +2019-07-08 7d116077a86b130e61ed2a44e2ce38c25b88c60e diff --git a/repos/gems/recipes/pkg/test-magic_ring_buffer/hash b/repos/gems/recipes/pkg/test-magic_ring_buffer/hash index 4b521f60ed2..a1a7b87d364 100644 --- a/repos/gems/recipes/pkg/test-magic_ring_buffer/hash +++ b/repos/gems/recipes/pkg/test-magic_ring_buffer/hash @@ -1 +1 @@ -2019-05-26 99359a50bf6987a1b16de1cd4ad7c8c90e86de2c +2019-07-08 b61895c94038ac6bf263884df31057b7db3bf471 diff --git a/repos/gems/recipes/pkg/test-pipe/hash b/repos/gems/recipes/pkg/test-pipe/hash index 20bea7c59b9..33263f8e905 100644 --- a/repos/gems/recipes/pkg/test-pipe/hash +++ b/repos/gems/recipes/pkg/test-pipe/hash @@ -1 +1 @@ -2019-06-11 f5ec07394da759581938cc2233d9011190bae1f4 +2019-07-08 75e61a1cf66170ef9ce78f983c07ed23e879341e diff --git a/repos/gems/recipes/pkg/themed_decorator/hash b/repos/gems/recipes/pkg/themed_decorator/hash index 63ce5d915d9..4d0527ae1ec 100644 --- a/repos/gems/recipes/pkg/themed_decorator/hash +++ b/repos/gems/recipes/pkg/themed_decorator/hash @@ -1 +1 @@ -2019-06-11 811f007ba5df83bbfb8cab726c8b74114ddae9c3 +2019-07-08 df583c8d0683f2f5e27f7695331c6b7836bb7f6a diff --git a/repos/gems/recipes/pkg/themed_wm/hash b/repos/gems/recipes/pkg/themed_wm/hash index 669ecf158dd..66c400660a7 100644 --- a/repos/gems/recipes/pkg/themed_wm/hash +++ b/repos/gems/recipes/pkg/themed_wm/hash @@ -1 +1 @@ -2019-06-11 d1580a4687a2b55d9da78c18db5728abeecba40f +2019-07-08 f3478a6e2757422b1d0258008cf46790dcbdf554 diff --git a/repos/gems/recipes/pkg/trace_fs/hash b/repos/gems/recipes/pkg/trace_fs/hash index dbc031a48b5..5d42836f787 100644 --- a/repos/gems/recipes/pkg/trace_fs/hash +++ b/repos/gems/recipes/pkg/trace_fs/hash @@ -1 +1 @@ -2019-06-17 8f8feaf94c99cc2907d64304083e9cdf488c72c8 +2019-07-08 e96823d8956e3a27b07dfe8936a58e7dfda0e228 diff --git a/repos/gems/recipes/pkg/window_layouter/hash b/repos/gems/recipes/pkg/window_layouter/hash index 95f2c0c771a..f93f9a53c1a 100644 --- a/repos/gems/recipes/pkg/window_layouter/hash +++ b/repos/gems/recipes/pkg/window_layouter/hash @@ -1 +1 @@ -2019-06-11 f8f0cda5b02231032dbfbf0b96ee15e577ddcb0b +2019-07-08 0abcf48c0fa5df6d24b12f93190d1a8bb672bf72 diff --git a/repos/gems/recipes/pkg/wm/hash b/repos/gems/recipes/pkg/wm/hash index 00f43dac45a..7ec29ad8092 100644 --- a/repos/gems/recipes/pkg/wm/hash +++ b/repos/gems/recipes/pkg/wm/hash @@ -1 +1 @@ -2019-05-26 8764e89a33576cbd24d4df306cc3a11d94fef1a1 +2019-07-08 319598aabf81c51a8c9c3ecaf06ede2c908cd859 diff --git a/repos/gems/recipes/raw/motif_wm/hash b/repos/gems/recipes/raw/motif_wm/hash index a2de4a1c694..e5c2b06c168 100644 --- a/repos/gems/recipes/raw/motif_wm/hash +++ b/repos/gems/recipes/raw/motif_wm/hash @@ -1 +1 @@ -2019-02-27 f816c1eeb2f36f73f59af0de1b58ffe383b1cb72 +2019-07-08 95f70481f0b70abd611b24147ae8f3cc50744d6c diff --git a/repos/gems/recipes/raw/wm/hash b/repos/gems/recipes/raw/wm/hash index 49fd90bc92b..909ea1aa8f9 100644 --- a/repos/gems/recipes/raw/wm/hash +++ b/repos/gems/recipes/raw/wm/hash @@ -1 +1 @@ -2019-02-26 0107d428c831b83e9831330899b7a172da26131e +2019-07-08 0d23fd57f70acae9ad3cc859abbe505584aa507e diff --git a/repos/gems/recipes/src/backdrop/hash b/repos/gems/recipes/src/backdrop/hash index ea84934494e..c03eca63026 100644 --- a/repos/gems/recipes/src/backdrop/hash +++ b/repos/gems/recipes/src/backdrop/hash @@ -1 +1 @@ -2019-05-26 282cecd514dff90eb2bd0e6747c2fe5a363ac11b +2019-07-08 3375544b95be52cda441919e12adcc5de580d461 diff --git a/repos/gems/recipes/src/cpu_load_display/hash b/repos/gems/recipes/src/cpu_load_display/hash index 8600177addc..0d73fc3c9db 100644 --- a/repos/gems/recipes/src/cpu_load_display/hash +++ b/repos/gems/recipes/src/cpu_load_display/hash @@ -1 +1 @@ -2019-05-26 f971027264fa3f0287ae20cde92715366c0246e4 +2019-07-08 7aeab5d9168ab0451eeb00bfa50ac3b50fa35486 diff --git a/repos/gems/recipes/src/decorator/hash b/repos/gems/recipes/src/decorator/hash index 02f9146ad9e..7d1902a4391 100644 --- a/repos/gems/recipes/src/decorator/hash +++ b/repos/gems/recipes/src/decorator/hash @@ -1 +1 @@ -2019-05-26 08320ae29f60fd4feba5b757b9e37c078d349409 +2019-07-08 62dda47c52dc4763c4fccfe4ecf4a695f62f7349 diff --git a/repos/gems/recipes/src/depot_deploy/hash b/repos/gems/recipes/src/depot_deploy/hash index 13250750319..92277e9a648 100644 --- a/repos/gems/recipes/src/depot_deploy/hash +++ b/repos/gems/recipes/src/depot_deploy/hash @@ -1 +1 @@ -2019-05-26 4b103a32eb5e63b18ce8dee096dc7729c9cea42c +2019-07-08 a15fc2118419bc4e30e6b2dc8cdbcb6854648413 diff --git a/repos/gems/recipes/src/depot_download_manager/hash b/repos/gems/recipes/src/depot_download_manager/hash index 61336274e17..be3609a1f85 100644 --- a/repos/gems/recipes/src/depot_download_manager/hash +++ b/repos/gems/recipes/src/depot_download_manager/hash @@ -1 +1 @@ -2019-05-26 9e8c3cc4b1544ff33367f1feddbf1beda7bffce0 +2019-07-08 bc8d09bc26779ebd2d6cfcadf5d276ca3f6bf9fd diff --git a/repos/gems/recipes/src/depot_query/hash b/repos/gems/recipes/src/depot_query/hash index a471a886003..31faa732080 100644 --- a/repos/gems/recipes/src/depot_query/hash +++ b/repos/gems/recipes/src/depot_query/hash @@ -1 +1 @@ -2019-05-26 e6b6b086cd4e9f854f5f314d5f1c3fde2e5e58a2 +2019-07-08 f4cc271fd08aaaae87171f546b1902c13a03f08f diff --git a/repos/gems/recipes/src/driver_manager/hash b/repos/gems/recipes/src/driver_manager/hash index 9cb7f14d5ef..ae5a75380d1 100644 --- a/repos/gems/recipes/src/driver_manager/hash +++ b/repos/gems/recipes/src/driver_manager/hash @@ -1 +1 @@ -2019-06-11 0ea5264cfc7fcd8b8d6a73e4fd937152e792b642 +2019-07-08 77d0496d374920e557044f1a7e13480a2fa41535 diff --git a/repos/gems/recipes/src/file_terminal/hash b/repos/gems/recipes/src/file_terminal/hash index c3ea47a3548..40f8057b551 100644 --- a/repos/gems/recipes/src/file_terminal/hash +++ b/repos/gems/recipes/src/file_terminal/hash @@ -1 +1 @@ -2019-05-26 71245509124698f159ddc8324ba17c2a567a3cff +2019-07-08 90e677c3356724bbb21cd1c5692f89d4cf644e64 diff --git a/repos/gems/recipes/src/fs_query/hash b/repos/gems/recipes/src/fs_query/hash index d26fc66d5b5..a1dd129932a 100644 --- a/repos/gems/recipes/src/fs_query/hash +++ b/repos/gems/recipes/src/fs_query/hash @@ -1 +1 @@ -2019-05-26 be680534e467be8faccb5dbfa2521ae91c235536 +2019-07-08 5a0803d3c334957ca40f97bfbbb4b447f6630b74 diff --git a/repos/gems/recipes/src/fs_tool/hash b/repos/gems/recipes/src/fs_tool/hash index e836f2b3aac..aa047250da9 100644 --- a/repos/gems/recipes/src/fs_tool/hash +++ b/repos/gems/recipes/src/fs_tool/hash @@ -1 +1 @@ -2019-05-26 86a141a871ec2308fdf9c6bf24654239e3f84ead +2019-07-08 0f466f46baf793e94db12ceda686599b9932fa73 diff --git a/repos/gems/recipes/src/gpt_write/hash b/repos/gems/recipes/src/gpt_write/hash index e5a0b89731d..f1b60faafd3 100644 --- a/repos/gems/recipes/src/gpt_write/hash +++ b/repos/gems/recipes/src/gpt_write/hash @@ -1 +1 @@ -2019-05-26 e93a820e81aec6d967856d558145f09431087b51 +2019-07-08 29b9d1349010dc191d274173acdc41f869aa2fd9 diff --git a/repos/gems/recipes/src/menu_view/hash b/repos/gems/recipes/src/menu_view/hash index 58b191018e7..29f44b1d900 100644 --- a/repos/gems/recipes/src/menu_view/hash +++ b/repos/gems/recipes/src/menu_view/hash @@ -1 +1 @@ -2019-05-26 83f81808ec448d7d472e25012e4b5f6169d16765 +2019-07-08 1d62d189aa1754d4cb7e3a2201e3f5d66cc95117 diff --git a/repos/gems/recipes/src/mixer_gui_qt/hash b/repos/gems/recipes/src/mixer_gui_qt/hash index ab8951ff857..36bd9b14c29 100644 --- a/repos/gems/recipes/src/mixer_gui_qt/hash +++ b/repos/gems/recipes/src/mixer_gui_qt/hash @@ -1 +1 @@ -2019-05-27 8bfee520f33c5b81263dadb9c8e76e781fe5a52a +2019-07-08 c237375f4389fc0fd19242cf70d09d1cb39f1e68 diff --git a/repos/gems/recipes/src/nano3d/hash b/repos/gems/recipes/src/nano3d/hash index 142af199b11..16a1ff14e8d 100644 --- a/repos/gems/recipes/src/nano3d/hash +++ b/repos/gems/recipes/src/nano3d/hash @@ -1 +1 @@ -2019-05-26 0a8eb7fb28aae9d7a272361428190c8625a33acc +2019-07-08 71f6297bf886866c5e59829058041d45dfe173cd diff --git a/repos/gems/recipes/src/nit_fader/hash b/repos/gems/recipes/src/nit_fader/hash index 20c5c37b470..4e532344ec9 100644 --- a/repos/gems/recipes/src/nit_fader/hash +++ b/repos/gems/recipes/src/nit_fader/hash @@ -1 +1 @@ -2019-05-26 710734c4e336769e38223c6d47cb27c2a183d2a1 +2019-07-08 75f58beb386490e5c97e50813a199d8337b4f274 diff --git a/repos/gems/recipes/src/pipe/hash b/repos/gems/recipes/src/pipe/hash index d85d1e9bac6..4d191ef3d04 100644 --- a/repos/gems/recipes/src/pipe/hash +++ b/repos/gems/recipes/src/pipe/hash @@ -1 +1 @@ -2019-05-26 724b8f12c60727eb1458c165c210b80b6974ce24 +2019-07-08 8590636a19c13674cb2dc2bab20f4b1e86189c69 diff --git a/repos/gems/recipes/src/sculpt_manager/hash b/repos/gems/recipes/src/sculpt_manager/hash index 091bd460cdf..85ea332fec1 100644 --- a/repos/gems/recipes/src/sculpt_manager/hash +++ b/repos/gems/recipes/src/sculpt_manager/hash @@ -1 +1 @@ -2019-06-11 3ebaf9d0869af4dec7612bda3c22298dfae88506 +2019-07-08 7d31d22b463e1653a79ffe00efd7318c449f8a0f diff --git a/repos/gems/recipes/src/ssh_terminal/hash b/repos/gems/recipes/src/ssh_terminal/hash index 801783095c7..05cb4b03489 100644 --- a/repos/gems/recipes/src/ssh_terminal/hash +++ b/repos/gems/recipes/src/ssh_terminal/hash @@ -1 +1 @@ -2019-06-11 26647147b2019fe07f1503ad4a8824c36161c5bb +2019-07-08 16ba01cc82bc72cba349316cf9362a1686a8b768 diff --git a/repos/gems/recipes/src/terminal/hash b/repos/gems/recipes/src/terminal/hash index e4582274ef6..eaf4346d62d 100644 --- a/repos/gems/recipes/src/terminal/hash +++ b/repos/gems/recipes/src/terminal/hash @@ -1 +1 @@ -2019-06-11 ce3cb3739a733bdb88a9396c20e16da553a2fc1a +2019-07-08 1e1687ac44c58e9cdcf4ba1d5af8ee08adc3d9fd diff --git a/repos/gems/recipes/src/test-magic_ring_buffer/hash b/repos/gems/recipes/src/test-magic_ring_buffer/hash index 39cfaa89555..721d18ac2a2 100644 --- a/repos/gems/recipes/src/test-magic_ring_buffer/hash +++ b/repos/gems/recipes/src/test-magic_ring_buffer/hash @@ -1 +1 @@ -2019-05-26 6e6c521b4d7c53fc061a4e25c72a46ba10f983a4 +2019-07-08 f5f5826a463e4e9466cc519896c376204df06c29 diff --git a/repos/gems/recipes/src/test-tiled_wm/hash b/repos/gems/recipes/src/test-tiled_wm/hash index f2bc026a63e..a90689c47e2 100644 --- a/repos/gems/recipes/src/test-tiled_wm/hash +++ b/repos/gems/recipes/src/test-tiled_wm/hash @@ -1 +1 @@ -2019-05-27 6ffbd57e109bff27b95350d8ecd894827a02ff0d +2019-07-08 57743b41104d0d38dad7ae3b4021e2336b411136 diff --git a/repos/gems/recipes/src/themed_decorator/hash b/repos/gems/recipes/src/themed_decorator/hash index cb85f582726..9f1fc02b6f4 100644 --- a/repos/gems/recipes/src/themed_decorator/hash +++ b/repos/gems/recipes/src/themed_decorator/hash @@ -1 +1 @@ -2019-05-26 ba2d0c76659f686d0b9704740fdab67c6fc3d393 +2019-07-08 3547ec134252732eec879cbd6a5df5bfb83653cd diff --git a/repos/gems/recipes/src/vfs_audit/hash b/repos/gems/recipes/src/vfs_audit/hash index 2dbd1bf6086..670c30fae86 100644 --- a/repos/gems/recipes/src/vfs_audit/hash +++ b/repos/gems/recipes/src/vfs_audit/hash @@ -1 +1 @@ -2019-05-26 4001a6bdf755004ffd32d5d08f1396122fe232ba +2019-07-08 fcb63d15d5f32b02918caa19280ad3d39875e5b0 diff --git a/repos/gems/recipes/src/vfs_import/hash b/repos/gems/recipes/src/vfs_import/hash index dcd7a5e3322..09a5b4305d8 100644 --- a/repos/gems/recipes/src/vfs_import/hash +++ b/repos/gems/recipes/src/vfs_import/hash @@ -1 +1 @@ -2019-05-26 14b4d24a4e85070d03905da894f779712a2bd42c +2019-07-08 f313c7cd49cb260c3519315775e9a0c3ad1306e5 diff --git a/repos/gems/recipes/src/vfs_trace/hash b/repos/gems/recipes/src/vfs_trace/hash index ea6c46418af..321f39cb16c 100644 --- a/repos/gems/recipes/src/vfs_trace/hash +++ b/repos/gems/recipes/src/vfs_trace/hash @@ -1 +1 @@ -2019-06-14 e0aa8c2d7cc72565d00afb9f72b2da25000fbb9b +2019-07-08 c99a1f4ea7f75228d0fe0934bf9787ef5779fe7f diff --git a/repos/gems/recipes/src/vfs_ttf/hash b/repos/gems/recipes/src/vfs_ttf/hash index 99d1a59e9c5..e3da30852b0 100644 --- a/repos/gems/recipes/src/vfs_ttf/hash +++ b/repos/gems/recipes/src/vfs_ttf/hash @@ -1 +1 @@ -2019-06-11 8ce619cb8101fc21352e2f27c864dec4b28aeb60 +2019-07-08 6ba9f20c3b5c39a4b8373ee5749b54689b02da1f diff --git a/repos/gems/recipes/src/window_layouter/hash b/repos/gems/recipes/src/window_layouter/hash index ce3eb1d0362..cd37c8c47d1 100644 --- a/repos/gems/recipes/src/window_layouter/hash +++ b/repos/gems/recipes/src/window_layouter/hash @@ -1 +1 @@ -2019-05-26 910f36805ca741fc517e07b0f76c5fdcd4b8805b +2019-07-08 6f3fbc037259bb825faa791a7775090f11373792 diff --git a/repos/gems/recipes/src/wm/hash b/repos/gems/recipes/src/wm/hash index 8eda8e38b42..996210d8de6 100644 --- a/repos/gems/recipes/src/wm/hash +++ b/repos/gems/recipes/src/wm/hash @@ -1 +1 @@ -2019-05-26 4287f0503acda59956b36a0d2ef1542fb64ad33f +2019-07-08 e36e50e1124b5a943e3cbdbab060cf1c229ca50a diff --git a/repos/libports/recipes/api/jitterentropy/hash b/repos/libports/recipes/api/jitterentropy/hash index 2e4acf295a6..fc36dc7d5a9 100644 --- a/repos/libports/recipes/api/jitterentropy/hash +++ b/repos/libports/recipes/api/jitterentropy/hash @@ -1 +1 @@ -2019-02-25 d87b60f922ca0cb5c6fe591f878541582e3e02ef +2019-07-08 9c4acbb68e4a0c003edb9ad97049c29816cdb345 diff --git a/repos/libports/recipes/api/libc/hash b/repos/libports/recipes/api/libc/hash index e0169e2597a..d322f826473 100644 --- a/repos/libports/recipes/api/libc/hash +++ b/repos/libports/recipes/api/libc/hash @@ -1 +1 @@ -2019-05-26 d99ff7780700f7d0ad51fab5522ddc39daec3e7b +2019-07-08 a5dfcad9d182deb17b5e8566102231aac512a63b diff --git a/repos/libports/recipes/api/libc_setjmp/hash b/repos/libports/recipes/api/libc_setjmp/hash index c03227a83fb..cdf28b240c8 100644 --- a/repos/libports/recipes/api/libc_setjmp/hash +++ b/repos/libports/recipes/api/libc_setjmp/hash @@ -1 +1 @@ -2019-05-26 03771030142b22070b7b469e311a4ac51b10f96a +2019-07-08 fa2fcd47ee36644a85153bff1bffcb4b4ad2f315 diff --git a/repos/libports/recipes/api/stdcxx/hash b/repos/libports/recipes/api/stdcxx/hash index 1db49543d01..d454ec04be6 100644 --- a/repos/libports/recipes/api/stdcxx/hash +++ b/repos/libports/recipes/api/stdcxx/hash @@ -1 +1 @@ -2019-05-27 dc9280119fb18d413e5ded85e1c202007b033da4 +2019-07-08 3bb6e6088df167fab2110be4487222b125e3efd9 diff --git a/repos/libports/recipes/pkg/acpica/hash b/repos/libports/recipes/pkg/acpica/hash index 81e92408f3b..46e1ae6f822 100644 --- a/repos/libports/recipes/pkg/acpica/hash +++ b/repos/libports/recipes/pkg/acpica/hash @@ -1 +1 @@ -2019-05-26 51c5e0b4162585216b1870e11014f805f18d59dc +2019-07-08 c1ee705dfc3d69f45ba93e08c38a9a719a576683 diff --git a/repos/libports/recipes/pkg/gcov/hash b/repos/libports/recipes/pkg/gcov/hash index b5c2b1c79f2..ecd36fef5d6 100644 --- a/repos/libports/recipes/pkg/gcov/hash +++ b/repos/libports/recipes/pkg/gcov/hash @@ -1 +1 @@ -2019-06-11 55c628f2ac5eb519a7ad1e0ac7a4f94cceb3c7c2 +2019-07-08 1322d2c9ee4f3884159b27d54a0e1fcc67ad4c28 diff --git a/repos/libports/recipes/pkg/pdf_view/hash b/repos/libports/recipes/pkg/pdf_view/hash index a4ee5bcd397..01c8303867c 100644 --- a/repos/libports/recipes/pkg/pdf_view/hash +++ b/repos/libports/recipes/pkg/pdf_view/hash @@ -1 +1 @@ -2019-06-11 55aafd628d5fd6febe72e5a32744ec73af8bb73e +2019-07-08 fbe8b057d13d57c1e41e5250c3d29094faccde06 diff --git a/repos/libports/recipes/pkg/qt5_textedit/hash b/repos/libports/recipes/pkg/qt5_textedit/hash index ba3db727a3f..0bfe1ed4b8d 100644 --- a/repos/libports/recipes/pkg/qt5_textedit/hash +++ b/repos/libports/recipes/pkg/qt5_textedit/hash @@ -1 +1 @@ -2019-06-11 b8d237b15ff80dd967af2eedc14581306a9db273 +2019-07-08 dd1a64caa4c72a5226688a78725e5e71d77d3e20 diff --git a/repos/libports/recipes/pkg/test-expat/hash b/repos/libports/recipes/pkg/test-expat/hash index 2e60d6a938b..e97ef35753f 100644 --- a/repos/libports/recipes/pkg/test-expat/hash +++ b/repos/libports/recipes/pkg/test-expat/hash @@ -1 +1 @@ -2019-06-11 cb907de4fed8290ec8a0f12a99ba001d9cc2cc86 +2019-07-08 1aaa9eee566ef3e59f5c011144eea7dea95eed0a diff --git a/repos/libports/recipes/pkg/test-gnatio/hash b/repos/libports/recipes/pkg/test-gnatio/hash index de249110e97..3f51138f545 100644 --- a/repos/libports/recipes/pkg/test-gnatio/hash +++ b/repos/libports/recipes/pkg/test-gnatio/hash @@ -1 +1 @@ -2019-06-11 22808df30da2a436ccccfb95db16cf0f13cb9510 +2019-07-08 9b8a04ad6a71621edd81e6437061214a1fa9715d diff --git a/repos/libports/recipes/pkg/test-ldso/hash b/repos/libports/recipes/pkg/test-ldso/hash index ba460c489c9..b392c94a7bd 100644 --- a/repos/libports/recipes/pkg/test-ldso/hash +++ b/repos/libports/recipes/pkg/test-ldso/hash @@ -1 +1 @@ -2019-06-11 97815c21abdabb7f9906f8416ff04e4261c6d849 +2019-07-08 ce628c5aad79736da63251def72f165c86ebcd8c diff --git a/repos/libports/recipes/pkg/test-libc/hash b/repos/libports/recipes/pkg/test-libc/hash index 7bbfc452ce7..b31a033bc4a 100644 --- a/repos/libports/recipes/pkg/test-libc/hash +++ b/repos/libports/recipes/pkg/test-libc/hash @@ -1 +1 @@ -2019-06-11 40cdf8c313dfca720a857546ace1db202a6c9024 +2019-07-08 bc10908dd773ab352717d4edf75ebe0911e0ccac diff --git a/repos/libports/recipes/pkg/test-libc_connect_lwip/hash b/repos/libports/recipes/pkg/test-libc_connect_lwip/hash index 2f80f32f655..fc0bd831c84 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_lwip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_lwip/hash @@ -1 +1 @@ -2019-06-11 d8af95c8f1eb0018abf9bf866e99198716178abb +2019-07-08 95528dafa7d52fb1a0233ecbf62f66010e4f4028 diff --git a/repos/libports/recipes/pkg/test-libc_connect_lxip/hash b/repos/libports/recipes/pkg/test-libc_connect_lxip/hash index e5b4f30f088..0f142930e82 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_lxip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_lxip/hash @@ -1 +1 @@ -2019-06-11 8651b45d3344e824c84dd7c01cf978cbf38f4129 +2019-07-08 5ecce5be67b41ec0ca8d08d68f7c852fbfd264ff diff --git a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash index a9b6e53cf76..b6bbfa1e94c 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash @@ -1 +1 @@ -2019-06-11 e213fe804996340d011cf6a3e800434b3598d65d +2019-07-08 8bfdf012ffd06533cf525a30cad4440b11ed0e13 diff --git a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash index 9f1df9d7563..803f2fb0cba 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash @@ -1 +1 @@ -2019-06-11 a53d4036c6ab9e39537b90eb0d74bf1d545a91b3 +2019-07-08 5bfe7c02d44ae61e5c430fb49c7c09f7c94de7fa diff --git a/repos/libports/recipes/pkg/test-libc_counter/hash b/repos/libports/recipes/pkg/test-libc_counter/hash index fb0fe5e94cc..264b91d9cfa 100644 --- a/repos/libports/recipes/pkg/test-libc_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_counter/hash @@ -1 +1 @@ -2019-06-11 c3a4b0fc84e04155dc2db663a101e990f24947eb +2019-07-08 93be6a47bab39a0da36df82e671271db0e70c70e diff --git a/repos/libports/recipes/pkg/test-libc_getenv/hash b/repos/libports/recipes/pkg/test-libc_getenv/hash index 3256dd19605..1e589a67928 100644 --- a/repos/libports/recipes/pkg/test-libc_getenv/hash +++ b/repos/libports/recipes/pkg/test-libc_getenv/hash @@ -1 +1 @@ -2019-06-11 99fe5323e911fbe66ea2745a5fd852fe5da7e730 +2019-07-08 7db1ca88a26bbfac9d5d6e003e96881237d1330e diff --git a/repos/libports/recipes/pkg/test-libc_pipe/hash b/repos/libports/recipes/pkg/test-libc_pipe/hash index c38012a8bb7..e3d22e620a4 100644 --- a/repos/libports/recipes/pkg/test-libc_pipe/hash +++ b/repos/libports/recipes/pkg/test-libc_pipe/hash @@ -1 +1 @@ -2019-06-11 148cc259c4cf680fa68234529c082ea6c1473056 +2019-07-08 7434790b533b8a53896840fbdee0053755a1a8a3 diff --git a/repos/libports/recipes/pkg/test-libc_vfs/hash b/repos/libports/recipes/pkg/test-libc_vfs/hash index 03599b83d95..6350c35039c 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs/hash @@ -1 +1 @@ -2019-06-11 1fe790b8b22a475638a413904f88da9def11ef3e +2019-07-08 d30a036c13fe5a4810452ad4f222f932c03405fc diff --git a/repos/libports/recipes/pkg/test-libc_vfs_block/hash b/repos/libports/recipes/pkg/test-libc_vfs_block/hash index f25377f64c6..ef8028884d7 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_block/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_block/hash @@ -1 +1 @@ -2019-06-11 13c0ad6688df241c7666c4205678a78223fd24ed +2019-07-08 6d38fb0e5d98d8fe8f53c375e24b7d5fe8eb295a diff --git a/repos/libports/recipes/pkg/test-libc_vfs_counter/hash b/repos/libports/recipes/pkg/test-libc_vfs_counter/hash index 8ccf4e37214..05a19c62c5d 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_counter/hash @@ -1 +1 @@ -2019-06-11 517caf37980f5a7aac7ca6c1cc091b9f27222bcf +2019-07-08 a0325d294c5920b52ff48ca13f2e2bc78048a04b diff --git a/repos/libports/recipes/pkg/test-libc_vfs_fs/hash b/repos/libports/recipes/pkg/test-libc_vfs_fs/hash index 61783a910d6..1a039ba2e39 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_fs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_fs/hash @@ -1 +1 @@ -2019-06-11 1789320d3c3d94defb06de1fa41f6073e63faf73 +2019-07-08 d57bc5bcc690dc13c592b5aba8a790f52cf32769 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash b/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash index 1e459b0ce08..e9b70d5b435 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash @@ -1 +1 @@ -2019-06-11 1244175beffa89eee473bc358e1057bd3bcb775f +2019-07-08 5bcfca20d729c4d5a2c601e29ee19ae622218fa4 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_ram/hash b/repos/libports/recipes/pkg/test-libc_vfs_ram/hash index 91e77751717..43f58254931 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_ram/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_ram/hash @@ -1 +1 @@ -2019-06-11 289f313f2292bd37696556895cce00eb303bf279 +2019-07-08 22f64e8dc979b277558fce046ddffaedf05b19ee diff --git a/repos/libports/recipes/pkg/test-pthread/hash b/repos/libports/recipes/pkg/test-pthread/hash index 3eeff534b86..a5f117d29b8 100644 --- a/repos/libports/recipes/pkg/test-pthread/hash +++ b/repos/libports/recipes/pkg/test-pthread/hash @@ -1 +1 @@ -2019-06-11 c8c9aecbcd36d41d53afb374c3cf9d4168ef03ad +2019-07-08 8686358c46627a1302a6c865cd68fa856c32695a diff --git a/repos/libports/recipes/pkg/test-python/hash b/repos/libports/recipes/pkg/test-python/hash index ebceb0d39a8..fa25305ddf1 100644 --- a/repos/libports/recipes/pkg/test-python/hash +++ b/repos/libports/recipes/pkg/test-python/hash @@ -1 +1 @@ -2019-06-11 dd93177977ccdaa2ffc2726c003fd41bd7c0e961 +2019-07-08 f50de1fcc4fb855fec90611bc6b84ffb8fbf3a8b diff --git a/repos/libports/recipes/pkg/test-rust/hash b/repos/libports/recipes/pkg/test-rust/hash index b1bccae6479..b56c2919307 100644 --- a/repos/libports/recipes/pkg/test-rust/hash +++ b/repos/libports/recipes/pkg/test-rust/hash @@ -1 +1 @@ -2019-06-11 53fd4b78b5eb10e965cd4ee562b3b80cf65bcb6a +2019-07-08 6c3bac179c7e21d9b9c65c61d6a6415d6d9887b7 diff --git a/repos/libports/recipes/pkg/test-sequence/hash b/repos/libports/recipes/pkg/test-sequence/hash index 5367518b14c..f5675b0372c 100644 --- a/repos/libports/recipes/pkg/test-sequence/hash +++ b/repos/libports/recipes/pkg/test-sequence/hash @@ -1 +1 @@ -2019-06-11 ab1e80a54f55c1f65c71a5da38e5bd8a577ac7c2 +2019-07-08 9fb54ddf5dd984b8ce782dfceb4a348a4dec15db diff --git a/repos/libports/recipes/pkg/test-solo5/hash b/repos/libports/recipes/pkg/test-solo5/hash index 8bb350347c4..8e954cf6bbf 100644 --- a/repos/libports/recipes/pkg/test-solo5/hash +++ b/repos/libports/recipes/pkg/test-solo5/hash @@ -1 +1 @@ -2019-05-26 f072fd82db44857fbcdf9e447e17f0400458c8e2 +2019-07-08 05843e0dd9e09c69e26f1c05933056a908d4e559 diff --git a/repos/libports/recipes/pkg/test-spark/hash b/repos/libports/recipes/pkg/test-spark/hash index cd73daa5356..1f693f249eb 100644 --- a/repos/libports/recipes/pkg/test-spark/hash +++ b/repos/libports/recipes/pkg/test-spark/hash @@ -1 +1 @@ -2019-06-11 1219bdc31aa3f8b995db77d39b222fffd277e6c6 +2019-07-08 d4e5fd198306b07f36d80e8c1d640af3ff8bc5a3 diff --git a/repos/libports/recipes/pkg/test-spark_exception/hash b/repos/libports/recipes/pkg/test-spark_exception/hash index f878def5c5b..4f311e9552a 100644 --- a/repos/libports/recipes/pkg/test-spark_exception/hash +++ b/repos/libports/recipes/pkg/test-spark_exception/hash @@ -1 +1 @@ -2019-06-11 9fad3a82abcd1bb6660879ca56340107acce16c3 +2019-07-08 23bfc4b6d11cb3794d71610d344f6ddcc50de34f diff --git a/repos/libports/recipes/pkg/test-spark_secondary_stack/hash b/repos/libports/recipes/pkg/test-spark_secondary_stack/hash index a1492472286..36e57acd147 100644 --- a/repos/libports/recipes/pkg/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/pkg/test-spark_secondary_stack/hash @@ -1 +1 @@ -2019-06-11 197d2485001cccdabf78a4b3b78d05ccd86c54c3 +2019-07-08 e25d42450aee436495782834a4fc8e22b2197d24 diff --git a/repos/libports/recipes/pkg/test-stdcxx/hash b/repos/libports/recipes/pkg/test-stdcxx/hash index 630328e515e..a87a4eeed84 100644 --- a/repos/libports/recipes/pkg/test-stdcxx/hash +++ b/repos/libports/recipes/pkg/test-stdcxx/hash @@ -1 +1 @@ -2019-06-11 56f78cc2f0fd6554e7beb8d480caa7b4df9afdd7 +2019-07-08 d39cebee55af27efb9b0b23010f28a97fa9bae16 diff --git a/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash b/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash index 4037fd1b965..974f9ba0f7c 100644 --- a/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash +++ b/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash @@ -1 +1 @@ -2019-06-11 a6648d5c40dc65937ac59bd8aa3c1a57fe14c0e2 +2019-07-08 9dfaefdb627d5144d7445c87ae81765d3e7d0f68 diff --git a/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash b/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash index 2ff0029173a..6d545a608ef 100644 --- a/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash +++ b/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash @@ -1 +1 @@ -2019-06-11 9fbdefaf78a31e58e15d74ab82d32a622000d768 +2019-07-08 07a874c76674b97ceb5807b81c3cfa70cd214656 diff --git a/repos/libports/recipes/pkg/test-timed_semaphore/hash b/repos/libports/recipes/pkg/test-timed_semaphore/hash index ead6e3614e4..492d34356a6 100644 --- a/repos/libports/recipes/pkg/test-timed_semaphore/hash +++ b/repos/libports/recipes/pkg/test-timed_semaphore/hash @@ -1 +1 @@ -2019-05-26 a3a529eda45b123d5b7957fa7ad1ba1da12f7c73 +2019-07-08 f5de623e56543fc7a7a23219e70da5fa839b8b2d diff --git a/repos/libports/recipes/raw/qt5_textedit/hash b/repos/libports/recipes/raw/qt5_textedit/hash index d6cf410adef..ef7a9db1e49 100644 --- a/repos/libports/recipes/raw/qt5_textedit/hash +++ b/repos/libports/recipes/raw/qt5_textedit/hash @@ -1 +1 @@ -2019-02-25 f96dcda72b3771d4a79e6203c258058dfd7e5c60 +2019-07-08 0772b62b9c071730ce838a47d7ab24ce615a9645 diff --git a/repos/libports/recipes/src/acpica/hash b/repos/libports/recipes/src/acpica/hash index d3ede141ee3..29a253731a6 100644 --- a/repos/libports/recipes/src/acpica/hash +++ b/repos/libports/recipes/src/acpica/hash @@ -1 +1 @@ -2019-05-26 1a235ee8390a8110919ef8129490856e637659e8 +2019-07-08 bc92bc6bafcef7f45fca255a5e777d8b6f8600ce diff --git a/repos/libports/recipes/src/curl/hash b/repos/libports/recipes/src/curl/hash index ece7953293c..05d35f50126 100644 --- a/repos/libports/recipes/src/curl/hash +++ b/repos/libports/recipes/src/curl/hash @@ -1 +1 @@ -2019-05-26 ca9a02e7d284b6a6dcbf27b3e62faf57e5c813a7 +2019-07-08 152c39789183acc3916a7bc1f09dbadb7886b82e diff --git a/repos/libports/recipes/src/drm/hash b/repos/libports/recipes/src/drm/hash index 7703bfc47a5..761cfb33c64 100644 --- a/repos/libports/recipes/src/drm/hash +++ b/repos/libports/recipes/src/drm/hash @@ -1 +1 @@ -2019-05-26 c898e115801a9cd8df41f2cc337958f017f12c07 +2019-07-08 aa8487ec553dd61838d8e494eea0a844df8074db diff --git a/repos/libports/recipes/src/expat/hash b/repos/libports/recipes/src/expat/hash index 6d8dc01315d..bf6e4129cc6 100644 --- a/repos/libports/recipes/src/expat/hash +++ b/repos/libports/recipes/src/expat/hash @@ -1 +1 @@ -2019-05-26 6061473987f155322f4d49077ea4ffdefde8bf0d +2019-07-08 fc9d34088f394e6e07b0b272d7990fb39a443d4d diff --git a/repos/libports/recipes/src/extract/hash b/repos/libports/recipes/src/extract/hash index bd5906d94d1..661ed61b16d 100644 --- a/repos/libports/recipes/src/extract/hash +++ b/repos/libports/recipes/src/extract/hash @@ -1 +1 @@ -2019-05-26 b812aa8d500e1efc50be1ed139f9e053d610557d +2019-07-08 4894d8d40bc1db3a03a202b51ca3669816914746 diff --git a/repos/libports/recipes/src/fetchurl/hash b/repos/libports/recipes/src/fetchurl/hash index e17e1879e79..876b0806ba1 100644 --- a/repos/libports/recipes/src/fetchurl/hash +++ b/repos/libports/recipes/src/fetchurl/hash @@ -1 +1 @@ -2019-05-26 a86c14b3219cf0e04e1e8b2613a3fe52e3e232b6 +2019-07-08 26ae8557788e8b36d7681201fc713d897f8a7629 diff --git a/repos/libports/recipes/src/freetype/hash b/repos/libports/recipes/src/freetype/hash index e5411b02b0b..18da94a8229 100644 --- a/repos/libports/recipes/src/freetype/hash +++ b/repos/libports/recipes/src/freetype/hash @@ -1 +1 @@ -2019-05-26 189cc5e06f9973556e7863879ab6ae4245b23ffd +2019-07-08 c2a994348a1056778558f52e84706124d8a5ba7a diff --git a/repos/libports/recipes/src/gcov/hash b/repos/libports/recipes/src/gcov/hash index 7d3edfd81dc..598463098d9 100644 --- a/repos/libports/recipes/src/gcov/hash +++ b/repos/libports/recipes/src/gcov/hash @@ -1 +1 @@ -2019-05-27 8464f85bfb7b3f28a0ac3d65787e89576584bc88 +2019-07-08 74aa4edc89b8541dbd10c9b107b76c2aeac01e79 diff --git a/repos/libports/recipes/src/gmp/hash b/repos/libports/recipes/src/gmp/hash index 45ec5f51ffd..d1f637002fc 100644 --- a/repos/libports/recipes/src/gmp/hash +++ b/repos/libports/recipes/src/gmp/hash @@ -1 +1 @@ -2019-05-26 0371069a94ca03710eb1927244b4b82f36fc23be +2019-07-08 3e342c70d3b9e05b52e5253efa65bf97f9d99e4d diff --git a/repos/libports/recipes/src/icu/hash b/repos/libports/recipes/src/icu/hash index 77527a711d7..43161bb7af7 100644 --- a/repos/libports/recipes/src/icu/hash +++ b/repos/libports/recipes/src/icu/hash @@ -1 +1 @@ -2019-05-27 78bc9716489d37021b397f82148d7ea278ae0ef7 +2019-07-08 f4161a0a049115f4420374e59187032df67897ed diff --git a/repos/libports/recipes/src/jbig2dec/hash b/repos/libports/recipes/src/jbig2dec/hash index 7d35e2c267d..4c4c957a943 100644 --- a/repos/libports/recipes/src/jbig2dec/hash +++ b/repos/libports/recipes/src/jbig2dec/hash @@ -1 +1 @@ -2019-05-26 13548d3995d410ffa27e3ffae755a9f2e4f612e1 +2019-07-08 061d08793e018537991939116d01de7be49386c0 diff --git a/repos/libports/recipes/src/jpeg/hash b/repos/libports/recipes/src/jpeg/hash index 92bc15923b1..e3521d0503c 100644 --- a/repos/libports/recipes/src/jpeg/hash +++ b/repos/libports/recipes/src/jpeg/hash @@ -1 +1 @@ -2019-05-26 a7fec2b830907c0f3ddadd9732ac1f121b42c463 +2019-07-08 90d17e5100e209510aec1265ddc8a37129d84f07 diff --git a/repos/libports/recipes/src/libarchive/hash b/repos/libports/recipes/src/libarchive/hash index 733ec69794c..dbff0b753a7 100644 --- a/repos/libports/recipes/src/libarchive/hash +++ b/repos/libports/recipes/src/libarchive/hash @@ -1 +1 @@ -2019-05-26 b5edfeda18f1575a3fa4f96d6487f0159c715d45 +2019-07-08 d3ce57dfab6693b6223ff51c4ad960705b7b06d6 diff --git a/repos/libports/recipes/src/libc/hash b/repos/libports/recipes/src/libc/hash index 3cdff80e729..6ff59cf3de0 100644 --- a/repos/libports/recipes/src/libc/hash +++ b/repos/libports/recipes/src/libc/hash @@ -1 +1 @@ -2019-06-11 5c507e60cf3e5013d74a86171110ae305aa46471 +2019-07-08 9da18c6726ac3dd0cc8bcc8a6e927dd1110ce752 diff --git a/repos/libports/recipes/src/libcrypto/hash b/repos/libports/recipes/src/libcrypto/hash index 0884bc1e64e..876332c742d 100644 --- a/repos/libports/recipes/src/libcrypto/hash +++ b/repos/libports/recipes/src/libcrypto/hash @@ -1 +1 @@ -2019-05-26 865aaf7b04e5de66ccf7b1bafd253f5fa52ee100 +2019-07-08 475c1a095df07aa8dead660c79fea964a4f228c0 diff --git a/repos/libports/recipes/src/libiconv/hash b/repos/libports/recipes/src/libiconv/hash index 18921facc69..908c0567fd4 100644 --- a/repos/libports/recipes/src/libiconv/hash +++ b/repos/libports/recipes/src/libiconv/hash @@ -1 +1 @@ -2019-05-26 2d05a0dd6ba52354af2ce8327c0c4014b5d9ca04 +2019-07-08 53e35acadff5dfe7c19f4a894cd6633b1f358392 diff --git a/repos/libports/recipes/src/liblzma/hash b/repos/libports/recipes/src/liblzma/hash index 1269e03d638..4b4c426dbaf 100644 --- a/repos/libports/recipes/src/liblzma/hash +++ b/repos/libports/recipes/src/liblzma/hash @@ -1 +1 @@ -2019-05-26 6461c48c391693fe8dadb111c71115a25885e31b +2019-07-08 06ea31fe85d356020cdfb6533dd5ab4e154dc2f0 diff --git a/repos/libports/recipes/src/libpng/hash b/repos/libports/recipes/src/libpng/hash index 7e08772464b..73a959075a2 100644 --- a/repos/libports/recipes/src/libpng/hash +++ b/repos/libports/recipes/src/libpng/hash @@ -1 +1 @@ -2019-05-26 caa5c79031f52953ff639ad462480d2b65ab43dc +2019-07-08 52b2fd0806b7e7a3dbba966d32580ae8d0629048 diff --git a/repos/libports/recipes/src/libssh/hash b/repos/libports/recipes/src/libssh/hash index b46fe4b1528..47a7ad4e9ac 100644 --- a/repos/libports/recipes/src/libssh/hash +++ b/repos/libports/recipes/src/libssh/hash @@ -1 +1 @@ -2019-05-26 d0d0094c0664317cfb21e3704c94df12d21adf58 +2019-07-08 5efa3c0195d187288f6890653b6d7182749c91dc diff --git a/repos/libports/recipes/src/libssl/hash b/repos/libports/recipes/src/libssl/hash index 64f1356f400..460ad008ea7 100644 --- a/repos/libports/recipes/src/libssl/hash +++ b/repos/libports/recipes/src/libssl/hash @@ -1 +1 @@ -2019-05-26 dd366334624a13f244847189382c760acd3bbf0d +2019-07-08 b92168b136fa2fb4e16090723ddc671680f389be diff --git a/repos/libports/recipes/src/mesa/hash b/repos/libports/recipes/src/mesa/hash index 39e775e3ab2..03c79a94edc 100644 --- a/repos/libports/recipes/src/mesa/hash +++ b/repos/libports/recipes/src/mesa/hash @@ -1 +1 @@ -2019-05-27 99f1e5fb0da953ec3805df315333ac1d44224c40 +2019-07-08 1bcc30098eaea21755641464818a4c82299fe136 diff --git a/repos/libports/recipes/src/mpc/hash b/repos/libports/recipes/src/mpc/hash index 4186d6f3856..7aeb2b62c46 100644 --- a/repos/libports/recipes/src/mpc/hash +++ b/repos/libports/recipes/src/mpc/hash @@ -1 +1 @@ -2019-05-26 2077113fe4408fb675d683d8b96700b72394527d +2019-07-08 aa29907366b7a96abeec3c7b5dad927f9c4ce4b3 diff --git a/repos/libports/recipes/src/mpfr/hash b/repos/libports/recipes/src/mpfr/hash index b396319c50f..b4f93b9c026 100644 --- a/repos/libports/recipes/src/mpfr/hash +++ b/repos/libports/recipes/src/mpfr/hash @@ -1 +1 @@ -2019-05-26 5c2ee487b24e4d7bd915d25b0a85148b5cf112d3 +2019-07-08 99a849d5ef8e1acb3e4699705d603da7eda3e94f diff --git a/repos/libports/recipes/src/mupdf/hash b/repos/libports/recipes/src/mupdf/hash index 71dae6e15d2..d4b12e0a16c 100644 --- a/repos/libports/recipes/src/mupdf/hash +++ b/repos/libports/recipes/src/mupdf/hash @@ -1 +1 @@ -2019-05-26 4564ecc9e6a9556e8f6e5fba91c4159f4a5be08c +2019-07-08 09641c280764721917af2b4e599c08809c21b862 diff --git a/repos/libports/recipes/src/ncurses/hash b/repos/libports/recipes/src/ncurses/hash index 3bfb8d9ce7d..e9b49120e23 100644 --- a/repos/libports/recipes/src/ncurses/hash +++ b/repos/libports/recipes/src/ncurses/hash @@ -1 +1 @@ -2019-06-11 91b3a7782729426efd947040f0c268a4dc3fbc89 +2019-07-08 e279ad366761f59bd94af03e6ec99762462408fd diff --git a/repos/libports/recipes/src/openjpeg/hash b/repos/libports/recipes/src/openjpeg/hash index e88d5a1eeb7..f9a185b37a6 100644 --- a/repos/libports/recipes/src/openjpeg/hash +++ b/repos/libports/recipes/src/openjpeg/hash @@ -1 +1 @@ -2019-05-26 3ba953c0deeac39f3a3df67fe3cf853538742f89 +2019-07-08 4374de8ff01aac24cfe7038a0f3c10120e66b4d2 diff --git a/repos/libports/recipes/src/pcre/hash b/repos/libports/recipes/src/pcre/hash index 1b66823cd66..c0a9a12668b 100644 --- a/repos/libports/recipes/src/pcre/hash +++ b/repos/libports/recipes/src/pcre/hash @@ -1 +1 @@ -2019-05-26 1fb66a6076391b5fb4aea2722f8e41c1a72c9ba8 +2019-07-08 9d590c8184eb9d3e9a8b00450a96d8478f7e8384 diff --git a/repos/libports/recipes/src/pcre16/hash b/repos/libports/recipes/src/pcre16/hash index 1b317c42435..907b3a30cb1 100644 --- a/repos/libports/recipes/src/pcre16/hash +++ b/repos/libports/recipes/src/pcre16/hash @@ -1 +1 @@ -2019-05-26 4c3d86300dd46cfa184fb35ea855f1553c21f29c +2019-07-08 3d8f1a853a35128aab504f473676402c78ede47b diff --git a/repos/libports/recipes/src/pdf_view/hash b/repos/libports/recipes/src/pdf_view/hash index 3eec26e13f7..d3d13fc036e 100644 --- a/repos/libports/recipes/src/pdf_view/hash +++ b/repos/libports/recipes/src/pdf_view/hash @@ -1 +1 @@ -2019-05-26 9f4726cb51b9a2b4147faebd22446c9f7ec289b5 +2019-07-08 8fdc1f787aa707a47ab09b32ade38f2df27c8231 diff --git a/repos/libports/recipes/src/posix/hash b/repos/libports/recipes/src/posix/hash index 47c99b84e91..678445492b0 100644 --- a/repos/libports/recipes/src/posix/hash +++ b/repos/libports/recipes/src/posix/hash @@ -1 +1 @@ -2019-05-26 93c8a67993329dfdd9e301d05c1c52b0a25b5876 +2019-07-08 1b4b7b78fd8b4ee1adea70ada3de80aeb70fd813 diff --git a/repos/libports/recipes/src/python/hash b/repos/libports/recipes/src/python/hash index 3892bd5c706..1a1bd81bc71 100644 --- a/repos/libports/recipes/src/python/hash +++ b/repos/libports/recipes/src/python/hash @@ -1 +1 @@ -2019-05-26 d64e68a064f9cf6fad26e1a50fbfa02968e44660 +2019-07-08 bfa01112479ab3dfef4b4d17634b34e3adac3c0e diff --git a/repos/libports/recipes/src/qt5_calculatorform/hash b/repos/libports/recipes/src/qt5_calculatorform/hash index 8d674e0a39a..c95b0c883cf 100644 --- a/repos/libports/recipes/src/qt5_calculatorform/hash +++ b/repos/libports/recipes/src/qt5_calculatorform/hash @@ -1 +1 @@ -2019-05-27 87cc10358009417912b513e86b32e289c5eecacc +2019-07-08 ad3258b1e057495938bdf1ddb8376eb3b88ac5b6 diff --git a/repos/libports/recipes/src/qt5_component/hash b/repos/libports/recipes/src/qt5_component/hash index ea20dce1cf0..9d64ec6df41 100644 --- a/repos/libports/recipes/src/qt5_component/hash +++ b/repos/libports/recipes/src/qt5_component/hash @@ -1 +1 @@ -2019-05-26 266c5884d7f0f41fac2ae8f2ee45e3ea45146ce4 +2019-07-08 df07c3eb360ad24795f5578761cacd5831a5aa20 diff --git a/repos/libports/recipes/src/qt5_core/hash b/repos/libports/recipes/src/qt5_core/hash index e1059b45bfd..29394990db5 100644 --- a/repos/libports/recipes/src/qt5_core/hash +++ b/repos/libports/recipes/src/qt5_core/hash @@ -1 +1 @@ -2019-05-27 feb2dd16af1038dff23b75c2bf71b28bbcc7470e +2019-07-08 aeb6b73882673051ab5e30d48729f031f26090ad diff --git a/repos/libports/recipes/src/qt5_gui/hash b/repos/libports/recipes/src/qt5_gui/hash index 6a50770bd1f..d49a1303dfd 100644 --- a/repos/libports/recipes/src/qt5_gui/hash +++ b/repos/libports/recipes/src/qt5_gui/hash @@ -1 +1 @@ -2019-05-27 3760ca76f17785fc9b11a4c4bdbbb04f1ec8f314 +2019-07-08 6464d26601cb5c2f9c64a2d6407986cb1416f50b diff --git a/repos/libports/recipes/src/qt5_launchpad/hash b/repos/libports/recipes/src/qt5_launchpad/hash index f4ed1ca6736..eef01cc241c 100644 --- a/repos/libports/recipes/src/qt5_launchpad/hash +++ b/repos/libports/recipes/src/qt5_launchpad/hash @@ -1 +1 @@ -2019-05-27 4ed372b844287f9cd16c2790edf8be940dc8a57f +2019-07-08 f7a456b715d23401e7c87d0d341171c54610e744 diff --git a/repos/libports/recipes/src/qt5_network/hash b/repos/libports/recipes/src/qt5_network/hash index 96f3fbb7217..659bb03935a 100644 --- a/repos/libports/recipes/src/qt5_network/hash +++ b/repos/libports/recipes/src/qt5_network/hash @@ -1 +1 @@ -2019-05-27 e46188a2fdec98940366e5cedc623741e1a41016 +2019-07-08 fe2d702408f7d15acfb7f8de856e7876daad27eb diff --git a/repos/libports/recipes/src/qt5_opengl/hash b/repos/libports/recipes/src/qt5_opengl/hash index 08d28418979..03fe0180d09 100644 --- a/repos/libports/recipes/src/qt5_opengl/hash +++ b/repos/libports/recipes/src/qt5_opengl/hash @@ -1 +1 @@ -2019-05-27 24ea030cbc9b283cafdd8e2306e57070bef905c1 +2019-07-08 4e4827a6ce5dc712b23afd703551b017891c2a88 diff --git a/repos/libports/recipes/src/qt5_openglwindow/hash b/repos/libports/recipes/src/qt5_openglwindow/hash index efd3ee71553..5796f5430b4 100644 --- a/repos/libports/recipes/src/qt5_openglwindow/hash +++ b/repos/libports/recipes/src/qt5_openglwindow/hash @@ -1 +1 @@ -2019-05-27 46bd07335ffd9e9e0abe258e5d8a53f448175dac +2019-07-08 33b5c596a896f302c746843d7b27892b85a33814 diff --git a/repos/libports/recipes/src/qt5_printsupport/hash b/repos/libports/recipes/src/qt5_printsupport/hash index b6390068443..c4d8acd9c77 100644 --- a/repos/libports/recipes/src/qt5_printsupport/hash +++ b/repos/libports/recipes/src/qt5_printsupport/hash @@ -1 +1 @@ -2019-05-27 9ae69c973fa445e8bba6151dac7dfff34ddb532d +2019-07-08 e5c3c98bc70c3eae3e3bfe6ff15f5937ffedd4a9 diff --git a/repos/libports/recipes/src/qt5_qjpeg/hash b/repos/libports/recipes/src/qt5_qjpeg/hash index cd10f1e4bb5..b7b49b73d75 100644 --- a/repos/libports/recipes/src/qt5_qjpeg/hash +++ b/repos/libports/recipes/src/qt5_qjpeg/hash @@ -1 +1 @@ -2019-05-27 b550d8834edf5472a646bb47bdbf786b3792dbed +2019-07-08 6d0f3af45ac62911e30e6801e1014b277e7543b5 diff --git a/repos/libports/recipes/src/qt5_qml/hash b/repos/libports/recipes/src/qt5_qml/hash index d3a11f467a7..8eee9fbd2c9 100644 --- a/repos/libports/recipes/src/qt5_qml/hash +++ b/repos/libports/recipes/src/qt5_qml/hash @@ -1 +1 @@ -2019-05-27 d1fa83beb9aa4ea5c8c4375feef62bf60f722acb +2019-07-08 82e8419c2b361f5a7ee64a70a5bf494ab0cad134 diff --git a/repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash b/repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash index 99e2432d331..fb7e0abb6aa 100644 --- a/repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash +++ b/repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash @@ -1 +1 @@ -2019-05-27 0bb2bc769ea5578f95ab0fcf8cb1b76422a3b889 +2019-07-08 ddd4f7f5d5cac52fb602dcc864ac90f417d66c4e diff --git a/repos/libports/recipes/src/qt5_qpa_nitpicker/hash b/repos/libports/recipes/src/qt5_qpa_nitpicker/hash index 2f25947170f..a8df23b8acf 100644 --- a/repos/libports/recipes/src/qt5_qpa_nitpicker/hash +++ b/repos/libports/recipes/src/qt5_qpa_nitpicker/hash @@ -1 +1 @@ -2019-06-11 47da2f43f8d6cfde55fcd5957cc3e55317ea3ea4 +2019-07-08 5d4b7cf1624fda7fdba91af58c5ef8a38cf04d63 diff --git a/repos/libports/recipes/src/qt5_qpluginwidget/hash b/repos/libports/recipes/src/qt5_qpluginwidget/hash index 16ad25a0ae0..89b422efc10 100644 --- a/repos/libports/recipes/src/qt5_qpluginwidget/hash +++ b/repos/libports/recipes/src/qt5_qpluginwidget/hash @@ -1 +1 @@ -2019-05-27 91acd0999e67d02614149c7aa44933aa3ed33d7b +2019-07-08 8e45aca1d50975ea8729f7de190eb704ca51ed70 diff --git a/repos/libports/recipes/src/qt5_qt_labs_folderlistmodel/hash b/repos/libports/recipes/src/qt5_qt_labs_folderlistmodel/hash index cfcb1355b11..7719d548ff4 100644 --- a/repos/libports/recipes/src/qt5_qt_labs_folderlistmodel/hash +++ b/repos/libports/recipes/src/qt5_qt_labs_folderlistmodel/hash @@ -1 +1 @@ -2019-05-27 74e859c6a0fdcf0cd99838922b9cf18b116aab9c +2019-07-08 78c41523f8c00df67ca255da9d50cf3dad2c533a diff --git a/repos/libports/recipes/src/qt5_qtquick2/hash b/repos/libports/recipes/src/qt5_qtquick2/hash index 4968d114c5d..0b6fa599524 100644 --- a/repos/libports/recipes/src/qt5_qtquick2/hash +++ b/repos/libports/recipes/src/qt5_qtquick2/hash @@ -1 +1 @@ -2019-05-27 5a1f72e0b68e2c482f883e05ea2dd48b9f678b4f +2019-07-08 0a8f4d54e1afd3108c372fae01dd319ef5138207 diff --git a/repos/libports/recipes/src/qt5_qtquick_layouts/hash b/repos/libports/recipes/src/qt5_qtquick_layouts/hash index 31903dfd585..88089fcaf22 100644 --- a/repos/libports/recipes/src/qt5_qtquick_layouts/hash +++ b/repos/libports/recipes/src/qt5_qtquick_layouts/hash @@ -1 +1 @@ -2019-05-27 a0f8158cbebaaf992c879b07ac6716f97694ab38 +2019-07-08 c9c7ee38e8dab4a9b3159de2f405959814521576 diff --git a/repos/libports/recipes/src/qt5_qtquick_virtualkeyboard/hash b/repos/libports/recipes/src/qt5_qtquick_virtualkeyboard/hash index cc0aaf9a978..046f1a75480 100644 --- a/repos/libports/recipes/src/qt5_qtquick_virtualkeyboard/hash +++ b/repos/libports/recipes/src/qt5_qtquick_virtualkeyboard/hash @@ -1 +1 @@ -2019-05-27 89aea44c50daf8cb8a7058e953a23c5fb28b849d +2019-07-08 fc75abfecf26e1cf9cdaea49b56b2de72e0dfe08 diff --git a/repos/libports/recipes/src/qt5_qtquick_window/hash b/repos/libports/recipes/src/qt5_qtquick_window/hash index 88966bd95e4..e61fffa7ff7 100644 --- a/repos/libports/recipes/src/qt5_qtquick_window/hash +++ b/repos/libports/recipes/src/qt5_qtquick_window/hash @@ -1 +1 @@ -2019-05-27 fc9e9f041cd95750d076484b11c1738d7d67a7d7 +2019-07-08 813f09ab9431e925486406ca520f8873ea5fc6f5 diff --git a/repos/libports/recipes/src/qt5_quick/hash b/repos/libports/recipes/src/qt5_quick/hash index 9b83674e449..4f34a941bdb 100644 --- a/repos/libports/recipes/src/qt5_quick/hash +++ b/repos/libports/recipes/src/qt5_quick/hash @@ -1 +1 @@ -2019-05-27 975752e8c706eb0d1e76a8b27a2963b9e0f0ad8a +2019-07-08 0a71c162320020d090ee847689f1bfbfa49bed04 diff --git a/repos/libports/recipes/src/qt5_samegame/hash b/repos/libports/recipes/src/qt5_samegame/hash index 525df495afc..a2afffb3c87 100644 --- a/repos/libports/recipes/src/qt5_samegame/hash +++ b/repos/libports/recipes/src/qt5_samegame/hash @@ -1 +1 @@ -2019-05-27 02d04305f2d647e2265b2188f12fb7a42ec2af6c +2019-07-08 2bf262f833b66fe685fce95d843bd6a72d2083e2 diff --git a/repos/libports/recipes/src/qt5_scriptclassic/hash b/repos/libports/recipes/src/qt5_scriptclassic/hash index 4c4dfbedadb..489b3992410 100644 --- a/repos/libports/recipes/src/qt5_scriptclassic/hash +++ b/repos/libports/recipes/src/qt5_scriptclassic/hash @@ -1 +1 @@ -2019-05-27 751e0235ba8543b2d2ba8db79fb98b95c1444983 +2019-07-08 5b3f9ca8c4f03cfcba578158669ac72bea436ce0 diff --git a/repos/libports/recipes/src/qt5_sql/hash b/repos/libports/recipes/src/qt5_sql/hash index 73b3fa36db0..bbb07cedc2f 100644 --- a/repos/libports/recipes/src/qt5_sql/hash +++ b/repos/libports/recipes/src/qt5_sql/hash @@ -1 +1 @@ -2019-05-27 2950f7bc1c2cb7856c406b152f382083964c8f5f +2019-07-08 b432621e0761a1ba7ae397510180b6bf11d7ab0f diff --git a/repos/libports/recipes/src/qt5_svg/hash b/repos/libports/recipes/src/qt5_svg/hash index be9646c63ae..861a2a4cd40 100644 --- a/repos/libports/recipes/src/qt5_svg/hash +++ b/repos/libports/recipes/src/qt5_svg/hash @@ -1 +1 @@ -2019-05-27 eee801b10068dd381f22ef5909a1663c4e94f627 +2019-07-08 6d66d48dc318b6c46f9d19f5daf0a11c631173bb diff --git a/repos/libports/recipes/src/qt5_test/hash b/repos/libports/recipes/src/qt5_test/hash index 04b3578f099..2c0b1c85a2f 100644 --- a/repos/libports/recipes/src/qt5_test/hash +++ b/repos/libports/recipes/src/qt5_test/hash @@ -1 +1 @@ -2019-05-27 4346c969addd148e4afe002f8d8bf6565fc7264c +2019-07-08 3e59ba69b159c4f6e810e07b09f7271bbd55a1a3 diff --git a/repos/libports/recipes/src/qt5_testqstring/hash b/repos/libports/recipes/src/qt5_testqstring/hash index f931056583f..e3db2f12823 100644 --- a/repos/libports/recipes/src/qt5_testqstring/hash +++ b/repos/libports/recipes/src/qt5_testqstring/hash @@ -1 +1 @@ -2019-05-27 c438ea6588691d4054b61faaa197b1ca178c5c7e +2019-07-08 67fcad20c58a482607d3d33ce09a569d1cf88933 diff --git a/repos/libports/recipes/src/qt5_tetrix/hash b/repos/libports/recipes/src/qt5_tetrix/hash index 78d49bf933b..401052acff3 100644 --- a/repos/libports/recipes/src/qt5_tetrix/hash +++ b/repos/libports/recipes/src/qt5_tetrix/hash @@ -1 +1 @@ -2019-05-27 bfb16f1255598c85a4f85ebaf768c0c1ff14e0f0 +2019-07-08 770010e40000cdb63516cd2cccde89c8d5c3bcf9 diff --git a/repos/libports/recipes/src/qt5_textedit/hash b/repos/libports/recipes/src/qt5_textedit/hash index 0c92dc32274..1281aef3632 100644 --- a/repos/libports/recipes/src/qt5_textedit/hash +++ b/repos/libports/recipes/src/qt5_textedit/hash @@ -1 +1 @@ -2019-05-27 2d0e2b08200b0528e3f38b6e371f0e18ad84ed3e +2019-07-08 5659e307c2e22dfdc67faa098909c98c92d5ddf4 diff --git a/repos/libports/recipes/src/qt5_ui_tools/hash b/repos/libports/recipes/src/qt5_ui_tools/hash index 75b2f9ed47c..3600dd194ce 100644 --- a/repos/libports/recipes/src/qt5_ui_tools/hash +++ b/repos/libports/recipes/src/qt5_ui_tools/hash @@ -1 +1 @@ -2019-05-27 766c11c3db503cea986fb8d71bfd848e3d83692a +2019-07-08 18286c8c5666300f0f42e6db183e6d7d71c136d7 diff --git a/repos/libports/recipes/src/qt5_virtualkeyboard/hash b/repos/libports/recipes/src/qt5_virtualkeyboard/hash index 101db21b1f5..e0a53f4ac33 100644 --- a/repos/libports/recipes/src/qt5_virtualkeyboard/hash +++ b/repos/libports/recipes/src/qt5_virtualkeyboard/hash @@ -1 +1 @@ -2019-05-27 08b4ecba6f7d956f46c2dac5eb69deecb4b1ad01 +2019-07-08 b9a3a2637a715b0d238f9fc5eeee58fb704a97e9 diff --git a/repos/libports/recipes/src/qt5_webkit/hash b/repos/libports/recipes/src/qt5_webkit/hash index 4147be5d712..936382c67ea 100644 --- a/repos/libports/recipes/src/qt5_webkit/hash +++ b/repos/libports/recipes/src/qt5_webkit/hash @@ -1 +1 @@ -2019-05-27 6e6ee151d0998fd5299fa4fe0f1f956e9e2c786f +2019-07-08 f0d23346182f63fb62212305b4dd5d1f12458b2c diff --git a/repos/libports/recipes/src/qt5_widgets/hash b/repos/libports/recipes/src/qt5_widgets/hash index ac65817bac4..c3726aeaeb2 100644 --- a/repos/libports/recipes/src/qt5_widgets/hash +++ b/repos/libports/recipes/src/qt5_widgets/hash @@ -1 +1 @@ -2019-05-27 d35aa3482bedec4653c74a146e46c2aef6b34e6f +2019-07-08 88215b6f831207a2f4f5ca7021417370bde1a2a6 diff --git a/repos/libports/recipes/src/qt5_xml/hash b/repos/libports/recipes/src/qt5_xml/hash index 56d8f1faa50..7bbbdb4d829 100644 --- a/repos/libports/recipes/src/qt5_xml/hash +++ b/repos/libports/recipes/src/qt5_xml/hash @@ -1 +1 @@ -2019-05-27 e95694568052c931a052d95c0929b68af9057a95 +2019-07-08 5827adab7b6267ed3738447ec4d3ae408e77f8cf diff --git a/repos/libports/recipes/src/sanitizer/hash b/repos/libports/recipes/src/sanitizer/hash index 58b9a977af0..9eceabaa2d2 100644 --- a/repos/libports/recipes/src/sanitizer/hash +++ b/repos/libports/recipes/src/sanitizer/hash @@ -1 +1 @@ -2019-05-26 327aa406a9fa4d1cb00d6213eada5a0f20e7da28 +2019-07-08 d97a725f89aed4a753236e47aad244112993c07b diff --git a/repos/libports/recipes/src/solo5/hash b/repos/libports/recipes/src/solo5/hash index 8a85dd42b71..dac69cb98e9 100644 --- a/repos/libports/recipes/src/solo5/hash +++ b/repos/libports/recipes/src/solo5/hash @@ -1 +1 @@ -2019-05-26 767106d78c2a3b2191d129b24f31ad6d43d87565 +2019-07-08 e7b47fd57769867ef50f52e92fff8cdb654b7ee6 diff --git a/repos/libports/recipes/src/spark/hash b/repos/libports/recipes/src/spark/hash index 303ca68fdc5..3ec72da22b1 100644 --- a/repos/libports/recipes/src/spark/hash +++ b/repos/libports/recipes/src/spark/hash @@ -1 +1 @@ -2019-06-11 280f77ec556625ecdc07e7441b98d0a4cf411449 +2019-07-08 61e98c3ec81ff59a1ed8ed5bb035c8c9c634f050 diff --git a/repos/libports/recipes/src/stdcxx/hash b/repos/libports/recipes/src/stdcxx/hash index 771b4d79727..c7d0ad234d4 100644 --- a/repos/libports/recipes/src/stdcxx/hash +++ b/repos/libports/recipes/src/stdcxx/hash @@ -1 +1 @@ -2019-05-27 06601e275778ee83adc4d5789894c2434c6a0be8 +2019-07-08 40c0703ef0d4443a83f8a571381741f4e183b51c diff --git a/repos/libports/recipes/src/test-expat/hash b/repos/libports/recipes/src/test-expat/hash index 7f1002945d8..1969c5cf8cd 100644 --- a/repos/libports/recipes/src/test-expat/hash +++ b/repos/libports/recipes/src/test-expat/hash @@ -1 +1 @@ -2019-05-26 3e7ca775481e7244b4b9aea31f1a0c2be1921012 +2019-07-08 161745765cdb1630c5758b1405137ac49c948f3d diff --git a/repos/libports/recipes/src/test-gnatio/hash b/repos/libports/recipes/src/test-gnatio/hash index 99e37f41eb6..8ffc741975b 100644 --- a/repos/libports/recipes/src/test-gnatio/hash +++ b/repos/libports/recipes/src/test-gnatio/hash @@ -1 +1 @@ -2019-05-26 b232763b9903b9d89b3af196c081ee95f7b923dd +2019-07-08 39623ef76139921c1ece41ec937b023944a5139b diff --git a/repos/libports/recipes/src/test-ldso/hash b/repos/libports/recipes/src/test-ldso/hash index 3cf8308f6af..208d90a503a 100644 --- a/repos/libports/recipes/src/test-ldso/hash +++ b/repos/libports/recipes/src/test-ldso/hash @@ -1 +1 @@ -2019-05-26 4378c0cb04784afa468f41d627330af4c7186e34 +2019-07-08 375d953455367add2b602d83e4bb30c11767dda6 diff --git a/repos/libports/recipes/src/test-libc/hash b/repos/libports/recipes/src/test-libc/hash index 55755e1dac2..84edc9741d8 100644 --- a/repos/libports/recipes/src/test-libc/hash +++ b/repos/libports/recipes/src/test-libc/hash @@ -1 +1 @@ -2019-05-28 9fecc9a7510b63347f5b3cb5835f25ca3115dbf3 +2019-07-08 304210419205f8ff6da566ca7bb2cf19a14addba diff --git a/repos/libports/recipes/src/test-libc_connect/hash b/repos/libports/recipes/src/test-libc_connect/hash index 1abfce5687d..a0c3a3f8639 100644 --- a/repos/libports/recipes/src/test-libc_connect/hash +++ b/repos/libports/recipes/src/test-libc_connect/hash @@ -1 +1 @@ -2019-05-26 9b185c5dfbd46d53a98d2d76010c258e3932541a +2019-07-08 b3f5965daf4152e1c35a1205639442ae881d9835 diff --git a/repos/libports/recipes/src/test-libc_counter/hash b/repos/libports/recipes/src/test-libc_counter/hash index 6c8412609be..7a72f23fc5d 100644 --- a/repos/libports/recipes/src/test-libc_counter/hash +++ b/repos/libports/recipes/src/test-libc_counter/hash @@ -1 +1 @@ -2019-05-26 51de14c764a9f70f45f7f8037cf84f7d55b50f8b +2019-07-08 01b688479ca34f21b9e3a11c449b7daec75808fc diff --git a/repos/libports/recipes/src/test-libc_getenv/hash b/repos/libports/recipes/src/test-libc_getenv/hash index d2aee06423b..3afa60ce702 100644 --- a/repos/libports/recipes/src/test-libc_getenv/hash +++ b/repos/libports/recipes/src/test-libc_getenv/hash @@ -1 +1 @@ -2019-05-26 c461f2ac8b9374cb4b5a171a2c6b93a0a3337baf +2019-07-08 fe7a8e1c511a52d58259c159b98dd3c389eab564 diff --git a/repos/libports/recipes/src/test-libc_pipe/hash b/repos/libports/recipes/src/test-libc_pipe/hash index 90655a4ee32..ff6eafd43c1 100644 --- a/repos/libports/recipes/src/test-libc_pipe/hash +++ b/repos/libports/recipes/src/test-libc_pipe/hash @@ -1 +1 @@ -2019-05-26 e49c7bc71767a9c06192771801f77bbb6ee731dd +2019-07-08 6237dd3afe513db2110522d3b1bf13ea6094f1d7 diff --git a/repos/libports/recipes/src/test-libc_vfs/hash b/repos/libports/recipes/src/test-libc_vfs/hash index 9d7ae652df4..cdda7795a37 100644 --- a/repos/libports/recipes/src/test-libc_vfs/hash +++ b/repos/libports/recipes/src/test-libc_vfs/hash @@ -1 +1 @@ -2019-05-26 a1b1eab67da16419868e2a8528ffc61551dd24c1 +2019-07-08 6009db9f11acad5340b253d992d96ab16649b77e diff --git a/repos/libports/recipes/src/test-libc_vfs_block/hash b/repos/libports/recipes/src/test-libc_vfs_block/hash index ec99a4710f1..6ac9c2560d6 100644 --- a/repos/libports/recipes/src/test-libc_vfs_block/hash +++ b/repos/libports/recipes/src/test-libc_vfs_block/hash @@ -1 +1 @@ -2019-05-26 43258ac8b144bc2afa2a9f32c0fd65928cdf8cb9 +2019-07-08 7850c9970a6feb98d1f88b47d5cc13516eb8ec4f diff --git a/repos/libports/recipes/src/test-netty/hash b/repos/libports/recipes/src/test-netty/hash index fd23161082a..c7588603874 100644 --- a/repos/libports/recipes/src/test-netty/hash +++ b/repos/libports/recipes/src/test-netty/hash @@ -1 +1 @@ -2019-05-26 3b1cd48dc0fb73ec624fed3773a4f70703c40d71 +2019-07-08 e646766e25c0956148758b981e7507f3f52d77c9 diff --git a/repos/libports/recipes/src/test-pthread/hash b/repos/libports/recipes/src/test-pthread/hash index 2c8f95f5375..bb32df092fb 100644 --- a/repos/libports/recipes/src/test-pthread/hash +++ b/repos/libports/recipes/src/test-pthread/hash @@ -1 +1 @@ -2019-05-26 d4968c787d9e6b90567ebc4a49f2b216f045587f +2019-07-08 c14bd22201c87453b68ce3cb09f0b77a303a22a0 diff --git a/repos/libports/recipes/src/test-python/hash b/repos/libports/recipes/src/test-python/hash index b6f9702dc53..1a5287b2733 100644 --- a/repos/libports/recipes/src/test-python/hash +++ b/repos/libports/recipes/src/test-python/hash @@ -1 +1 @@ -2019-05-26 f2446de7116f92761023765b6f1670afa5dfa59f +2019-07-08 3ab666375e6c296006bea8b6ddd00af7c0ac3a22 diff --git a/repos/libports/recipes/src/test-qpluginwidget/hash b/repos/libports/recipes/src/test-qpluginwidget/hash index aefc6d7c4d9..bd34d58dc92 100644 --- a/repos/libports/recipes/src/test-qpluginwidget/hash +++ b/repos/libports/recipes/src/test-qpluginwidget/hash @@ -1 +1 @@ -2019-05-27 677c79e89a6085312edb2b71b780ffc4d9772986 +2019-07-08 b3210ae95fb8e3590391dd0a900306d9caa9ab23 diff --git a/repos/libports/recipes/src/test-qt_core/hash b/repos/libports/recipes/src/test-qt_core/hash index 6d1ac59cb2f..97c691b605d 100644 --- a/repos/libports/recipes/src/test-qt_core/hash +++ b/repos/libports/recipes/src/test-qt_core/hash @@ -1 +1 @@ -2019-05-27 86184389c58115105aed508fa7dc7600540dbcda +2019-07-08 4dc9d6438f7b59ac0375605d35758c61e65282dc diff --git a/repos/libports/recipes/src/test-qt_quick/hash b/repos/libports/recipes/src/test-qt_quick/hash index 689f099f604..c5d0b8c6da2 100644 --- a/repos/libports/recipes/src/test-qt_quick/hash +++ b/repos/libports/recipes/src/test-qt_quick/hash @@ -1 +1 @@ -2019-05-27 7b7ad54d5d87ad5dd2b6cc92d8875dc58e3d712c +2019-07-08 2cb882d69b90408afabc4583de53aa8a135c492c diff --git a/repos/libports/recipes/src/test-rust/hash b/repos/libports/recipes/src/test-rust/hash index 667e156ca4a..b37523cdb99 100644 --- a/repos/libports/recipes/src/test-rust/hash +++ b/repos/libports/recipes/src/test-rust/hash @@ -1 +1 @@ -2019-05-26 b303e209eb5930101fcfc0e6b476a65acc6dfc2e +2019-07-08 28d88ddae03452f9edfdd2e2e60d7844f17f2d37 diff --git a/repos/libports/recipes/src/test-solo5/hash b/repos/libports/recipes/src/test-solo5/hash index 5c3464b458c..5f9fe400046 100644 --- a/repos/libports/recipes/src/test-solo5/hash +++ b/repos/libports/recipes/src/test-solo5/hash @@ -1 +1 @@ -2019-05-26 4e1eb85cb35e54e7181f3bb41bed0293e16e6532 +2019-07-08 31f89beba8423bbf3972e9a27bf604e119443f30 diff --git a/repos/libports/recipes/src/test-spark/hash b/repos/libports/recipes/src/test-spark/hash index b7286616101..dda71a1f865 100644 --- a/repos/libports/recipes/src/test-spark/hash +++ b/repos/libports/recipes/src/test-spark/hash @@ -1 +1 @@ -2019-05-26 7711f57928969838e8111874de732a39956266d6 +2019-07-08 0147ac0da52a474b06ec57b2fc2e93fd00812da0 diff --git a/repos/libports/recipes/src/test-spark_exception/hash b/repos/libports/recipes/src/test-spark_exception/hash index 8e4eed6ecfd..ae4288f484f 100644 --- a/repos/libports/recipes/src/test-spark_exception/hash +++ b/repos/libports/recipes/src/test-spark_exception/hash @@ -1 +1 @@ -2019-05-26 d2de5ca2ee7ce91ca8585ee8c6bd58a2737b3ac6 +2019-07-08 ee57de88f5a7ebd1f38f7bc1fc51d585ab77a85b diff --git a/repos/libports/recipes/src/test-spark_secondary_stack/hash b/repos/libports/recipes/src/test-spark_secondary_stack/hash index 5ba36b932d4..4cc21d081b8 100644 --- a/repos/libports/recipes/src/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/src/test-spark_secondary_stack/hash @@ -1 +1 @@ -2019-05-26 39adfaec871897614f8a0d0a486ae7d671aac132 +2019-07-08 ff46408a2484676531b524ff680c2e4ac72deaf7 diff --git a/repos/libports/recipes/src/test-stdcxx/hash b/repos/libports/recipes/src/test-stdcxx/hash index b4ef1793fd7..a65e1fd112f 100644 --- a/repos/libports/recipes/src/test-stdcxx/hash +++ b/repos/libports/recipes/src/test-stdcxx/hash @@ -1 +1 @@ -2019-05-27 5c1c86462b93d04e04954d11befaa58512555e31 +2019-07-08 e63eb14ef32348cee009fae8c9d7fa26c82fd63b diff --git a/repos/libports/recipes/src/test-tcp/hash b/repos/libports/recipes/src/test-tcp/hash index 2a4d5c322d0..94605dcb76c 100644 --- a/repos/libports/recipes/src/test-tcp/hash +++ b/repos/libports/recipes/src/test-tcp/hash @@ -1 +1 @@ -2019-05-26 e770a485c2f4a607ff4abc0a34cdce49755e3281 +2019-07-08 6ce842f77bc2ace57920b2062fbd6fc39c9d8ac6 diff --git a/repos/libports/recipes/src/test-timed_semaphore/hash b/repos/libports/recipes/src/test-timed_semaphore/hash index 3c4ce59d8d6..74e57eef514 100644 --- a/repos/libports/recipes/src/test-timed_semaphore/hash +++ b/repos/libports/recipes/src/test-timed_semaphore/hash @@ -1 +1 @@ -2019-05-26 d8f62db2813a1bc65a74018df6663c31087b595b +2019-07-08 a3914f3fe2d8bb3b845d81f6665ab986410c128a diff --git a/repos/libports/recipes/src/vesa_drv/hash b/repos/libports/recipes/src/vesa_drv/hash index 9f7242e7934..3188a6e2a6d 100644 --- a/repos/libports/recipes/src/vesa_drv/hash +++ b/repos/libports/recipes/src/vesa_drv/hash @@ -1 +1 @@ -2019-05-26 5fd39c9369d5f469fe26ffe5ee58b42a4d9cdbf8 +2019-07-08 74311f011f535b291b042751db1789ebaabaf11a diff --git a/repos/libports/recipes/src/vfs_fatfs/hash b/repos/libports/recipes/src/vfs_fatfs/hash index 425d9211600..ddede3229b7 100644 --- a/repos/libports/recipes/src/vfs_fatfs/hash +++ b/repos/libports/recipes/src/vfs_fatfs/hash @@ -1 +1 @@ -2019-05-26 46981a4e8898118252b77b23bbc91ecc0c1856b2 +2019-07-08 e6e0c5eded527893ad5942fdbd598ea096a5e77e diff --git a/repos/libports/recipes/src/vfs_jitterentropy/hash b/repos/libports/recipes/src/vfs_jitterentropy/hash index b0d47b26802..195c28c75d8 100644 --- a/repos/libports/recipes/src/vfs_jitterentropy/hash +++ b/repos/libports/recipes/src/vfs_jitterentropy/hash @@ -1 +1 @@ -2019-05-26 687d326f14ffbc238cdbb7603613a32b836c055d +2019-07-08 40bd5ef7d3d0359216b8fe3931d91618ccea9cc0 diff --git a/repos/libports/recipes/src/vfs_lwip/hash b/repos/libports/recipes/src/vfs_lwip/hash index a5755b9bed8..05ee1b3420a 100644 --- a/repos/libports/recipes/src/vfs_lwip/hash +++ b/repos/libports/recipes/src/vfs_lwip/hash @@ -1 +1 @@ -2019-06-11 b70750e8be5618949f3073cba0877a07ffddc59e +2019-07-08 7200799ce1d49e78efc172687695c15737874262 diff --git a/repos/libports/recipes/src/zlib/hash b/repos/libports/recipes/src/zlib/hash index 2dceae88c99..e94225d7a35 100644 --- a/repos/libports/recipes/src/zlib/hash +++ b/repos/libports/recipes/src/zlib/hash @@ -1 +1 @@ -2019-05-26 f34be92c94c41271b96ed607dbc30c995ab698d4 +2019-07-08 8544ead2199bdae026b28e251694a81029bcd13c diff --git a/repos/os/recipes/pkg/chroot/hash b/repos/os/recipes/pkg/chroot/hash index 9b2272ff0d8..e2b1c733c7e 100644 --- a/repos/os/recipes/pkg/chroot/hash +++ b/repos/os/recipes/pkg/chroot/hash @@ -1 +1 @@ -2019-05-26 14c2413171738d9930ef95341c4e80b4f7156ad0 +2019-07-08 970f91f662e8c7a09f86d28e4a93f64e4057056e diff --git a/repos/os/recipes/pkg/clipboard/hash b/repos/os/recipes/pkg/clipboard/hash index b72526b8b4d..d046fc5a2ff 100644 --- a/repos/os/recipes/pkg/clipboard/hash +++ b/repos/os/recipes/pkg/clipboard/hash @@ -1 +1 @@ -2019-05-26 6afbe2b309bde3a92b0adb0531fb53e9d40a84ee +2019-07-08 78b29fb4434647279650aecbd626c028846d0510 diff --git a/repos/os/recipes/pkg/drivers_interactive-imx53_qsb/hash b/repos/os/recipes/pkg/drivers_interactive-imx53_qsb/hash index 3cb60139a95..8f9ee236510 100644 --- a/repos/os/recipes/pkg/drivers_interactive-imx53_qsb/hash +++ b/repos/os/recipes/pkg/drivers_interactive-imx53_qsb/hash @@ -1 +1 @@ -2019-05-26 e408e4c956436e8bbd56ab6657bd1ec1a1f9dacd +2019-07-08 63cea66d83d14e949f4ad76d31209a41255ca48c diff --git a/repos/os/recipes/pkg/drivers_interactive-linux/hash b/repos/os/recipes/pkg/drivers_interactive-linux/hash index 4ea8333b1f7..4db8ee4bf46 100644 --- a/repos/os/recipes/pkg/drivers_interactive-linux/hash +++ b/repos/os/recipes/pkg/drivers_interactive-linux/hash @@ -1 +1 @@ -2019-06-11 185683e55f3e30c7e25818e9fe52a31c2c519dce +2019-07-08 581db8fc5ec1c0cedeeabcf3c178c11b731b713f diff --git a/repos/os/recipes/pkg/drivers_interactive-muen/hash b/repos/os/recipes/pkg/drivers_interactive-muen/hash index 5c1f35c9bf0..7e92483d34f 100644 --- a/repos/os/recipes/pkg/drivers_interactive-muen/hash +++ b/repos/os/recipes/pkg/drivers_interactive-muen/hash @@ -1 +1 @@ -2019-05-26 104aa950283955d73db3e5c692ba8c92b24686fd +2019-07-08 6b59bb388ca47bb7cd8ac43d8bd2d0e92c32a436 diff --git a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash index 4c341712578..cff75e37f19 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash @@ -1 +1 @@ -2019-05-26 d153fb1f0557c873495b7598959c156b3309f32c +2019-07-08 d915de1632a99465e699ce8d1b83c7a5f9b09290 diff --git a/repos/os/recipes/pkg/drivers_interactive-pc/hash b/repos/os/recipes/pkg/drivers_interactive-pc/hash index 31c4de950d7..b71fab66f09 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pc/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pc/hash @@ -1 +1 @@ -2019-05-26 91bbfe0fe0d8473486ce82ecc4780dd33a5ba44f +2019-07-08 275858ebc94a95129ce6582e803f6d09cc827dbd diff --git a/repos/os/recipes/pkg/drivers_nic-linux/hash b/repos/os/recipes/pkg/drivers_nic-linux/hash index 68513efae2e..2061c8107a7 100644 --- a/repos/os/recipes/pkg/drivers_nic-linux/hash +++ b/repos/os/recipes/pkg/drivers_nic-linux/hash @@ -1 +1 @@ -2019-06-11 358ca7a5369d5a903d123ca64a78d685b09fd0e6 +2019-07-08 7642c4dfc75ef0f2246dd4686833e50dee4ccde5 diff --git a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash index abfd7e7ef1b..d7e2fa883ef 100644 --- a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash @@ -1 +1 @@ -2019-05-26 49ea2d2bf0afaf1aa413bdc7c232125b9a3e2cc4 +2019-07-08 3f4bc752f8d2b14cb775da60ac79872b5078d63a diff --git a/repos/os/recipes/pkg/drivers_nic-zynq/hash b/repos/os/recipes/pkg/drivers_nic-zynq/hash index b7159569e48..35e9aaeaa4d 100644 --- a/repos/os/recipes/pkg/drivers_nic-zynq/hash +++ b/repos/os/recipes/pkg/drivers_nic-zynq/hash @@ -1 +1 @@ -2019-05-26 74d15eb4715371c45597230cf9b86c83f227f649 +2019-07-08 9cadf3a083e89d322a6b304d3cb2600afe463190 diff --git a/repos/os/recipes/pkg/fs_rom/hash b/repos/os/recipes/pkg/fs_rom/hash index af766d94480..2d6d5bcb5de 100644 --- a/repos/os/recipes/pkg/fs_rom/hash +++ b/repos/os/recipes/pkg/fs_rom/hash @@ -1 +1 @@ -2019-06-11 cb1077875924b87f233dc737ab7b3cc1b21b9d71 +2019-07-08 b23bcc532c04b22d4d82a5306fd3eaad9b96ed9d diff --git a/repos/os/recipes/pkg/mixer/hash b/repos/os/recipes/pkg/mixer/hash index 7e4665648de..b54a760882f 100644 --- a/repos/os/recipes/pkg/mixer/hash +++ b/repos/os/recipes/pkg/mixer/hash @@ -1 +1 @@ -2019-05-26 e8b1dc97187d006d91619f00ecf631c8a4013a85 +2019-07-08 3828371769adabd142ce2e378cad3e4a7b972d77 diff --git a/repos/os/recipes/pkg/nic_router-nat/hash b/repos/os/recipes/pkg/nic_router-nat/hash index c6ff7411222..b461676032e 100644 --- a/repos/os/recipes/pkg/nic_router-nat/hash +++ b/repos/os/recipes/pkg/nic_router-nat/hash @@ -1 +1 @@ -2019-05-27 b1a31fcb967f3b7cde7ed2f71d85961d8f0397b5 +2019-07-08 2740b31d7f97c1ab42f967adcadf98b94ce6e7a9 diff --git a/repos/os/recipes/pkg/nit_focus/hash b/repos/os/recipes/pkg/nit_focus/hash index 42a9e601f99..1a0dd71bd49 100644 --- a/repos/os/recipes/pkg/nit_focus/hash +++ b/repos/os/recipes/pkg/nit_focus/hash @@ -1 +1 @@ -2019-05-26 dbb1a10f7bc80d7d8dd1aec4f875d8b3f47a0b0c +2019-07-08 7077f814c9e2085b7676e7e95a1f87ffcb074b9c diff --git a/repos/os/recipes/pkg/rom_filter/hash b/repos/os/recipes/pkg/rom_filter/hash index 2c09853168c..25349830773 100644 --- a/repos/os/recipes/pkg/rom_filter/hash +++ b/repos/os/recipes/pkg/rom_filter/hash @@ -1 +1 @@ -2019-05-26 7d9e267659d41691a0b56ee413cd9adb34177e3c +2019-07-08 2e06476d03e1b5da5f5eb02bc6f5841edd8dce28 diff --git a/repos/os/recipes/pkg/rom_reporter/hash b/repos/os/recipes/pkg/rom_reporter/hash index 4c8064a0ae7..23b0086f142 100644 --- a/repos/os/recipes/pkg/rom_reporter/hash +++ b/repos/os/recipes/pkg/rom_reporter/hash @@ -1 +1 @@ -2019-05-26 dd85861c653168bcceb443aeaf2532203886fe8b +2019-07-08 691541b7e76989f5862333b3b11644e269a805d8 diff --git a/repos/os/recipes/pkg/test-block/hash b/repos/os/recipes/pkg/test-block/hash index 4c805d97c4c..b5dffae6708 100644 --- a/repos/os/recipes/pkg/test-block/hash +++ b/repos/os/recipes/pkg/test-block/hash @@ -1 +1 @@ -2019-05-26 36121fd4403899ac6bafb89fe51faf469c123a5c +2019-07-08 4e737bf085fd62f63d2c9473a0b41546fd190456 diff --git a/repos/os/recipes/pkg/test-block_cache/hash b/repos/os/recipes/pkg/test-block_cache/hash index b3a7fbf9dff..cc7d0006a6a 100644 --- a/repos/os/recipes/pkg/test-block_cache/hash +++ b/repos/os/recipes/pkg/test-block_cache/hash @@ -1 +1 @@ -2019-05-26 fe8820f178a847ad97799de6579f7515b46a4fa4 +2019-07-08 78921ed4cae0a20fd4aad6c498dbd795c0918130 diff --git a/repos/os/recipes/pkg/test-clipboard/hash b/repos/os/recipes/pkg/test-clipboard/hash index becc2c1234f..25eb4d60e1f 100644 --- a/repos/os/recipes/pkg/test-clipboard/hash +++ b/repos/os/recipes/pkg/test-clipboard/hash @@ -1 +1 @@ -2019-05-26 00bac4e2f65865908ed427d983524527687cfe0c +2019-07-08 fee6b2cbab026c684b0c3560891f4f977e7de4dc diff --git a/repos/os/recipes/pkg/test-dynamic_config/hash b/repos/os/recipes/pkg/test-dynamic_config/hash index d24fd139af1..e2ee36a1fef 100644 --- a/repos/os/recipes/pkg/test-dynamic_config/hash +++ b/repos/os/recipes/pkg/test-dynamic_config/hash @@ -1 +1 @@ -2019-05-26 20a295bdc5f55ec091ee00ca42f77ea30c197633 +2019-07-08 d5fa9cb90ee11d36b9aede74b8a21006eb807c8d diff --git a/repos/os/recipes/pkg/test-dynamic_config_loader/hash b/repos/os/recipes/pkg/test-dynamic_config_loader/hash index 50141c1b27a..2a047b60c5b 100644 --- a/repos/os/recipes/pkg/test-dynamic_config_loader/hash +++ b/repos/os/recipes/pkg/test-dynamic_config_loader/hash @@ -1 +1 @@ -2019-05-26 c65890a91f1f73e9a3d2edc4494edd9dac691311 +2019-07-08 0d17b4cb2c8dd32557aae10a4ce5618e00495e9d diff --git a/repos/os/recipes/pkg/test-dynamic_config_slave/hash b/repos/os/recipes/pkg/test-dynamic_config_slave/hash index d90bcce9f4d..0e3d461827f 100644 --- a/repos/os/recipes/pkg/test-dynamic_config_slave/hash +++ b/repos/os/recipes/pkg/test-dynamic_config_slave/hash @@ -1 +1 @@ -2019-05-26 3c5808587a9dd2f10063fd94e45d57bbe75227ae +2019-07-08 c5a4038978089fc8259bf41033e9bb0e8c63b4af diff --git a/repos/os/recipes/pkg/test-fault_detection/hash b/repos/os/recipes/pkg/test-fault_detection/hash index 149d53f093f..fa5f2d16235 100644 --- a/repos/os/recipes/pkg/test-fault_detection/hash +++ b/repos/os/recipes/pkg/test-fault_detection/hash @@ -1 +1 @@ -2019-06-11 9bddecf645a205cec00cfe4c954c2ca979ac57a1 +2019-07-08 6a477e83f085ab92bfa4e9415ea46d9736fd0cf7 diff --git a/repos/os/recipes/pkg/test-fs_log/hash b/repos/os/recipes/pkg/test-fs_log/hash index 8c003a67568..48997e9e458 100644 --- a/repos/os/recipes/pkg/test-fs_log/hash +++ b/repos/os/recipes/pkg/test-fs_log/hash @@ -1 +1 @@ -2019-06-11 0b7ccb36a39237a3b12ce56327d92ee8305381ba +2019-07-08 7b66bede59ea068b4613a2642dd383e18cc8e899 diff --git a/repos/os/recipes/pkg/test-fs_packet/hash b/repos/os/recipes/pkg/test-fs_packet/hash index 3d0c7faede4..0b1c24d17e4 100644 --- a/repos/os/recipes/pkg/test-fs_packet/hash +++ b/repos/os/recipes/pkg/test-fs_packet/hash @@ -1 +1 @@ -2019-06-11 cbbf2353c5e0bc5a13eea0c00198e6fd12d53aab +2019-07-08 89ccbc0d213d58dd31accda900bbefbfc12b7d6f diff --git a/repos/os/recipes/pkg/test-fs_report/hash b/repos/os/recipes/pkg/test-fs_report/hash index e1a6198fdb7..815b1b77d75 100644 --- a/repos/os/recipes/pkg/test-fs_report/hash +++ b/repos/os/recipes/pkg/test-fs_report/hash @@ -1 +1 @@ -2019-06-11 e57a4d3aac998f97ba42458a97ceba7a19e6c87c +2019-07-08 1410255e09147c1f9d2972924a9432c55f26c333 diff --git a/repos/os/recipes/pkg/test-fs_rom_update/hash b/repos/os/recipes/pkg/test-fs_rom_update/hash index 36a5568b06b..5158b7332d3 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update/hash @@ -1 +1 @@ -2019-06-11 f98f25d652c2e59fdccdc90f2d6da86770517517 +2019-07-08 19a75dc7c7f20f54e6f0029c5bd4c4466c7be9e9 diff --git a/repos/os/recipes/pkg/test-fs_rom_update_fs/hash b/repos/os/recipes/pkg/test-fs_rom_update_fs/hash index a78aaca7ab1..92c50e04434 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update_fs/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update_fs/hash @@ -1 +1 @@ -2019-06-11 910eba742f67eaf505ce4899a0e7f0f898e50311 +2019-07-08 6acd4faaf426f7f3a92f3087cd494be87fe31497 diff --git a/repos/os/recipes/pkg/test-fs_rom_update_ram/hash b/repos/os/recipes/pkg/test-fs_rom_update_ram/hash index 386d60926df..090000a8eb0 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update_ram/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update_ram/hash @@ -1 +1 @@ -2019-06-11 ffc3c1120ee54374c76724ada1a255d74300fa20 +2019-07-08 81d870d7460cdf372184ac10006cfbd2f63b03a2 diff --git a/repos/os/recipes/pkg/test-init/hash b/repos/os/recipes/pkg/test-init/hash index 2552e3fbf51..cafc5b73304 100644 --- a/repos/os/recipes/pkg/test-init/hash +++ b/repos/os/recipes/pkg/test-init/hash @@ -1 +1 @@ -2019-05-26 7271cc7ae8db221a5ad50aeb3ec370b725a8b674 +2019-07-08 2597773d72db9979ac52f478cbb477a5e2ae09c6 diff --git a/repos/os/recipes/pkg/test-init_loop/hash b/repos/os/recipes/pkg/test-init_loop/hash index db76ad76352..9b6211c28e2 100644 --- a/repos/os/recipes/pkg/test-init_loop/hash +++ b/repos/os/recipes/pkg/test-init_loop/hash @@ -1 +1 @@ -2019-05-26 8f2b8c3a9f7aaa8a8b8bd43dd8825c1702ce533c +2019-07-08 408eadd14d5d4ff68096207c800733f0bda1f31a diff --git a/repos/os/recipes/pkg/test-lx_block/hash b/repos/os/recipes/pkg/test-lx_block/hash index 9468fdb35bd..2b3127cb3c5 100644 --- a/repos/os/recipes/pkg/test-lx_block/hash +++ b/repos/os/recipes/pkg/test-lx_block/hash @@ -1 +1 @@ -2019-06-11 13bd8acdc224e54a4d54eadd2110c2024f032957 +2019-07-08 b2202d30336c5df2e74c57c61f28ec78e94ab41d diff --git a/repos/os/recipes/pkg/test-nic_loopback/hash b/repos/os/recipes/pkg/test-nic_loopback/hash index a3445918a27..7d02f8ac82b 100644 --- a/repos/os/recipes/pkg/test-nic_loopback/hash +++ b/repos/os/recipes/pkg/test-nic_loopback/hash @@ -1 +1 @@ -2019-05-28 f5c247a3021cab7b4b681b8f33f1ac3f384009c5 +2019-07-08 ee84f00e6c014e7e5f824f77c251a52f3d8ca79f diff --git a/repos/os/recipes/pkg/test-part_block_gpt/hash b/repos/os/recipes/pkg/test-part_block_gpt/hash index 96468eae2cf..2cb586688d6 100644 --- a/repos/os/recipes/pkg/test-part_block_gpt/hash +++ b/repos/os/recipes/pkg/test-part_block_gpt/hash @@ -1 +1 @@ -2019-05-26 2f164e868eaa7874cfe6bb80165c0f1826af5a9a +2019-07-08 23ae148aeb674d1c39f2be1fc1204ee8a8c6c2f8 diff --git a/repos/os/recipes/pkg/test-part_block_mbr/hash b/repos/os/recipes/pkg/test-part_block_mbr/hash index b3f8e57d002..300fdc00535 100644 --- a/repos/os/recipes/pkg/test-part_block_mbr/hash +++ b/repos/os/recipes/pkg/test-part_block_mbr/hash @@ -1 +1 @@ -2019-05-26 ecc0bc99a5a46ef7dfd384b0a26eb34562578f07 +2019-07-08 310f6ebcab14707eacfa3966fab27f7e1e8cb84a diff --git a/repos/os/recipes/pkg/test-ram_fs_chunk/hash b/repos/os/recipes/pkg/test-ram_fs_chunk/hash index 62d6af0f891..589850a36ce 100644 --- a/repos/os/recipes/pkg/test-ram_fs_chunk/hash +++ b/repos/os/recipes/pkg/test-ram_fs_chunk/hash @@ -1 +1 @@ -2019-05-26 a94187900ac3d10735e97a13e48e088e9430cc7c +2019-07-08 59fe91acb8a3d0d5c66961d659cf701c2276098f diff --git a/repos/os/recipes/pkg/test-read_only_rom/hash b/repos/os/recipes/pkg/test-read_only_rom/hash index db73252c702..effe9a8ca24 100644 --- a/repos/os/recipes/pkg/test-read_only_rom/hash +++ b/repos/os/recipes/pkg/test-read_only_rom/hash @@ -1 +1 @@ -2019-06-11 03c75331f6f43c00f1539da98a9d36f4a25f3c57 +2019-07-08 c8bcbfc92c6020f5531ea49439a6b6d82259509f diff --git a/repos/os/recipes/pkg/test-report_rom/hash b/repos/os/recipes/pkg/test-report_rom/hash index 1f89ff91306..f9fd4de27cf 100644 --- a/repos/os/recipes/pkg/test-report_rom/hash +++ b/repos/os/recipes/pkg/test-report_rom/hash @@ -1 +1 @@ -2019-05-26 8646a35338a80165981121e2a40bc58499e0372c +2019-07-08 e7893b3a246a031d629517887759f4d7b7a38003 diff --git a/repos/os/recipes/pkg/test-resource_request/hash b/repos/os/recipes/pkg/test-resource_request/hash index ad9eed8ac14..fbc9bc0a91f 100644 --- a/repos/os/recipes/pkg/test-resource_request/hash +++ b/repos/os/recipes/pkg/test-resource_request/hash @@ -1 +1 @@ -2019-05-26 24d1dd8ceb22d77ed56fb91c9093d2388c40caa3 +2019-07-08 917fdf16030f3c116ff754aca6fb5aa84bd1defb diff --git a/repos/os/recipes/pkg/test-resource_yield/hash b/repos/os/recipes/pkg/test-resource_yield/hash index fa8b4074e60..20f5a94ede9 100644 --- a/repos/os/recipes/pkg/test-resource_yield/hash +++ b/repos/os/recipes/pkg/test-resource_yield/hash @@ -1 +1 @@ -2019-05-26 ab7f21b36ddbf297cb8f0d145b1fe075fbd9eaa4 +2019-07-08 5fd98c9c425b09fccb203e7c6e8f0e1c92eee064 diff --git a/repos/os/recipes/pkg/test-rom_block/hash b/repos/os/recipes/pkg/test-rom_block/hash index 763fae24f72..5470a6a7d8c 100644 --- a/repos/os/recipes/pkg/test-rom_block/hash +++ b/repos/os/recipes/pkg/test-rom_block/hash @@ -1 +1 @@ -2019-05-26 a3bf71746b84ea7614c7891030080511459814d7 +2019-07-08 26869a2a11b5b6bbe97434eb9de7d1c838475031 diff --git a/repos/os/recipes/pkg/test-rom_filter/hash b/repos/os/recipes/pkg/test-rom_filter/hash index 8c8e52ab917..056ba649ab0 100644 --- a/repos/os/recipes/pkg/test-rom_filter/hash +++ b/repos/os/recipes/pkg/test-rom_filter/hash @@ -1 +1 @@ -2019-05-26 2ac1623813f8460c306be588d075c0b1aba60a1d +2019-07-08 507cf99489d6208da018c81e4317493d7c136cd3 diff --git a/repos/os/recipes/pkg/test-rtc/hash b/repos/os/recipes/pkg/test-rtc/hash index fc1c54c55df..b792f3f18df 100644 --- a/repos/os/recipes/pkg/test-rtc/hash +++ b/repos/os/recipes/pkg/test-rtc/hash @@ -1 +1 @@ -2019-05-26 a59d0e95fe00b5e381f9d951d43330e4289bab46 +2019-07-08 0cf75315b5f5b4cd9bd28a9fbb6b86b2fde134d4 diff --git a/repos/os/recipes/pkg/test-signal/hash b/repos/os/recipes/pkg/test-signal/hash index 1d3be6a2bda..0abe45a7147 100644 --- a/repos/os/recipes/pkg/test-signal/hash +++ b/repos/os/recipes/pkg/test-signal/hash @@ -1 +1 @@ -2019-05-26 9b422a656ca357ab7a453e72a77f2968d60d1cf3 +2019-07-08 14f712c2ae52872b0739e5f29728a6e5acdce2ba diff --git a/repos/os/recipes/pkg/test-slab/hash b/repos/os/recipes/pkg/test-slab/hash index 1e3e3245865..73b6a3e9be4 100644 --- a/repos/os/recipes/pkg/test-slab/hash +++ b/repos/os/recipes/pkg/test-slab/hash @@ -1 +1 @@ -2019-05-26 43973871f8ba71bba418411c1ee82ec53453079f +2019-07-08 75f492e32e2fcf1ba8551f896f719d19018fe057 diff --git a/repos/os/recipes/pkg/test-terminal_crosslink/hash b/repos/os/recipes/pkg/test-terminal_crosslink/hash index 4d2c63c912c..f8a4dccb8ed 100644 --- a/repos/os/recipes/pkg/test-terminal_crosslink/hash +++ b/repos/os/recipes/pkg/test-terminal_crosslink/hash @@ -1 +1 @@ -2019-05-26 cf091e5e19cf5df0b2ba70f3f77060aeaf767e15 +2019-07-08 f1f6c1089dd727d63df2f6a61c6ddd31ca26a9c8 diff --git a/repos/os/recipes/pkg/test-trace/hash b/repos/os/recipes/pkg/test-trace/hash index cda4586f8d8..8b6fac900b8 100644 --- a/repos/os/recipes/pkg/test-trace/hash +++ b/repos/os/recipes/pkg/test-trace/hash @@ -1 +1 @@ -2019-05-26 c4a7c1aef67bea2a87793432dc028cef9c8e8e59 +2019-07-08 12f04fa5a7ce423c5efc803b64257b1f381ae039 diff --git a/repos/os/recipes/pkg/test-trace_logger/hash b/repos/os/recipes/pkg/test-trace_logger/hash index 663981c89db..24379bd9f34 100644 --- a/repos/os/recipes/pkg/test-trace_logger/hash +++ b/repos/os/recipes/pkg/test-trace_logger/hash @@ -1 +1 @@ -2019-05-26 6de12e96ce8ffcaefa70f2627e2908215897c5fc +2019-07-08 785569a7568cf501ec7f8643cacbc50a68980c93 diff --git a/repos/os/recipes/pkg/test-utf8/hash b/repos/os/recipes/pkg/test-utf8/hash index 85d28a9a7e1..f1231d16a9e 100644 --- a/repos/os/recipes/pkg/test-utf8/hash +++ b/repos/os/recipes/pkg/test-utf8/hash @@ -1 +1 @@ -2019-05-26 ce67efbdb63a43e6fe49b6e27b43a6bcd7f0b05d +2019-07-08 b73faebe9f4572cccf9b097d2ceb54d0c6b58632 diff --git a/repos/os/recipes/pkg/test-vfs_stress_fs/hash b/repos/os/recipes/pkg/test-vfs_stress_fs/hash index 429f6e72f59..8e34ba45049 100644 --- a/repos/os/recipes/pkg/test-vfs_stress_fs/hash +++ b/repos/os/recipes/pkg/test-vfs_stress_fs/hash @@ -1 +1 @@ -2019-06-11 a26faf59b156419b5de77586269c4ac3ddcaed76 +2019-07-08 14e25e66bf6cf1980a8ae58866fa89c8cb96e41a diff --git a/repos/os/recipes/pkg/test-vfs_stress_ram/hash b/repos/os/recipes/pkg/test-vfs_stress_ram/hash index f8251306e4f..7c39b829ab2 100644 --- a/repos/os/recipes/pkg/test-vfs_stress_ram/hash +++ b/repos/os/recipes/pkg/test-vfs_stress_ram/hash @@ -1 +1 @@ -2019-06-11 566936d38f4303fc0f4a73dfe98c3651d8a60ff7 +2019-07-08 cd1530dba3f42472955d82e8f267c6454136bcce diff --git a/repos/os/recipes/pkg/test-weak_ptr/hash b/repos/os/recipes/pkg/test-weak_ptr/hash index 0748aab10a6..495716268d7 100644 --- a/repos/os/recipes/pkg/test-weak_ptr/hash +++ b/repos/os/recipes/pkg/test-weak_ptr/hash @@ -1 +1 @@ -2019-05-26 2976e762f8c230f522829fc3e63f9f8de1f9f982 +2019-07-08 5b89fea9fefdf8093d80a52aed4922b363f155d1 diff --git a/repos/os/recipes/src/acpi_drv/hash b/repos/os/recipes/src/acpi_drv/hash index 3a21cd3ec07..3e109598fdc 100644 --- a/repos/os/recipes/src/acpi_drv/hash +++ b/repos/os/recipes/src/acpi_drv/hash @@ -1 +1 @@ -2019-05-26 d1976d0979499ceb63732358497ad9429d35b261 +2019-07-08 58de551e0c3f96f8835e7fc8e790dce91ced96ec diff --git a/repos/os/recipes/src/ahci_drv/hash b/repos/os/recipes/src/ahci_drv/hash index 1f0e7dc7c6c..360575bb509 100644 --- a/repos/os/recipes/src/ahci_drv/hash +++ b/repos/os/recipes/src/ahci_drv/hash @@ -1 +1 @@ -2019-05-26 cd84a3ccdc768f4af8f4a434bae6158db27e37e4 +2019-07-08 68a5c26fd94e4b6b8aa701b2f5d1701740d59479 diff --git a/repos/os/recipes/src/block_cache/hash b/repos/os/recipes/src/block_cache/hash index 718571f5d9b..9a989912e92 100644 --- a/repos/os/recipes/src/block_cache/hash +++ b/repos/os/recipes/src/block_cache/hash @@ -1 +1 @@ -2019-05-26 cebffc5716d531171a5cf0ce5846eb2724464be3 +2019-07-08 a0a10aac265b84a063138483cf902e25ea995d41 diff --git a/repos/os/recipes/src/boot_fb_drv/hash b/repos/os/recipes/src/boot_fb_drv/hash index 8f304fe25e1..b8d3e914e67 100644 --- a/repos/os/recipes/src/boot_fb_drv/hash +++ b/repos/os/recipes/src/boot_fb_drv/hash @@ -1 +1 @@ -2019-05-26 0d46670a3e6d680ce5456c71f0b58330d9055adf +2019-07-08 944e00e10405e83292a2941216a051b23a3a58df diff --git a/repos/os/recipes/src/cached_fs_rom/hash b/repos/os/recipes/src/cached_fs_rom/hash index c4bc1e8cd07..6b24181c798 100644 --- a/repos/os/recipes/src/cached_fs_rom/hash +++ b/repos/os/recipes/src/cached_fs_rom/hash @@ -1 +1 @@ -2019-05-26 a087530eff645147152385c05e11e7678e647a11 +2019-07-08 c2f0dec8d7bea8a179300864d3458681308956cb diff --git a/repos/os/recipes/src/chroot/hash b/repos/os/recipes/src/chroot/hash index 1065b9ec37b..22824b9f070 100644 --- a/repos/os/recipes/src/chroot/hash +++ b/repos/os/recipes/src/chroot/hash @@ -1 +1 @@ -2019-05-26 7d97b47d742f2031ca6217ac204084ee1ec49c2c +2019-07-08 9874cf8ddcd42482fa7d4f5af694c2554d212164 diff --git a/repos/os/recipes/src/clipboard/hash b/repos/os/recipes/src/clipboard/hash index 17fda572e51..50353b5bf25 100644 --- a/repos/os/recipes/src/clipboard/hash +++ b/repos/os/recipes/src/clipboard/hash @@ -1 +1 @@ -2019-05-26 389499bee49d8504550b54db864da1c681c6c9e6 +2019-07-08 05587bc85808fc4c99710a9f07b24aa0e923931b diff --git a/repos/os/recipes/src/cpu_burner/hash b/repos/os/recipes/src/cpu_burner/hash index fce34b91fba..210b1a086d2 100644 --- a/repos/os/recipes/src/cpu_burner/hash +++ b/repos/os/recipes/src/cpu_burner/hash @@ -1 +1 @@ -2019-05-26 97e85984f12d192f799f030c42acf74e8fac1d70 +2019-07-08 7f8453156daf32c08913ad1f7cd35ade8c927e8a diff --git a/repos/os/recipes/src/dummy/hash b/repos/os/recipes/src/dummy/hash index 76e0640ca71..ff2b023e7d7 100644 --- a/repos/os/recipes/src/dummy/hash +++ b/repos/os/recipes/src/dummy/hash @@ -1 +1 @@ -2019-05-26 1910d2487f36606a0ffa670974b4ec8a3ef7c8f3 +2019-07-08 72a9a4af3033919437e7a72510e08a33c2f43416 diff --git a/repos/os/recipes/src/dynamic_rom/hash b/repos/os/recipes/src/dynamic_rom/hash index df4154d6d78..5009bb63f38 100644 --- a/repos/os/recipes/src/dynamic_rom/hash +++ b/repos/os/recipes/src/dynamic_rom/hash @@ -1 +1 @@ -2019-05-26 f2b431ff296f6a726deffa72e481cff157af464b +2019-07-08 59fccfd4051168be0f0674c0b0e715db78724afd diff --git a/repos/os/recipes/src/fb_sdl/hash b/repos/os/recipes/src/fb_sdl/hash index b0ffc2b1503..3449331f76e 100644 --- a/repos/os/recipes/src/fb_sdl/hash +++ b/repos/os/recipes/src/fb_sdl/hash @@ -1 +1 @@ -2019-06-11 2d70cfb5f5273e8cc062db560a2b2f907cabe083 +2019-07-08 4163b84a7f7cd0c63e40875549a76191764e68b1 diff --git a/repos/os/recipes/src/fs_log/hash b/repos/os/recipes/src/fs_log/hash index 33387565bf2..c1806a15bbf 100644 --- a/repos/os/recipes/src/fs_log/hash +++ b/repos/os/recipes/src/fs_log/hash @@ -1 +1 @@ -2019-05-26 b8eb3074b4f414d8d3579c7f1a6dd29697b7ddf8 +2019-07-08 486df680bc700acd2fdce77ed1f23878e7902f8f diff --git a/repos/os/recipes/src/fs_report/hash b/repos/os/recipes/src/fs_report/hash index aa68b25bc71..fb084a11659 100644 --- a/repos/os/recipes/src/fs_report/hash +++ b/repos/os/recipes/src/fs_report/hash @@ -1 +1 @@ -2019-05-26 a5c42318701b742ac5980936886de961567757f3 +2019-07-08 4cffd4369f05f5cd98b329f08395914cc4587e68 diff --git a/repos/os/recipes/src/fs_rom/hash b/repos/os/recipes/src/fs_rom/hash index 8f41edc7f7c..b6390e3fd6c 100644 --- a/repos/os/recipes/src/fs_rom/hash +++ b/repos/os/recipes/src/fs_rom/hash @@ -1 +1 @@ -2019-06-11 c57e4f9ae5f58339540ac2896546bee35344c1d7 +2019-07-08 9e8715ddb7b376ed364507054803d4be9a5a157d diff --git a/repos/os/recipes/src/global_keys_handler/hash b/repos/os/recipes/src/global_keys_handler/hash index 49845532b37..8f265a8f543 100644 --- a/repos/os/recipes/src/global_keys_handler/hash +++ b/repos/os/recipes/src/global_keys_handler/hash @@ -1 +1 @@ -2019-05-26 137495431d6a3bbd42dd87b5ee499c42fa16e692 +2019-07-08 42bee8b297a903562b4f200220161e6ab2bfb47f diff --git a/repos/os/recipes/src/imx53_qsb_drivers/hash b/repos/os/recipes/src/imx53_qsb_drivers/hash index e5d2808076c..e78d57185d9 100644 --- a/repos/os/recipes/src/imx53_qsb_drivers/hash +++ b/repos/os/recipes/src/imx53_qsb_drivers/hash @@ -1 +1 @@ -2019-05-26 e8ca450ea31f8d9840a893e6eb7e017e21cbf855 +2019-07-08 827e77a7bf0608c4cd7a65396dd9198e21247ad1 diff --git a/repos/os/recipes/src/init/hash b/repos/os/recipes/src/init/hash index eb4b7c7a8a9..3df82d47cb1 100644 --- a/repos/os/recipes/src/init/hash +++ b/repos/os/recipes/src/init/hash @@ -1 +1 @@ -2019-05-26 b934213d4ccc6273193a93227cff7df73a9abf22 +2019-07-08 e2763f1e838e404f2abaf54b67e420901bbc2f23 diff --git a/repos/os/recipes/src/input_filter/hash b/repos/os/recipes/src/input_filter/hash index 9ba307c3e37..9be4fb91019 100644 --- a/repos/os/recipes/src/input_filter/hash +++ b/repos/os/recipes/src/input_filter/hash @@ -1 +1 @@ -2019-05-26 3e4108ee8e7f98b70bbc883e9529fc8509bb56bc +2019-07-08 4e2902608b7d7519a5d253011dd9592c04ba9391 diff --git a/repos/os/recipes/src/lan9118_nic_drv/hash b/repos/os/recipes/src/lan9118_nic_drv/hash index 1f2748689f2..b846e10de12 100644 --- a/repos/os/recipes/src/lan9118_nic_drv/hash +++ b/repos/os/recipes/src/lan9118_nic_drv/hash @@ -1 +1 @@ -2019-05-26 77ea87aca10258a7e2a2df3e8837afd277d65aa1 +2019-07-08 cda2eab6f999af94bd07b6d631bc0742cedad61e diff --git a/repos/os/recipes/src/linux_nic_drv/hash b/repos/os/recipes/src/linux_nic_drv/hash index a01af3e84fe..1f7134959f6 100644 --- a/repos/os/recipes/src/linux_nic_drv/hash +++ b/repos/os/recipes/src/linux_nic_drv/hash @@ -1 +1 @@ -2019-06-11 7a6de34a5ffa306134ea7064f2f39f598989d8cc +2019-07-08 b34ecf65f47285f47e05497db28ab3c64d2502a0 diff --git a/repos/os/recipes/src/loader/hash b/repos/os/recipes/src/loader/hash index e2d964d52c0..0b3b75821f7 100644 --- a/repos/os/recipes/src/loader/hash +++ b/repos/os/recipes/src/loader/hash @@ -1 +1 @@ -2019-05-26 492fe894805743615b9da9fc96a6e43ff08c6c92 +2019-07-08 4e37c3e12ce96b5758b58921766c72ca0b32cdad diff --git a/repos/os/recipes/src/log_core/hash b/repos/os/recipes/src/log_core/hash index 46387c34b59..538089f4fa7 100644 --- a/repos/os/recipes/src/log_core/hash +++ b/repos/os/recipes/src/log_core/hash @@ -1 +1 @@ -2019-05-26 d95a5f881766ca855381be78597d585bcd52d062 +2019-07-08 1548d51c744c59ff784e7ba3079ffdc8a1479231 diff --git a/repos/os/recipes/src/log_terminal/hash b/repos/os/recipes/src/log_terminal/hash index 82ddcd1591f..3505a62b091 100644 --- a/repos/os/recipes/src/log_terminal/hash +++ b/repos/os/recipes/src/log_terminal/hash @@ -1 +1 @@ -2019-05-26 37dba75815a33dcc77be518c8eb6f44e289fa62c +2019-07-08 64e5cdbb2603290556bec20ff375382c1e0311f8 diff --git a/repos/os/recipes/src/lx_block/hash b/repos/os/recipes/src/lx_block/hash index 5bb69d8a186..97cc88bde98 100644 --- a/repos/os/recipes/src/lx_block/hash +++ b/repos/os/recipes/src/lx_block/hash @@ -1 +1 @@ -2019-06-11 48026b38b07b8c5db4300929cf6b072a4a8b32ba +2019-07-08 2b0277116b40c851128bece5fc4a0a360e10536a diff --git a/repos/os/recipes/src/mixer/hash b/repos/os/recipes/src/mixer/hash index 38edaee2f13..27655483b76 100644 --- a/repos/os/recipes/src/mixer/hash +++ b/repos/os/recipes/src/mixer/hash @@ -1 +1 @@ -2019-05-26 e2985f24acf9abaa623c0f42ee2475bca22ff9f5 +2019-07-08 2ee14621def02803f59dbe885eda47b0676518e7 diff --git a/repos/os/recipes/src/nic_bridge/hash b/repos/os/recipes/src/nic_bridge/hash index 952c215e6d3..d826b3b00c3 100644 --- a/repos/os/recipes/src/nic_bridge/hash +++ b/repos/os/recipes/src/nic_bridge/hash @@ -1 +1 @@ -2019-05-26 f77fe0d0fe1cce9020f8c5aef8739a891d0c638f +2019-07-08 bc7289c4643b7bd2419029994aa22921653f359b diff --git a/repos/os/recipes/src/nic_loopback/hash b/repos/os/recipes/src/nic_loopback/hash index e789a5c6574..8d0568edff7 100644 --- a/repos/os/recipes/src/nic_loopback/hash +++ b/repos/os/recipes/src/nic_loopback/hash @@ -1 +1 @@ -2019-05-26 482115aa0dca92682f752a9261870e932f9315a1 +2019-07-08 73b1303cc74074577fbb6229642326a1f0f483ec diff --git a/repos/os/recipes/src/nic_router/hash b/repos/os/recipes/src/nic_router/hash index dc55489ed1e..1f365329f11 100644 --- a/repos/os/recipes/src/nic_router/hash +++ b/repos/os/recipes/src/nic_router/hash @@ -1 +1 @@ -2019-05-27 a1a636f4a652659ea6a13feedc3136965f641001 +2019-07-08 13edbacbcbc3344288922d3c6596b395eef11363 diff --git a/repos/os/recipes/src/nit_fb/hash b/repos/os/recipes/src/nit_fb/hash index 83d8f3b7e2f..2a3dd53734d 100644 --- a/repos/os/recipes/src/nit_fb/hash +++ b/repos/os/recipes/src/nit_fb/hash @@ -1 +1 @@ -2019-05-26 bf082d81873b77084cff11c0f5015b6041c835cb +2019-07-08 f4162a41e7c4ee336c293d0ef18414b40e77f0dd diff --git a/repos/os/recipes/src/nit_focus/hash b/repos/os/recipes/src/nit_focus/hash index 14b1ecb4981..b1d12b9eadb 100644 --- a/repos/os/recipes/src/nit_focus/hash +++ b/repos/os/recipes/src/nit_focus/hash @@ -1 +1 @@ -2019-05-26 dcc6749b76ff15224c2e9ecf5edfb6e117bb2844 +2019-07-08 14c3f2d40827cc8286e73d07b16a51ab9e4a9249 diff --git a/repos/os/recipes/src/nitpicker/hash b/repos/os/recipes/src/nitpicker/hash index 636afcf23bf..ab2bd5a8b11 100644 --- a/repos/os/recipes/src/nitpicker/hash +++ b/repos/os/recipes/src/nitpicker/hash @@ -1 +1 @@ -2019-05-26 9fe0ba36c2acefdf3581fcd23b9bfa2b006f6c65 +2019-07-08 de605a5a5cc21619e775adc3c8b924b886160357 diff --git a/repos/os/recipes/src/nvme_drv/hash b/repos/os/recipes/src/nvme_drv/hash index 80007682d87..56d3054a6af 100644 --- a/repos/os/recipes/src/nvme_drv/hash +++ b/repos/os/recipes/src/nvme_drv/hash @@ -1 +1 @@ -2019-06-11 6060df6d87fab01e579d3e3efb210f66588f33a9 +2019-07-08 cf6ebc079102b8f7c2fc32b64133669ce34f11d1 diff --git a/repos/os/recipes/src/part_block/hash b/repos/os/recipes/src/part_block/hash index d00be2fc6fc..bafc6bc2261 100644 --- a/repos/os/recipes/src/part_block/hash +++ b/repos/os/recipes/src/part_block/hash @@ -1 +1 @@ -2019-05-26 5cf2c2af89190a92ad42e7af7bad4de86be152f6 +2019-07-08 ea4165422251da0486e183f63f040dd8a2381fdb diff --git a/repos/os/recipes/src/pbxa9_drivers/hash b/repos/os/recipes/src/pbxa9_drivers/hash index 341c050c606..8d8b37f3d61 100644 --- a/repos/os/recipes/src/pbxa9_drivers/hash +++ b/repos/os/recipes/src/pbxa9_drivers/hash @@ -1 +1 @@ -2019-05-26 10bae1253b0897af5c4f999bca0c8e6be6635d27 +2019-07-08 e481b9e320ed5f493cb7127ddaeab7a5cb11a86c diff --git a/repos/os/recipes/src/platform_drv/hash b/repos/os/recipes/src/platform_drv/hash index 09499c5562b..8e6a1641b4b 100644 --- a/repos/os/recipes/src/platform_drv/hash +++ b/repos/os/recipes/src/platform_drv/hash @@ -1 +1 @@ -2019-05-26 0833e7d7311c8d896b1bae073337df3fb1242092 +2019-07-08 8d84e7764a7cebaccf7f6433c3ad54f20c4503d3 diff --git a/repos/os/recipes/src/ps2_drv/hash b/repos/os/recipes/src/ps2_drv/hash index 773ce030a80..3a0c0db81a0 100644 --- a/repos/os/recipes/src/ps2_drv/hash +++ b/repos/os/recipes/src/ps2_drv/hash @@ -1 +1 @@ -2019-05-26 131200d4c61c497ec15f8e959ca9f992badd31c6 +2019-07-08 61230e78e9bb919567bba5aa2ad92e2e74eb3b0c diff --git a/repos/os/recipes/src/ram_block/hash b/repos/os/recipes/src/ram_block/hash index 4349133436a..af21b712e64 100644 --- a/repos/os/recipes/src/ram_block/hash +++ b/repos/os/recipes/src/ram_block/hash @@ -1 +1 @@ -2019-05-26 7f7c829d389e726fd60cf6bceb39692dc01e0284 +2019-07-08 59f776d6fcc5c180ed61f1d58ce668c3dff3854d diff --git a/repos/os/recipes/src/ram_fs/hash b/repos/os/recipes/src/ram_fs/hash index 505daf1bbdd..1aa761acc09 100644 --- a/repos/os/recipes/src/ram_fs/hash +++ b/repos/os/recipes/src/ram_fs/hash @@ -1 +1 @@ -2019-05-26 177082f0c37eadb85d81547c1cc71a5df71df53d +2019-07-08 2d2b4cdd3a6b52af29a7681faad4c7c69816e3ce diff --git a/repos/os/recipes/src/report_rom/hash b/repos/os/recipes/src/report_rom/hash index 81193cd24ef..6270e528825 100644 --- a/repos/os/recipes/src/report_rom/hash +++ b/repos/os/recipes/src/report_rom/hash @@ -1 +1 @@ -2019-05-26 6fe03f65d159d92510b168546a279bc47e38fbe7 +2019-07-08 dfd0cf4237b5ee9622dbb3d25202dd9dcd710d2c diff --git a/repos/os/recipes/src/rom_block/hash b/repos/os/recipes/src/rom_block/hash index faf0b1dfd81..2766f383006 100644 --- a/repos/os/recipes/src/rom_block/hash +++ b/repos/os/recipes/src/rom_block/hash @@ -1 +1 @@ -2019-05-26 15cfabbc3e4beca8d81cebad75da59d0ffcf7cfe +2019-07-08 299dab591156af2c8406e2cf64035324af9a5cef diff --git a/repos/os/recipes/src/rom_filter/hash b/repos/os/recipes/src/rom_filter/hash index 04533f17ea6..8edea3f35a2 100644 --- a/repos/os/recipes/src/rom_filter/hash +++ b/repos/os/recipes/src/rom_filter/hash @@ -1 +1 @@ -2019-05-26 2fd8ecab984c2288a63a5f35f9c0dee82c61b027 +2019-07-08 c74df86f9c8588e737918c177cc737b8d41b215d diff --git a/repos/os/recipes/src/rom_logger/hash b/repos/os/recipes/src/rom_logger/hash index 12b3fbb26f8..e81889ef8e3 100644 --- a/repos/os/recipes/src/rom_logger/hash +++ b/repos/os/recipes/src/rom_logger/hash @@ -1 +1 @@ -2019-05-26 3f37c8addb44ce09641fb462246e1d3aefc1e658 +2019-07-08 23695840a29326efa5a559c0db557e2fffb828e1 diff --git a/repos/os/recipes/src/rom_reporter/hash b/repos/os/recipes/src/rom_reporter/hash index c7299f9599c..190fc8a1fae 100644 --- a/repos/os/recipes/src/rom_reporter/hash +++ b/repos/os/recipes/src/rom_reporter/hash @@ -1 +1 @@ -2019-05-26 d77aaa10a0cc967a495ea28ade2e1e0a1f2b366c +2019-07-08 6f82bf4282d79a849e87fc65629164626dc5a43e diff --git a/repos/os/recipes/src/rom_to_file/hash b/repos/os/recipes/src/rom_to_file/hash index 1c95c3e5858..b78bcd00546 100644 --- a/repos/os/recipes/src/rom_to_file/hash +++ b/repos/os/recipes/src/rom_to_file/hash @@ -1 +1 @@ -2019-05-26 e81eadd19b6b5f94d77828d46527fd2d6bf988fa +2019-07-08 990348dd1cef9ac595f5a718021309b188979897 diff --git a/repos/os/recipes/src/rpi_fb_drv/hash b/repos/os/recipes/src/rpi_fb_drv/hash index bbfc453e395..ee858d398fa 100644 --- a/repos/os/recipes/src/rpi_fb_drv/hash +++ b/repos/os/recipes/src/rpi_fb_drv/hash @@ -1 +1 @@ -2019-05-26 f5f89288966391009595bbc10385571a538f7dd6 +2019-07-08 484cff6960fc03c0032147e3b3bf4e81e7fc0407 diff --git a/repos/os/recipes/src/rtc_drv/hash b/repos/os/recipes/src/rtc_drv/hash index 4303a882cd2..6c12353b144 100644 --- a/repos/os/recipes/src/rtc_drv/hash +++ b/repos/os/recipes/src/rtc_drv/hash @@ -1 +1 @@ -2019-05-26 12b613dd3a7fa345fb7d82446520d18136187c8d +2019-07-08 63162b412d1071cae4ab301909a13d0003f2886f diff --git a/repos/os/recipes/src/sequence/hash b/repos/os/recipes/src/sequence/hash index bf639d5ac48..86e4cebabb6 100644 --- a/repos/os/recipes/src/sequence/hash +++ b/repos/os/recipes/src/sequence/hash @@ -1 +1 @@ -2019-05-26 e9b84582a1629ed4ce58569b53e1a3729390299a +2019-07-08 9d58ee5b463bb7f68434683183f4afd0076ce70f diff --git a/repos/os/recipes/src/terminal_crosslink/hash b/repos/os/recipes/src/terminal_crosslink/hash index 076996ae0b3..731777054e4 100644 --- a/repos/os/recipes/src/terminal_crosslink/hash +++ b/repos/os/recipes/src/terminal_crosslink/hash @@ -1 +1 @@ -2019-05-26 6c18329dcb75c9d4de5bd124f3c115587bca9a5e +2019-07-08 64b6caca1f2afd1d11a4a4b965142e76312b4a53 diff --git a/repos/os/recipes/src/terminal_log/hash b/repos/os/recipes/src/terminal_log/hash index 08d408f8574..ad4ca2aa51b 100644 --- a/repos/os/recipes/src/terminal_log/hash +++ b/repos/os/recipes/src/terminal_log/hash @@ -1 +1 @@ -2019-05-26 02770f8983d33247fbe2f0565b47d9987cc9aa66 +2019-07-08 1843a95c39082d13abbd08339ba967c7e5f7b9a5 diff --git a/repos/os/recipes/src/test-block/hash b/repos/os/recipes/src/test-block/hash index 7003b613b0f..87401e37bdb 100644 --- a/repos/os/recipes/src/test-block/hash +++ b/repos/os/recipes/src/test-block/hash @@ -1 +1 @@ -2019-05-26 a91e654055a61bed53c01d6fb82d62e9c467ad1c +2019-07-08 cde02dd5379835f2399683a0e8b8469a9e2b162b diff --git a/repos/os/recipes/src/test-bomb/hash b/repos/os/recipes/src/test-bomb/hash index fe52a3e0837..a94aeac8c26 100644 --- a/repos/os/recipes/src/test-bomb/hash +++ b/repos/os/recipes/src/test-bomb/hash @@ -1 +1 @@ -2019-05-26 0139fdb3d18d4db4717e30b768b60c399901f31c +2019-07-08 1f0fa80ecaf1d94f528fdd4186e2e18897d4b577 diff --git a/repos/os/recipes/src/test-clipboard/hash b/repos/os/recipes/src/test-clipboard/hash index e696cbcedd9..423df0990f9 100644 --- a/repos/os/recipes/src/test-clipboard/hash +++ b/repos/os/recipes/src/test-clipboard/hash @@ -1 +1 @@ -2019-05-26 0c8474441709cc0248e25114d413048a9c4326cf +2019-07-08 9e8be2e32925184606191a40232eaeb853b670b3 diff --git a/repos/os/recipes/src/test-dynamic_config/hash b/repos/os/recipes/src/test-dynamic_config/hash index ea6d82e88a5..603505057c6 100644 --- a/repos/os/recipes/src/test-dynamic_config/hash +++ b/repos/os/recipes/src/test-dynamic_config/hash @@ -1 +1 @@ -2019-05-26 ac2ffedbaa6a9641777feb855f6b9f61eba40b54 +2019-07-08 d25b0d4c54df204492d2a57a3d765f8c8f0da673 diff --git a/repos/os/recipes/src/test-fault_detection/hash b/repos/os/recipes/src/test-fault_detection/hash index 77c95c8858f..ff379b50ddf 100644 --- a/repos/os/recipes/src/test-fault_detection/hash +++ b/repos/os/recipes/src/test-fault_detection/hash @@ -1 +1 @@ -2019-05-26 b0fadba5cc4dd97e1d9bb6ba3796a07707a618f4 +2019-07-08 97481d232e679ffdd97f7695abbab132bb003cc1 diff --git a/repos/os/recipes/src/test-fs_packet/hash b/repos/os/recipes/src/test-fs_packet/hash index 5f44bca003f..fea649b6402 100644 --- a/repos/os/recipes/src/test-fs_packet/hash +++ b/repos/os/recipes/src/test-fs_packet/hash @@ -1 +1 @@ -2019-05-26 ae41f1599f11df09d88c05544092f488d5e9af2b +2019-07-08 5aedb82b013edcf5a64c0b14c1d1950b07e30efc diff --git a/repos/os/recipes/src/test-fs_report/hash b/repos/os/recipes/src/test-fs_report/hash index 7293e1b0276..0cd21360989 100644 --- a/repos/os/recipes/src/test-fs_report/hash +++ b/repos/os/recipes/src/test-fs_report/hash @@ -1 +1 @@ -2019-05-26 1ad7aa258a148275508a837275218eab11cfae39 +2019-07-08 6f88eacf1343014cf9f37b9769005b727ec1a82b diff --git a/repos/os/recipes/src/test-immutable_rom/hash b/repos/os/recipes/src/test-immutable_rom/hash index b60e2b0d1b3..24f531e7f0b 100644 --- a/repos/os/recipes/src/test-immutable_rom/hash +++ b/repos/os/recipes/src/test-immutable_rom/hash @@ -1 +1 @@ -2019-05-26 7fb871af96ed5798f399e64561f7f7463c48244d +2019-07-08 698ef7fe2be9e6645fbd044d14baa98f7d009fac diff --git a/repos/os/recipes/src/test-init/hash b/repos/os/recipes/src/test-init/hash index 7dcc2c66e90..ca63edcf98e 100644 --- a/repos/os/recipes/src/test-init/hash +++ b/repos/os/recipes/src/test-init/hash @@ -1 +1 @@ -2019-05-26 512edebc1aa420a8d4ea2495a45240ba62e462c9 +2019-07-08 deeda69a5136037bb56e2628225cf86055b2c68e diff --git a/repos/os/recipes/src/test-init_loop/hash b/repos/os/recipes/src/test-init_loop/hash index 4626065ab9f..bd3fbebd130 100644 --- a/repos/os/recipes/src/test-init_loop/hash +++ b/repos/os/recipes/src/test-init_loop/hash @@ -1 +1 @@ -2019-05-26 f9d17757c6479a1cc3fe2e4529a0a504de022939 +2019-07-08 e8f1cff328ec30778468df70c14279d02641ced4 diff --git a/repos/os/recipes/src/test-nic_loopback/hash b/repos/os/recipes/src/test-nic_loopback/hash index 2078aed45de..85d1487fb9b 100644 --- a/repos/os/recipes/src/test-nic_loopback/hash +++ b/repos/os/recipes/src/test-nic_loopback/hash @@ -1 +1 @@ -2019-05-26 a057e19ce239032d1d2aa62c818b4e53397996f1 +2019-07-08 ad0cb715e6da1a4d2df697f989e43ef12e055e30 diff --git a/repos/os/recipes/src/test-ram_fs_chunk/hash b/repos/os/recipes/src/test-ram_fs_chunk/hash index 90172f9413f..e2700fad9d7 100644 --- a/repos/os/recipes/src/test-ram_fs_chunk/hash +++ b/repos/os/recipes/src/test-ram_fs_chunk/hash @@ -1 +1 @@ -2019-05-26 359600f3ab7d65952ff8756c717833546e8af681 +2019-07-08 4ed85790cc2d4b624e4b570c043d3a41f5463c05 diff --git a/repos/os/recipes/src/test-report_rom/hash b/repos/os/recipes/src/test-report_rom/hash index 7d141a41510..7c4e0dd44d0 100644 --- a/repos/os/recipes/src/test-report_rom/hash +++ b/repos/os/recipes/src/test-report_rom/hash @@ -1 +1 @@ -2019-05-26 7f601191b7f16011d60e2c44345e234c35ab4d38 +2019-07-08 e9a4845165feec061e435979efbea80d9467b1e3 diff --git a/repos/os/recipes/src/test-resource_request/hash b/repos/os/recipes/src/test-resource_request/hash index f84e25a794d..96c91bcb4b5 100644 --- a/repos/os/recipes/src/test-resource_request/hash +++ b/repos/os/recipes/src/test-resource_request/hash @@ -1 +1 @@ -2019-05-26 be7f77dc4dd5618efc5fe7d85a3832958e2df92d +2019-07-08 1be3964ebf6d6c47a690ab70d68619e00f5550d9 diff --git a/repos/os/recipes/src/test-resource_yield/hash b/repos/os/recipes/src/test-resource_yield/hash index 8d81cd6b2ad..ba0a44a6bca 100644 --- a/repos/os/recipes/src/test-resource_yield/hash +++ b/repos/os/recipes/src/test-resource_yield/hash @@ -1 +1 @@ -2019-05-26 fe6cc048546db7a7ba35d54857aa0163f927fa33 +2019-07-08 67aeba1a870ec062f54d952c5aa15a493c928a93 diff --git a/repos/os/recipes/src/test-rom_block/hash b/repos/os/recipes/src/test-rom_block/hash index 153e910d77e..db520248659 100644 --- a/repos/os/recipes/src/test-rom_block/hash +++ b/repos/os/recipes/src/test-rom_block/hash @@ -1 +1 @@ -2019-05-26 b11e244b705d8d27a0189488dd265d49d6f94636 +2019-07-08 05dcd4cbe80e91bc260d70b132caee6627ae9bc5 diff --git a/repos/os/recipes/src/test-rtc/hash b/repos/os/recipes/src/test-rtc/hash index ec9a0c73620..24eac17e6f3 100644 --- a/repos/os/recipes/src/test-rtc/hash +++ b/repos/os/recipes/src/test-rtc/hash @@ -1 +1 @@ -2019-05-26 87bb9c696cf8211a77574312cc198e1ccbc2c650 +2019-07-08 cd1b8a716abbd46be875f04471adb13b148b969e diff --git a/repos/os/recipes/src/test-signal/hash b/repos/os/recipes/src/test-signal/hash index 9a943e5d005..73c34c63fbf 100644 --- a/repos/os/recipes/src/test-signal/hash +++ b/repos/os/recipes/src/test-signal/hash @@ -1 +1 @@ -2019-05-26 5f1c908aedd6bf42b4c5f4532b369febc9f4d611 +2019-07-08 16afd7afcb3c3ca1c7b16b338c2ccba6f49ecbb5 diff --git a/repos/os/recipes/src/test-slab/hash b/repos/os/recipes/src/test-slab/hash index 10aa59970f7..a62cf3cf060 100644 --- a/repos/os/recipes/src/test-slab/hash +++ b/repos/os/recipes/src/test-slab/hash @@ -1 +1 @@ -2019-05-26 75a6906db9cb604653a8854126005b0e07747adf +2019-07-08 4f6b63e9a42a2b80f88d43e057383fa3885d5790 diff --git a/repos/os/recipes/src/test-terminal_crosslink/hash b/repos/os/recipes/src/test-terminal_crosslink/hash index a38c144b009..7ef8f4e5ae4 100644 --- a/repos/os/recipes/src/test-terminal_crosslink/hash +++ b/repos/os/recipes/src/test-terminal_crosslink/hash @@ -1 +1 @@ -2019-05-26 d7c00a727cd218ff282446d8e765306dd8ce3722 +2019-07-08 5d073bb8c1bfcd26e20e2d1f5c582d94d0c9afd6 diff --git a/repos/os/recipes/src/test-trace/hash b/repos/os/recipes/src/test-trace/hash index 76e16d2f457..0e68af99376 100644 --- a/repos/os/recipes/src/test-trace/hash +++ b/repos/os/recipes/src/test-trace/hash @@ -1 +1 @@ -2019-05-26 8352d056b82618567c52ec83228ffbcefb6f3abc +2019-07-08 7ebbbf1add77ebc6b0fab2a4dcaacc666fb66254 diff --git a/repos/os/recipes/src/test-trace_logger/hash b/repos/os/recipes/src/test-trace_logger/hash index 9c3dfe46a2c..8262dd4a300 100644 --- a/repos/os/recipes/src/test-trace_logger/hash +++ b/repos/os/recipes/src/test-trace_logger/hash @@ -1 +1 @@ -2019-05-26 79f87fb3bf1b053e8e342971ff34df16a932223b +2019-07-08 373058a14b405d2f1652bc6a809cbbfb70147110 diff --git a/repos/os/recipes/src/test-utf8/hash b/repos/os/recipes/src/test-utf8/hash index d54a029b84c..331b273b601 100644 --- a/repos/os/recipes/src/test-utf8/hash +++ b/repos/os/recipes/src/test-utf8/hash @@ -1 +1 @@ -2019-05-26 fef5054c5567ce0b04f7e5ba0bdfc1de9f0f5235 +2019-07-08 901879ff2f69fdc3811c6987f7a06112a7d69cdb diff --git a/repos/os/recipes/src/test-vfs_stress/hash b/repos/os/recipes/src/test-vfs_stress/hash index 218bd022200..f9ca11ef9d8 100644 --- a/repos/os/recipes/src/test-vfs_stress/hash +++ b/repos/os/recipes/src/test-vfs_stress/hash @@ -1 +1 @@ -2019-05-26 3769a5aab33b03489f601ae3c4bd3ad2b84c0c2a +2019-07-08 b93bc9276ebbcb0ee1a70e84426c559c6e401b81 diff --git a/repos/os/recipes/src/test-weak_ptr/hash b/repos/os/recipes/src/test-weak_ptr/hash index 71f25203fe2..bf4632d70f8 100644 --- a/repos/os/recipes/src/test-weak_ptr/hash +++ b/repos/os/recipes/src/test-weak_ptr/hash @@ -1 +1 @@ -2019-05-26 b764c88e4593ab0e48213c631dd89d06135ba743 +2019-07-08 2cf2dd3fe27ade228d2f2115d6136c5769599dd0 diff --git a/repos/os/recipes/src/top/hash b/repos/os/recipes/src/top/hash index f6850c6417e..0a7d0354c03 100644 --- a/repos/os/recipes/src/top/hash +++ b/repos/os/recipes/src/top/hash @@ -1 +1 @@ -2019-05-26 0364e1dc8ed3a6ed0b42f0c510583e5709819585 +2019-07-08 59fed61835195820eac5ea73ee0a55bdbd45ecb0 diff --git a/repos/os/recipes/src/trace_logger/hash b/repos/os/recipes/src/trace_logger/hash index 3899745d172..5ccd5285087 100644 --- a/repos/os/recipes/src/trace_logger/hash +++ b/repos/os/recipes/src/trace_logger/hash @@ -1 +1 @@ -2019-05-26 035dabeb6c462947195663aad322845d51100dd3 +2019-07-08 e9ae85736f62cf1dbb12b8815d9c1727618f5c90 diff --git a/repos/os/recipes/src/trace_policy/hash b/repos/os/recipes/src/trace_policy/hash index aa9850174cd..85963e76454 100644 --- a/repos/os/recipes/src/trace_policy/hash +++ b/repos/os/recipes/src/trace_policy/hash @@ -1 +1 @@ -2019-06-14 6f91f5ab8ee729d536975b98ca82d527881e6797 +2019-07-08 82278d75d73f8ca83a67c2cbcc1e2c183db67099 diff --git a/repos/os/recipes/src/trace_subject_reporter/hash b/repos/os/recipes/src/trace_subject_reporter/hash index 78c688315e1..bad48f7806f 100644 --- a/repos/os/recipes/src/trace_subject_reporter/hash +++ b/repos/os/recipes/src/trace_subject_reporter/hash @@ -1 +1 @@ -2019-05-26 ac39874703f86befbf30bdb60e6a895f8a0d316d +2019-07-08 608aaf358b5697a28caf7aaeb739009c5a05ba90 diff --git a/repos/os/recipes/src/usb_block_drv/hash b/repos/os/recipes/src/usb_block_drv/hash index 93ce4427167..5cf4f8f149f 100644 --- a/repos/os/recipes/src/usb_block_drv/hash +++ b/repos/os/recipes/src/usb_block_drv/hash @@ -1 +1 @@ -2019-05-26 a646ceaebeea66bb6ac37c462ecda962f9f0bbd1 +2019-07-08 045a6d5926039b73206717e746f2fe6f85aa4f6b diff --git a/repos/os/recipes/src/vfs/hash b/repos/os/recipes/src/vfs/hash index 6c1dece0813..c197c9b8a74 100644 --- a/repos/os/recipes/src/vfs/hash +++ b/repos/os/recipes/src/vfs/hash @@ -1 +1 @@ -2019-06-11 ac34e969f912996e9f9e90f0f6cd53e95eef3431 +2019-07-08 634f84f55af5febab52a78d8d47216de35256ee2 diff --git a/repos/os/recipes/src/zynq_nic_drv/hash b/repos/os/recipes/src/zynq_nic_drv/hash index 330b3ab3207..300a66d7edb 100644 --- a/repos/os/recipes/src/zynq_nic_drv/hash +++ b/repos/os/recipes/src/zynq_nic_drv/hash @@ -1 +1 @@ -2019-05-26 810c060234412da61820bcc91340dcaffd817765 +2019-07-08 d7e68301275447502123a995f63db05c60541298 diff --git a/repos/ports/recipes/pkg/arora/hash b/repos/ports/recipes/pkg/arora/hash index 77159dcc7cb..8e367904d36 100644 --- a/repos/ports/recipes/pkg/arora/hash +++ b/repos/ports/recipes/pkg/arora/hash @@ -1 +1 @@ -2019-06-11 77fe16c14f1b2ab6a818e02956d024fdbcd5f78a +2019-07-08 b4085cc7bf7d765c6a98037eadb07c6b3533f866 diff --git a/repos/ports/recipes/pkg/nic_router-nat-dns/hash b/repos/ports/recipes/pkg/nic_router-nat-dns/hash index 68db317516c..e807664d3dd 100644 --- a/repos/ports/recipes/pkg/nic_router-nat-dns/hash +++ b/repos/ports/recipes/pkg/nic_router-nat-dns/hash @@ -1 +1 @@ -2019-06-11 c0563b39ab05a0f8fafbe29aa844c0aa0b7fb355 +2019-07-08 32a9301f7aafabf86c371c14643937c5f051a55b diff --git a/repos/ports/recipes/pkg/noux-build-x86/hash b/repos/ports/recipes/pkg/noux-build-x86/hash index d274f530090..c2b4672ad60 100644 --- a/repos/ports/recipes/pkg/noux-build-x86/hash +++ b/repos/ports/recipes/pkg/noux-build-x86/hash @@ -1 +1 @@ -2019-06-11 9cffef570f4983bf6e7354b723adee204fdb5a57 +2019-07-08 a97376b148767013a6bc58694af68c43985e950c diff --git a/repos/ports/recipes/pkg/noux-system/hash b/repos/ports/recipes/pkg/noux-system/hash index 12925dcc019..5bb65a514d3 100644 --- a/repos/ports/recipes/pkg/noux-system/hash +++ b/repos/ports/recipes/pkg/noux-system/hash @@ -1 +1 @@ -2019-06-11 ea83ce26a40323cc624815bdafa8f02882bb5374 +2019-07-08 d59eaf1906994ca4011d72d3baee2de86b2c4179 diff --git a/repos/ports/recipes/pkg/report_dump/hash b/repos/ports/recipes/pkg/report_dump/hash index 0abfab9363b..dab413cbff9 100644 --- a/repos/ports/recipes/pkg/report_dump/hash +++ b/repos/ports/recipes/pkg/report_dump/hash @@ -1 +1 @@ -2019-06-11 9dff2fd337e502ffe36b9ea592dc06f6f3e61450 +2019-07-08 65d41434032fef3d7dd7e3c5a3ec42eb868ce9f1 diff --git a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash index 602bd91ce67..a94924051e2 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash +++ b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash @@ -1 +1 @@ -2019-06-12 c13c77bc1443e4bec245d806f99bf2653b29bbf5 +2019-07-08 93657b32cd029a2211d8bb9b576760e4e2f9f420 diff --git a/repos/ports/recipes/raw/noux-system/hash b/repos/ports/recipes/raw/noux-system/hash index 043f0390c00..0fe852eaa0b 100644 --- a/repos/ports/recipes/raw/noux-system/hash +++ b/repos/ports/recipes/raw/noux-system/hash @@ -1 +1 @@ -2019-02-25 d50d6df4955548b8dcfa61d327463ae878b9e5b9 +2019-07-08 7556ca12d2d5b91b0dc71055ce3997644f187654 diff --git a/repos/ports/recipes/src/arora/hash b/repos/ports/recipes/src/arora/hash index b09ad38ba31..0c8a8f4cc29 100644 --- a/repos/ports/recipes/src/arora/hash +++ b/repos/ports/recipes/src/arora/hash @@ -1 +1 @@ -2019-05-27 39006d49c844ec1722d09278c5175442634c6e3d +2019-07-08 16691504fe3a159103e5f7a4c484f44f17ec61cf diff --git a/repos/ports/recipes/src/bash-minimal/hash b/repos/ports/recipes/src/bash-minimal/hash index 15f15b74e09..7594fe5d6d7 100644 --- a/repos/ports/recipes/src/bash-minimal/hash +++ b/repos/ports/recipes/src/bash-minimal/hash @@ -1 +1 @@ -2019-05-26 0ba350c8b835548374f13c6e43398368daa74644 +2019-07-08 71addf7c9333e9062712084eba5bb60af2e42cd5 diff --git a/repos/ports/recipes/src/bash/hash b/repos/ports/recipes/src/bash/hash index f7dbb411bec..2ffeb872f1f 100644 --- a/repos/ports/recipes/src/bash/hash +++ b/repos/ports/recipes/src/bash/hash @@ -1 +1 @@ -2019-05-26 aad621ce5e4630107a26a64747666e23580865a0 +2019-07-08 d98815baf4913cad455476c68ce6703986a76b8c diff --git a/repos/ports/recipes/src/binutils_x86/hash b/repos/ports/recipes/src/binutils_x86/hash index 13d3dc97aed..71ae0ac6a2a 100644 --- a/repos/ports/recipes/src/binutils_x86/hash +++ b/repos/ports/recipes/src/binutils_x86/hash @@ -1 +1 @@ -2019-05-26 f4bdf6cc583f0efa339fdd8dec11dbbeb9449eec +2019-07-08 41d26dd9cab0b98281912c7276894c1e9f0b73ef diff --git a/repos/ports/recipes/src/coreutils-minimal/hash b/repos/ports/recipes/src/coreutils-minimal/hash index 3fdf9003fb5..7d138f29139 100644 --- a/repos/ports/recipes/src/coreutils-minimal/hash +++ b/repos/ports/recipes/src/coreutils-minimal/hash @@ -1 +1 @@ -2019-05-26 d0d6d059d78dabd53230e0cdf076e92a8538d8ab +2019-07-08 9340a43cd2bb03beeddf96fa9718886b82b4a803 diff --git a/repos/ports/recipes/src/coreutils/hash b/repos/ports/recipes/src/coreutils/hash index 8d51528bd99..e7ae2033c34 100644 --- a/repos/ports/recipes/src/coreutils/hash +++ b/repos/ports/recipes/src/coreutils/hash @@ -1 +1 @@ -2019-05-26 5e26e36caeae9c05fa65ae039f28802c952a701e +2019-07-08 bb2f6bd4227606b4714b8905226b67cbd611da64 diff --git a/repos/ports/recipes/src/e2fsprogs-minimal/hash b/repos/ports/recipes/src/e2fsprogs-minimal/hash index 35a2663d8b5..1603527255a 100644 --- a/repos/ports/recipes/src/e2fsprogs-minimal/hash +++ b/repos/ports/recipes/src/e2fsprogs-minimal/hash @@ -1 +1 @@ -2019-05-26 e68a347f724953fa2e7cde8bf7b8c9402f082946 +2019-07-08 8ffc595ecf07afada98b96e8f8c40d2e22407562 diff --git a/repos/ports/recipes/src/e2fsprogs/hash b/repos/ports/recipes/src/e2fsprogs/hash index 4a350f3dde1..7dc96098dda 100644 --- a/repos/ports/recipes/src/e2fsprogs/hash +++ b/repos/ports/recipes/src/e2fsprogs/hash @@ -1 +1 @@ -2019-05-26 2578c222c7a2ffe62fc23902de2ccef8aacbfbde +2019-07-08 4589939fc4f28723274b607329842b3b9b24d8df diff --git a/repos/ports/recipes/src/findutils/hash b/repos/ports/recipes/src/findutils/hash index 3c57b87a64b..b09429cfdbd 100644 --- a/repos/ports/recipes/src/findutils/hash +++ b/repos/ports/recipes/src/findutils/hash @@ -1 +1 @@ -2019-05-26 ea9b3c6983b5a1802cf18355202fd1facbf29096 +2019-07-08 aefdedc863599912a7a6d86880ea7948dc5cb087 diff --git a/repos/ports/recipes/src/gcc_x86/hash b/repos/ports/recipes/src/gcc_x86/hash index 4bf98a2617e..fcc66cd35df 100644 --- a/repos/ports/recipes/src/gcc_x86/hash +++ b/repos/ports/recipes/src/gcc_x86/hash @@ -1 +1 @@ -2019-05-27 5c17c6af5949202d888b82f513cbdcf9e4fbf0f8 +2019-07-08 09174f57d9a3f68b6c41a6f5677c5b08c1c2d8e4 diff --git a/repos/ports/recipes/src/gnumake/hash b/repos/ports/recipes/src/gnumake/hash index 5071bb959b2..f0f10a05e87 100644 --- a/repos/ports/recipes/src/gnumake/hash +++ b/repos/ports/recipes/src/gnumake/hash @@ -1 +1 @@ -2019-05-26 bd603d1e44448b25670d9391ce63097f29887bf3 +2019-07-08 22529a38f51166e2fb5ec41dd3f7442bd98953bf diff --git a/repos/ports/recipes/src/grep/hash b/repos/ports/recipes/src/grep/hash index 11e5cf7c714..9b60c46475a 100644 --- a/repos/ports/recipes/src/grep/hash +++ b/repos/ports/recipes/src/grep/hash @@ -1 +1 @@ -2019-05-26 85028d6b106c90acbae630b5e1f9b278858ef929 +2019-07-08 c75f749d375e22bb22210d49595aefc5dfee245a diff --git a/repos/ports/recipes/src/libgetdns/hash b/repos/ports/recipes/src/libgetdns/hash index a7759245cea..5e681abdf13 100644 --- a/repos/ports/recipes/src/libgetdns/hash +++ b/repos/ports/recipes/src/libgetdns/hash @@ -1 +1 @@ -2019-05-26 c594f0411fca4a9c4c15502c4b1fbe79f7c7e21a +2019-07-08 c0c81bf10be42d4eb51eb8170e20dd974564818e diff --git a/repos/ports/recipes/src/lighttpd/hash b/repos/ports/recipes/src/lighttpd/hash index ec25d92a0b2..6087aa968ef 100644 --- a/repos/ports/recipes/src/lighttpd/hash +++ b/repos/ports/recipes/src/lighttpd/hash @@ -1 +1 @@ -2019-05-26 25b55f4d806607bea4f75864a7e52922a2552aa3 +2019-07-08 43316276e0d286712db5bf2bdd3076749a923881 diff --git a/repos/ports/recipes/src/noux/hash b/repos/ports/recipes/src/noux/hash index e0f0d8cf352..940ab8ab248 100644 --- a/repos/ports/recipes/src/noux/hash +++ b/repos/ports/recipes/src/noux/hash @@ -1 +1 @@ -2019-05-26 f06a0bc6d945cb9faff620590c1d8e7cb407aeda +2019-07-08 69e45a6af4a961f6a080b823515164ad41141523 diff --git a/repos/ports/recipes/src/sed/hash b/repos/ports/recipes/src/sed/hash index fb4507ab48c..7f18ab7dec6 100644 --- a/repos/ports/recipes/src/sed/hash +++ b/repos/ports/recipes/src/sed/hash @@ -1 +1 @@ -2019-05-26 8438f20e308f96b0943ac54422513e7f2ea135ea +2019-07-08 ea5b73e8a1e405fa0583f722c7ea4cb932aad4db diff --git a/repos/ports/recipes/src/seoul/hash b/repos/ports/recipes/src/seoul/hash index 4d0eb251c2f..f512852b84d 100644 --- a/repos/ports/recipes/src/seoul/hash +++ b/repos/ports/recipes/src/seoul/hash @@ -1 +1 @@ -2019-05-26 262a19fa1cdd69353463d80a33d9bce91be9284e +2019-07-08 9ec300adadc0808c25fc137925eb4548fb8c21a9 diff --git a/repos/ports/recipes/src/stubby/hash b/repos/ports/recipes/src/stubby/hash index cb5678a4dd8..d4e52df55a1 100644 --- a/repos/ports/recipes/src/stubby/hash +++ b/repos/ports/recipes/src/stubby/hash @@ -1 +1 @@ -2019-05-26 240550f503986963e892e49d9e49e32770426faf +2019-07-08 a18ac4b2eb35408aa4cdaf39653f5de8a1eb94d4 diff --git a/repos/ports/recipes/src/tar/hash b/repos/ports/recipes/src/tar/hash index 63a1e367a1d..92a31fe442d 100644 --- a/repos/ports/recipes/src/tar/hash +++ b/repos/ports/recipes/src/tar/hash @@ -1 +1 @@ -2019-05-26 f08ad0aa8d198633cad430a23fc92cdb29e0003f +2019-07-08 c1acf451c2c3949d9bcab073d33e499985db63cf diff --git a/repos/ports/recipes/src/tclsh/hash b/repos/ports/recipes/src/tclsh/hash index 85f82f8e579..e7061d2d155 100644 --- a/repos/ports/recipes/src/tclsh/hash +++ b/repos/ports/recipes/src/tclsh/hash @@ -1 +1 @@ -2019-05-26 713b098770e5675f7d8f0484751e6ff14e49ac23 +2019-07-08 56a4d57cd89b1e88d7a122ad26d01dff61c8347f diff --git a/repos/ports/recipes/src/vbox5-nova/hash b/repos/ports/recipes/src/vbox5-nova/hash index 859917fa31b..363fd4b5d09 100644 --- a/repos/ports/recipes/src/vbox5-nova/hash +++ b/repos/ports/recipes/src/vbox5-nova/hash @@ -1 +1 @@ -2019-06-12 b8305bb83879e0c5e8ca35273b622edcdb1b1f9b +2019-07-08 0b74557d38c296303dc37f589c259d1735eb46ff diff --git a/repos/ports/recipes/src/vbox5/hash b/repos/ports/recipes/src/vbox5/hash index ff5ea951dd4..fabe416f6b4 100644 --- a/repos/ports/recipes/src/vbox5/hash +++ b/repos/ports/recipes/src/vbox5/hash @@ -1 +1 @@ -2019-06-12 a8601031b4b4f2d3d1593cf9ba220477ff3767fa +2019-07-08 51e9b365fd84e1148402e13b407abaa7c5655790 diff --git a/repos/ports/recipes/src/verify/hash b/repos/ports/recipes/src/verify/hash index 6b5cf5b65e9..3adaf3a2dbe 100644 --- a/repos/ports/recipes/src/verify/hash +++ b/repos/ports/recipes/src/verify/hash @@ -1 +1 @@ -2019-05-26 f152fc7787338732713ae70b1b2a2a6c259ae322 +2019-07-08 9ec400b95fd525078680274745d35ca0e6b1434c diff --git a/repos/ports/recipes/src/vim-minimal/hash b/repos/ports/recipes/src/vim-minimal/hash index ee2a8145412..685d6d7e4ca 100644 --- a/repos/ports/recipes/src/vim-minimal/hash +++ b/repos/ports/recipes/src/vim-minimal/hash @@ -1 +1 @@ -2019-05-26 d0b0e06ac37ac22010be352b22fa53bfc59921ad +2019-07-08 56e3e4396b86f77d74ae416285e4e7cf1c3b9b6e diff --git a/repos/ports/recipes/src/vim/hash b/repos/ports/recipes/src/vim/hash index 2ff0df59a1f..2ff42cb6305 100644 --- a/repos/ports/recipes/src/vim/hash +++ b/repos/ports/recipes/src/vim/hash @@ -1 +1 @@ -2019-05-26 7ea29463ae22ccfae2d6eb5026aaaed61ca73e9f +2019-07-08 4ed010cecef5a0e8d96fbfd2bbe0ed3deb04fa39 diff --git a/repos/ports/recipes/src/which/hash b/repos/ports/recipes/src/which/hash index 454e4341c66..502f5b95967 100644 --- a/repos/ports/recipes/src/which/hash +++ b/repos/ports/recipes/src/which/hash @@ -1 +1 @@ -2019-05-26 8ea4e6207aecee83a6409568404a7ad6b5d5b94e +2019-07-08 d40c17ae7e453f9cc9e1128c0560a0d922da68bf From fbae7767b435c13a2e9d69aca1b2d782f1b2094a Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 29 May 2019 14:18:37 +0200 Subject: [PATCH 66/67] sculpt: version 19.07 --- repos/gems/run/sculpt.run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index d68b619301a..699dd30a4fa 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -519,7 +519,7 @@ exec gzip -dc [genode_dir]/repos/gems/run/sculpt/machine.vdi.gz > [run_dir]/geno # Note: the string must be exactly 5 bytes long. # proc sculpt_version { } { - return "19.02" } + return "19.07" } # write file with newline (for producing nice output when using 'cat /VERSION') set fd [open [run_dir]/genode/VERSION w] From d33bef2e49fa5fce73e077f5f3216dea80a1e4f2 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 9 Jul 2019 11:16:42 +0200 Subject: [PATCH 67/67] Update documentation for Sculpt 19.07 --- repos/gems/recipes/pkg/sculpt/README | 102 +++++++++++++++++++-------- repos/gems/recipes/pkg/sculpt/hash | 2 +- 2 files changed, 75 insertions(+), 29 deletions(-) diff --git a/repos/gems/recipes/pkg/sculpt/README b/repos/gems/recipes/pkg/sculpt/README index 23eaf68ba23..e46491f138b 100644 --- a/repos/gems/recipes/pkg/sculpt/README +++ b/repos/gems/recipes/pkg/sculpt/README @@ -1,8 +1,8 @@ - ===================================== - Sculpt as a community experience (CE) - ===================================== + ============================= + Sculpt Operating System 19.07 + ============================= Norman Feske @@ -58,13 +58,13 @@ Your feedback is appreciated! [https://www.genode-labs.com] A printable PDF version of this document is available at -[https://genode.org/documentation/sculpt-ce.pdf]. +[https://genode.org/documentation/sculpt-19-07.pdf]. Hardware requirements and preparations ###################################### -Sculpt CE should be compatible with recent Intel-based PC hardware featuring +Sculpt should be compatible with recent Intel-based PC hardware featuring Intel graphics, E1000 networking, Intel wireless, and AHCI/NVMe. It is tested best on laptops of the Lenovo X and T series (X220, X250, X260, @@ -185,16 +185,21 @@ information along with the option to remove it from the system. As a next step, let us add a window system. In the '+' menu, you can find a readily packaged window system at _genodelabs_ -> _GUI_ -> _themed wm_. -After installing the package, you are asked to take three decisions: +After installing the package, you are asked to take five decisions: The _GUI (focus)_ should be assigned to "keyboard focus" to put the window manager in charge of controlling the keyboard focus, which is part of its job after all. The _GUI_ should be assigned to "system GUI server" as the basic mechanism to be used for graphical output and user input for the windowed applications. -Finally, by assigning _Report_ to _system reports_, we allow the window +By assigning _Report (shape)_ to _pointer shape_, we allow the window manager to report information about mouse-pointer shapes. -By adding the component, the "themed wm" will appear in the runtime view. +By assigning _Report (clipboard)_ to _global clipboard_, we grant the +window manager the right to change the content of the global clipboard. +Vice versa, by assigning _ROM (clipboard)_, we permit the window manager +to obtain clipboard content. + +After adding the component, the "themed wm" will appear in the runtime view. To give the window system a quick try, add the small demo you can find at _genodelabs_ -> _Demos_ -> _nano3d_ and assign its _GUI_ to our "themed wm". @@ -238,6 +243,14 @@ dialog is a bit more elaborate this time. within the instance. Select "default vim configuration" to grant read-only access to this information. +:ROM (clipboard): defines the service to obtain clipboard content from. + Select "themed wm" (not "global clipboard"). + +:Report (clipboard): defines the service for reporting new clipboard content. + Select "themed wm". More information about the integration and use of the + clipboard can be found in + [https://genodians.org/nfeske/2019-07-03-copy-paste - a dedicated article]. + With those decisions taken, a fresh noux runtime can be started, which appears in a window. @@ -261,6 +274,13 @@ Of course, there are many more components to explore and to combine. For inspiration, please follow the postings at [https://genodians.org], for example: +:Copy and paste mechanism: + + Sculpt provides a built-in mechanism for exchanging data between + virtual machines, terminals, and Qt applications: + + [https://genodians.org/nfeske/2019-07-03-copy-paste] + :Use GNU/Linux inside a virtual machine on top of Sculpt: There is a ready-to-use package for downloading Debian for the use inside @@ -440,9 +460,9 @@ the running system using a command-line interface and the Vim text editor. Vim skills recommended ---------------------- -Sculpt CE leverages (a subset of) GNU coreutils, bash, and Vim as the user +Sculpt leverages (a subset of) GNU coreutils, bash, and Vim as the user interface for sculpting the system. If you are not yet familiar with using -Vim, you may take Sculpt CE as a welcome chance to get your toes wet. To +Vim, you may take Sculpt as a welcome chance to get your toes wet. To enjoy the experience, you should be comfortable with the following operations: @@ -586,8 +606,14 @@ as options. | | platform information ---------------------------------------------------------------------------- | | system status + ---------------------------------------------------------------------------- + | | global clipboard ---------------------------------------------------------------------------- Report | 'Report' | system reports + ---------------------------------------------------------------------------- + | | pointer shape + ---------------------------------------------------------------------------- + | | global clipboard ---------------------------------------------------------------------------- File system | 'File_system' | writeable system configuration ---------------------------------------------------------------------------- @@ -708,6 +734,11 @@ the following built-in ROM resources: optional ACPICA driver to respond to requests for a system reset or power-down. +:global clipboard: provides the current content of the global clipboard. + The content can be accessed by a component only when the user interacts + with the component. This prevents overly nosey components from snooping the + clipboard content. + Report ~~~~~~ @@ -723,10 +754,16 @@ keep in mind that Sculpt's built-in report file system is limited in size. A misbehaving component may put the system in jeopardy by producing overly sized reports. -Reports labeled with 'shape' play a special role. They are routed to the mouse -pointer and thereby enable graphical applications to suggest context-specific -pointer shapes. The application-provided shape is shown whenever the -corresponding application is hovered. +:pointer shape: Reports labeled with 'shape' play a special role. + They are routed to the mouse pointer and thereby enable graphical + applications to suggest context-specific pointer shapes. The + application-provided shape is shown whenever the corresponding application + is hovered. + +:global clipboard: enables components to write new content to the + system-global clipboard. This operation, however, is restricted to the + single component that the user currently interacts with. This prevents + rogue components from spamming the global clipboard. File system @@ -1123,26 +1160,26 @@ a free download at [https://genode.org]. # Download the support for the NOVA microkernel - ! ./tool/depot/download genodelabs/bin/x86_64/base-nova/2019-03-17 + ! ./tool/depot/download genodelabs/bin/x86_64/base-nova/2019-07-08 The content is downloaded to the _public/_ directory and extracted to the _depot/_ directory. # Download all ingredients for the Sculpt boot image - ! ./tool/depot/download genodelabs/pkg/x86_64/sculpt/2019-03-19 + ! ./tool/depot/download genodelabs/pkg/x86_64/sculpt/2019-07-08 # Create a build directory ! ./tool/create_builddir x86_64 # Configure the build directory by editing _build/x86_64/etc/build.conf_. - Most importantly, enable the 'gems' source-code repository where the - Sculpt scenario resides. In addition, the 'ports', 'dde_linux' and 'dde_ipxe' - repository are needed as well. Second, change the default configuration - of the 'QEMU_RUN_OPT' variable to 'image/disk' instead of 'image/iso'. - This way, the build process will produce a valid disk image with a GPT - partition table instead of a legacy ISO image. + Most importantly, enable the 'gems' source-code repository where the Sculpt + scenario resides. In addition, the 'libports', 'ports', 'dde_linux' and + 'dde_ipxe' repository are needed as well. Second, change the default + configuration of the 'QEMU_RUN_OPT' variable to 'image/disk' instead of + 'image/iso'. This way, the build process will produce a valid disk image + with a GPT partition table instead of a legacy ISO image. # Create the Sculpt boot image (defined by the run script at _repos/gems/run/sculpt.run_) @@ -1170,12 +1207,13 @@ Before building the packages, various ports of 3rd-party software need to be prepared. The following command prepares all of them at once: ! /tool/ports/prepare_port \ -! bash coreutils curl dde_ipxe dde_linux \ -! dde_rump e2fsprogs gnupg grub2 jitterentropy \ -! libarchive libc libgcrypt libiconv libssh \ -! lwip_legacy ncurses nova openssl qemu-usb \ -! stdcxx vim virtualbox5 x86emu xz zlib libpng \ -! ttf-bitstream-vera stb +! acpica bash coreutils curl dde_ipxe dde_linux \ +! dde_rump drm e2fsprogs expat freetype gnupg \ +! jitterentropy jpeg libarchive libc libgcrypt \ +! libiconv libpng libssh mesa ncurses nova openssl \ +! pcre qemu-usb qoost qt5 stb stdcxx \ +! ttf-bitstream-vera vim virtualbox5 x86emu xz \ +! zlib The ingredients of the boot image are subsumed by the 'pkg/sculpt' package. The default set of software installed by the update runtime is defined by @@ -1208,6 +1246,14 @@ to those that do not yet exist in binary form. If not specified, the command would recompile all packages each time. You may further add '-j' to parallelize the build process where '' is the level of parallelism. +Alternatively to managing the depot manually, you may choose to let the build +system manage the versioning and updating of the depot content automatically +by enabling the following line in your _build.conf_ file. This slows down +the build time a bit but ensures that the depot content is consistent with +your source tree at all times. + +! RUN_OPT += --depot-auto-update + Building the 'sculpt-installation' package works analogously to the 'sculpt' package. diff --git a/repos/gems/recipes/pkg/sculpt/hash b/repos/gems/recipes/pkg/sculpt/hash index 79c09180d51..edff5cc6d48 100644 --- a/repos/gems/recipes/pkg/sculpt/hash +++ b/repos/gems/recipes/pkg/sculpt/hash @@ -1 +1 @@ -2019-07-08 879550ef693bd3d8394a90b6b4e07bf9b49299c9 +2019-07-08 b48e3fc351006cdc133c0b644d06bfc4dc413a7c