diff --git a/repos/base-fiasco/recipes/src/base-fiasco/hash b/repos/base-fiasco/recipes/src/base-fiasco/hash index 1c60bd152..15f3a25d9 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 5110614df..25534b509 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 074711f77..731b56b26 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 4ecd7779f..d683fd7e6 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 94a005394..986fcd8a9 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 b3575007c..298570071 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 fef37f540..57843414a 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 56c717b59..520577419 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 8c7b34586..b21000f20 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 aa4a11b30..80fdbdb76 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 7bb0da955..b1c2e5e7f 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 1a793c077..72a5fdafb 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 9c2536027..3304e16e7 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 eb7fa7964..c86e0c5ae 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 66270c851..b6388af76 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 3b8ffe605..192e29c60 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 a655df337..1949a6a4f 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 da2048f42..281f5392e 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 76187d8f5..b090ee6b9 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 77b793729..d118b09e8 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 5c76fbc26..fe26b3144 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 b2242769c..1e1b921d2 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-hw/src/bootstrap/spec/arm_64/crt0.s b/repos/base-hw/src/bootstrap/spec/arm_64/crt0.s index 2a7a8f392..98de01e67 100644 --- a/repos/base-hw/src/bootstrap/spec/arm_64/crt0.s +++ b/repos/base-hw/src/bootstrap/spec/arm_64/crt0.s @@ -16,70 +16,49 @@ .global _start _start: - /**************** - ** Enable FPU ** - ****************/ - - mov x0, #0b11 - lsl x0, x0, #20 - msr cpacr_el1, x0 - - /*********************** ** Detect CPU number ** ***********************/ mrs x0, mpidr_el1 and x0, x0, #0b11111111 - cmp x0, #0 - bne __endless_sleep + cbz x0, _crt0_fill_bss_zero + wfe + b _start /*************************** ** Zero-fill BSS segment ** ***************************/ - ldr x0, =_bss_local_start - ldr x1, =_bss_local_end + _crt0_fill_bss_zero: + ldr x0, =_bss_start + ldr x1, =_bss_end 1: cmp x1, x0 - ble 2f - str xzr, [x0] - add x0, x0, #8 - b 1b - 2: + b.eq _crt0_enable_fpu + str xzr, [x0], #8 + b 1b - /************************************ - ** Jump to high-level entry point ** - ************************************/ + /**************** + ** Enable FPU ** + ****************/ - ldr x0, =_start_stack /* load stack address into x0 */ - msr vbar_el1, x0 + _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 - __endless_sleep: - wfe - 1: b 1b - - _bss_local_start: - .quad _bss_start - - _bss_local_end: - .quad _bss_end - .p2align 4 .space 0x4000 - _start_stack: - - .rept 512 - nop - .endr - mrs x24, far_el1 - mrs x25, ttbr0_el1 - mrs x26, ttbr1_el1 - mrs x27, elr_el1 - mrs x28, esr_el1 - 1: b 1b - + _crt0_start_stack: diff --git a/repos/base-hw/src/bootstrap/spec/rpi3/platform.cc b/repos/base-hw/src/bootstrap/spec/rpi3/platform.cc index efa2070ae..a015a355b 100644 --- a/repos/base-hw/src/bootstrap/spec/rpi3/platform.cc +++ b/repos/base-hw/src/bootstrap/spec/rpi3/platform.cc @@ -133,6 +133,7 @@ unsigned Bootstrap::Platform::enable_mmu() 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); 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 index c7ae6e1d5..1b5684ee9 100644 --- a/repos/base-hw/src/include/hw/spec/arm_64/cpu.h +++ b/repos/base-hw/src/include/hw/spec/arm_64/cpu.h @@ -106,11 +106,12 @@ struct Hw::Arm_64_cpu ); 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 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> diff --git a/repos/base-linux/recipes/api/base-linux/hash b/repos/base-linux/recipes/api/base-linux/hash index 142edd538..c5880ef97 100644 --- a/repos/base-linux/recipes/api/base-linux/hash +++ b/repos/base-linux/recipes/api/base-linux/hash @@ -1 +1 @@ -2019-06-04 f880caa4785e8994a955fd557608cec0e42d64a7 +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 fa0283892..6ab39c5f0 100644 --- a/repos/base-linux/recipes/src/base-linux/hash +++ b/repos/base-linux/recipes/src/base-linux/hash @@ -1 +1 @@ -2019-06-03 08a12eda7a98bad6b5571a6ca044f77107fe1afd +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 88203e727..90ff571f6 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 1dee35d0e..9372c7540 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 88231eeaa..8ea32866e 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 f3eebe62e..fff23cbc2 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 074f1185a..1879fc97c 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 6c131dcf5..aa302aa69 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/include/util/print_lines.h b/repos/base/include/util/print_lines.h index a8b228bba..862c37993 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') { + size_t line_len = 0; + size_t skip_char = 1; - /* the line length is the offset of the last real character + 1 */ - i++; - break; - } - } - i; - }); + 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; } diff --git a/repos/base/recipes/api/base/hash b/repos/base/recipes/api/base/hash index 5062486d7..1df259983 100644 --- a/repos/base/recipes/api/base/hash +++ b/repos/base/recipes/api/base/hash @@ -1 +1 @@ -2019-06-06-a 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 972fb27c4..bc30dbf49 100644 --- a/repos/base/recipes/pkg/test-ds_ownership/hash +++ b/repos/base/recipes/pkg/test-ds_ownership/hash @@ -1 +1 @@ -2019-06-05 a482ca84264eb39d59c6e11b9a75eae733ba963c +2019-07-08 37162466a80c5444506b40c8c98cc6ea6de9b47a diff --git a/repos/base/recipes/pkg/test-log/hash b/repos/base/recipes/pkg/test-log/hash index 83be19176..7745a70bb 100644 --- a/repos/base/recipes/pkg/test-log/hash +++ b/repos/base/recipes/pkg/test-log/hash @@ -1 +1 @@ -2019-06-05 fda3309d428323ef734831259f097c471ce2515e +2019-07-08 c1b5f195b754f1375736254664f1d9176c176503 diff --git a/repos/base/recipes/pkg/test-mmio/hash b/repos/base/recipes/pkg/test-mmio/hash index db603acdd..5c4e56845 100644 --- a/repos/base/recipes/pkg/test-mmio/hash +++ b/repos/base/recipes/pkg/test-mmio/hash @@ -1 +1 @@ -2019-06-05 2452e2c07b1780598da5329370968c5453d2cef1 +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 a243b2259..688735788 100644 --- a/repos/base/recipes/pkg/test-new_delete/hash +++ b/repos/base/recipes/pkg/test-new_delete/hash @@ -1 +1 @@ -2019-06-05 eb547d1c8d6524d5eb41fe944187d3c5ec43fd92 +2019-07-08 2955a95228750490c3325433ee31efcc32c23861 diff --git a/repos/base/recipes/pkg/test-reconstructible/hash b/repos/base/recipes/pkg/test-reconstructible/hash index f0d6aa756..ba8734325 100644 --- a/repos/base/recipes/pkg/test-reconstructible/hash +++ b/repos/base/recipes/pkg/test-reconstructible/hash @@ -1 +1 @@ -2019-06-05 6e87ae91a73761473509dd592eb0c21c72ae16d9 +2019-07-08 e3fb3e259cfcdbafb3b63c7b171018fa8f44d072 diff --git a/repos/base/recipes/pkg/test-registry/hash b/repos/base/recipes/pkg/test-registry/hash index 97caf7bed..7f0605316 100644 --- a/repos/base/recipes/pkg/test-registry/hash +++ b/repos/base/recipes/pkg/test-registry/hash @@ -1 +1 @@ -2019-06-05 d0c7d3ad212e8255eab03aa76768805f68f8bacc +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 39cdd0ded..0e22fd9da 100644 --- a/repos/base/recipes/pkg/test-rm_fault/hash +++ b/repos/base/recipes/pkg/test-rm_fault/hash @@ -1 +1 @@ -- +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 39cdd0ded..d5c8611f0 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-07-08 0842f66801660cba8cd5efb0402b54710f3de773 diff --git a/repos/base/recipes/pkg/test-rm_nested/hash b/repos/base/recipes/pkg/test-rm_nested/hash index 39cdd0ded..e79e247c0 100644 --- a/repos/base/recipes/pkg/test-rm_nested/hash +++ b/repos/base/recipes/pkg/test-rm_nested/hash @@ -1 +1 @@ -- +2019-07-08 a30039fc71bcfb8fe05073d5f5348757e1688abc diff --git a/repos/base/recipes/pkg/test-sanitizer/hash b/repos/base/recipes/pkg/test-sanitizer/hash index c741afe17..79729a668 100644 --- a/repos/base/recipes/pkg/test-sanitizer/hash +++ b/repos/base/recipes/pkg/test-sanitizer/hash @@ -1 +1 @@ -2019-06-05 35e65370ff3ce58be5da7f2fb9c1547996feb5c2 +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 11976b378..fff4649c6 100644 --- a/repos/base/recipes/pkg/test-stack_smash/hash +++ b/repos/base/recipes/pkg/test-stack_smash/hash @@ -1 +1 @@ -2019-06-05 876cb96d5a8fc135a41037c937af99fde990526f +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 2d605ef80..edf2c6c40 100644 --- a/repos/base/recipes/pkg/test-synced_interface/hash +++ b/repos/base/recipes/pkg/test-synced_interface/hash @@ -1 +1 @@ -2019-06-05 e39464fdbd946414669c8f238ba06993f5c8ec76 +2019-07-08 f48c92352a33a8bab503e9edf5af7a0c9c47d686 diff --git a/repos/base/recipes/pkg/test-timer/hash b/repos/base/recipes/pkg/test-timer/hash index f23ce412f..17db96c1d 100644 --- a/repos/base/recipes/pkg/test-timer/hash +++ b/repos/base/recipes/pkg/test-timer/hash @@ -1 +1 @@ -2019-06-05 a5815f580048b6e9508f783938a1f61c81b22c82 +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 f60f0a17e..e1ef1f708 100644 --- a/repos/base/recipes/pkg/test-xml_generator/hash +++ b/repos/base/recipes/pkg/test-xml_generator/hash @@ -1 +1 @@ -2019-06-05 9742b8751e31b5098e57133a5b24741cd0c40396 +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 016e6a54c..ced0c533f 100644 --- a/repos/base/recipes/pkg/test-xml_node/hash +++ b/repos/base/recipes/pkg/test-xml_node/hash @@ -1 +1 @@ -2019-06-05 164dbe93285a6101f0f418fb0aa2d6d5c91d639a +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 65e8eb208..60ec422c8 100644 --- a/repos/base/recipes/src/test-ds_ownership/hash +++ b/repos/base/recipes/src/test-ds_ownership/hash @@ -1 +1 @@ -2019-06-04 0e6cd36980016c3ab86e2b90107420c4d9d3caf3 +2019-07-08 8183f267957f5c7db338191121336c602eac383c diff --git a/repos/base/recipes/src/test-log/hash b/repos/base/recipes/src/test-log/hash index 6d45fa6a3..278a2dd70 100644 --- a/repos/base/recipes/src/test-log/hash +++ b/repos/base/recipes/src/test-log/hash @@ -1 +1 @@ -2019-06-04 6e472e63c280ffa9b1175115e0dc98c3cd32d87c +2019-07-08 20762d50e848166cbdf725857347a3ff24683c30 diff --git a/repos/base/recipes/src/test-mmio/hash b/repos/base/recipes/src/test-mmio/hash index 0ccb5f8cf..a6674b068 100644 --- a/repos/base/recipes/src/test-mmio/hash +++ b/repos/base/recipes/src/test-mmio/hash @@ -1 +1 @@ -2019-06-04 d4fdeb7a430acef195d05f9c8ee836b60a3e055c +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 29263e7c9..66e0320b3 100644 --- a/repos/base/recipes/src/test-new_delete/hash +++ b/repos/base/recipes/src/test-new_delete/hash @@ -1 +1 @@ -2019-06-04 8ac50ced701d8668e5d2f29cccfc10da1b3ca0b9 +2019-07-08 51e4cc7eb75188b0d1fcde1f1b057d92b64d098c diff --git a/repos/base/recipes/src/test-reconstructible/hash b/repos/base/recipes/src/test-reconstructible/hash index 89677461b..876f695aa 100644 --- a/repos/base/recipes/src/test-reconstructible/hash +++ b/repos/base/recipes/src/test-reconstructible/hash @@ -1 +1 @@ -2019-06-04 1ccc7b361eabfade36a7a5c9f14d376c86ab6037 +2019-07-08 fc002925eda6f7db5206b9cee3a9822aa1cd1f41 diff --git a/repos/base/recipes/src/test-registry/hash b/repos/base/recipes/src/test-registry/hash index 8ed3ac6fc..dafaecbeb 100644 --- a/repos/base/recipes/src/test-registry/hash +++ b/repos/base/recipes/src/test-registry/hash @@ -1 +1 @@ -2019-06-04 8db0ee218510488d127e0c57efbd899dd1a41730 +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 39cdd0ded..9a6f048c2 100644 --- a/repos/base/recipes/src/test-rm_fault/hash +++ b/repos/base/recipes/src/test-rm_fault/hash @@ -1 +1 @@ -- +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 39cdd0ded..d29fc898b 100644 --- a/repos/base/recipes/src/test-rm_nested/hash +++ b/repos/base/recipes/src/test-rm_nested/hash @@ -1 +1 @@ -- +2019-07-08 367fb9c90705182addcaa2f94b6307dd2aa4ff6c diff --git a/repos/base/recipes/src/test-sanitizer/hash b/repos/base/recipes/src/test-sanitizer/hash index 1c5cdcb11..feefe59fd 100644 --- a/repos/base/recipes/src/test-sanitizer/hash +++ b/repos/base/recipes/src/test-sanitizer/hash @@ -1 +1 @@ -2019-06-05 10ac3bc7fbdf6f4c0a77bae227f6453116e9185d +2019-07-08 9fa40d8b5e824b1768c24feb89bfec1392f01740 diff --git a/repos/base/recipes/src/test-segfault/hash b/repos/base/recipes/src/test-segfault/hash index 4462554b3..3e02b96a0 100644 --- a/repos/base/recipes/src/test-segfault/hash +++ b/repos/base/recipes/src/test-segfault/hash @@ -1 +1 @@ -2019-06-04 b5c282e19522c550f402815eff261c2c4df77b80 +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 130386364..449a16ce7 100644 --- a/repos/base/recipes/src/test-stack_smash/hash +++ b/repos/base/recipes/src/test-stack_smash/hash @@ -1 +1 @@ -2019-06-04 bbe0406ec40eaecb32005efdc9cbd84981995ea2 +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 5afde4f69..2ad4f4b76 100644 --- a/repos/base/recipes/src/test-synced_interface/hash +++ b/repos/base/recipes/src/test-synced_interface/hash @@ -1 +1 @@ -2019-06-04 07923c2b47e960b654dfbc8b5d2544ceaaf4a802 +2019-07-08 646ab813d96cc31c9808162daee4f81e7f4bac0d diff --git a/repos/base/recipes/src/test-timer/hash b/repos/base/recipes/src/test-timer/hash index 9a0626b8e..e3ec2851e 100644 --- a/repos/base/recipes/src/test-timer/hash +++ b/repos/base/recipes/src/test-timer/hash @@ -1 +1 @@ -2019-06-05 994b8c82d5915b04f050b4383bbd1fe56df4a2f1 +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 3f74c7c5f..64d99fdbd 100644 --- a/repos/base/recipes/src/test-xml_generator/hash +++ b/repos/base/recipes/src/test-xml_generator/hash @@ -1 +1 @@ -2019-06-05 4bfb6d87ebf9870934643c7f4ba5ba22c7823aea +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 770bb48f1..d5e4a2c7b 100644 --- a/repos/base/recipes/src/test-xml_node/hash +++ b/repos/base/recipes/src/test-xml_node/hash @@ -1 +1 @@ -2019-06-04 e65d231f4afda0678a1624027c0cf14a54ca9a44 +2019-07-08 f2685df4451bd8b09fb4a24fd15dd7abd931e873 diff --git a/repos/base/src/lib/ldso/main.cc b/repos/base/src/lib/ldso/main.cc index ba353838b..bc7490dbb 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/dde_bsd/recipes/pkg/bsd_audio_drv/hash b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash index 39cdd0ded..6c3c5dde2 100644 --- a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash @@ -1 +1 @@ -- +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 39cdd0ded..5932fff8c 100644 --- a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash @@ -1 +1 @@ -- +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 39cdd0ded..591ee3751 100644 --- a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash @@ -1 +1 @@ -- +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 51bc40ac3..7c5082b6e 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-29 d301847c13a2f8c2659f4fdb634a8bfa185b2e27 +2019-07-08 b0fc29349329ebc70e7f19cea93a23341ad9ec7a diff --git a/repos/dde_linux/fec.list b/repos/dde_linux/fec.list index 9f83f66c2..1ad83228b 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 000000000..2667139eb --- /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 3decced6c..000000000 --- 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 4b0b4ee77..1d6f0817e 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 6fe905347..914809fc3 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 bd72fdf76..ac25d38e6 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/recipes/pkg/drivers_interactive-rpi/hash b/repos/dde_linux/recipes/pkg/drivers_interactive-rpi/hash index 39cdd0ded..1c6355ff8 100644 --- a/repos/dde_linux/recipes/pkg/drivers_interactive-rpi/hash +++ b/repos/dde_linux/recipes/pkg/drivers_interactive-rpi/hash @@ -1 +1 @@ -- +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 39cdd0ded..bd7a13642 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-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 39cdd0ded..f273507f3 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-07-08 3fbff923bd3dacb912bd41f7814e39d8dbcf15b4 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 000000000..b9ad93851 --- /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 000000000..97bdb9a0c --- /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 000000000..8c4ec6cb4 --- /dev/null +++ b/repos/dde_linux/recipes/pkg/drivers_nic-imx7d_sabre/hash @@ -0,0 +1 @@ +2019-07-08 22eb1f5c9d136d343223df400af544eff2bad931 diff --git a/repos/dde_linux/recipes/pkg/wifi/hash b/repos/dde_linux/recipes/pkg/wifi/hash index d257e9e18..6cd6a1335 100644 --- a/repos/dde_linux/recipes/pkg/wifi/hash +++ b/repos/dde_linux/recipes/pkg/wifi/hash @@ -1 +1 @@ -2019-06-02 eb2cc52667e4610c8bbddf85a24f97e6cd8a3ce0 +2019-07-08 3b58b141d1c4b2b9fa9629f76844bbbf103741d1 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 000000000..91a38338d --- /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 000000000..f75b339c5 --- /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 000000000..60a2d6e17 --- /dev/null +++ b/repos/dde_linux/recipes/raw/drivers_nic-imx7d_sabre/hash @@ -0,0 +1 @@ +2019-06-27 583a26eccfd3241f727170f5d9451c9f2d55d3b4 diff --git a/repos/dde_linux/recipes/src/fec_nic_drv/hash b/repos/dde_linux/recipes/src/fec_nic_drv/hash index 39cdd0ded..362feac93 100644 --- a/repos/dde_linux/recipes/src/fec_nic_drv/hash +++ b/repos/dde_linux/recipes/src/fec_nic_drv/hash @@ -1 +1 @@ -- +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 da8ae7cc2..69d5a6a3a 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-29 dd0c4fb4fa6a2d705b2425d2d7b615924a5ec125 +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 9ce661165..b633d5f3e 100644 --- a/repos/dde_linux/recipes/src/usb_drv/hash +++ b/repos/dde_linux/recipes/src/usb_drv/hash @@ -1 +1 @@ -2019-05-29 eb5b5c18902299f3b05a20a52fd339698ba2d910 +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 152424c7c..6775ffd18 100644 --- a/repos/dde_linux/recipes/src/vfs_lxip/hash +++ b/repos/dde_linux/recipes/src/vfs_lxip/hash @@ -1 +1 @@ -2019-06-05-a 8784b5b751c2211092e3c051a1d2c902af696ff4 +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 2f8d26c94..f7ea9869d 100644 --- a/repos/dde_linux/recipes/src/wifi_drv/hash +++ b/repos/dde_linux/recipes/src/wifi_drv/hash @@ -1 +1 @@ -2019-05-29 104b96104d6bbce09cb96e0278ba7abe779dafe8 +2019-07-08 b47def76b9c9e2b6d5f316ca74831b09cec30918 diff --git a/repos/dde_linux/src/drivers/nic/fec/dummy.c b/repos/dde_linux/src/drivers/nic/fec/dummy.c index d0a1aee5a..6284a723d 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,18 +214,53 @@ 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; } +bool of_property_read_bool(const struct device_node *np, const char *propname) +{ + TRACE_AND_STOP; +} + +void phy_led_triggers_unregister(struct phy_device *phy) +{ + TRACE_AND_STOP; +} + +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; @@ -187,12 +278,6 @@ int ptp_clock_unregister(struct ptp_clock *ptp) return -1; } -int regulator_disable(struct regulator *r) -{ - TRACE_AND_STOP; - return -1; -} - bool page_is_pfmemalloc(struct page *page) { TRACE_AND_STOP; @@ -214,6 +299,52 @@ void read_unlock_bh(rwlock_t * l) TRACE_AND_STOP; } +int regulator_disable(struct regulator *r) +{ + TRACE_AND_STOP; + return -1; +} + +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; +} + +void sk_free(struct sock *sk) +{ + TRACE_AND_STOP; +} + +void sock_efree(struct sk_buff *skb) +{ + TRACE_AND_STOP; +} + +int strcmp(const char *s1, const char *s2) +{ + TRACE_AND_STOP; + return -1; +} + +char *strncpy(char *dst, const char *src, size_t s) +{ + TRACE_AND_STOP; +} + +int sysfs_create_link_nowarn(struct kobject *kobj, + struct kobject *target, + const char *name) +{ + TRACE_AND_STOP; +} + +void sysfs_remove_link(struct kobject *kobj, const char *name) +{ + TRACE_AND_STOP; +} + unsigned int tcp_hdrlen(const struct sk_buff *skb) { TRACE_AND_STOP; @@ -252,42 +383,15 @@ void unregister_netdev(struct net_device * d) TRACE_AND_STOP; } +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; } -void module_put(struct module *mod) -{ - TRACE_AND_STOP; -} - -void put_device(struct device *dev) -{ - TRACE_AND_STOP; -} - -int strcmp(const char *s1, const char *s2) -{ - TRACE_AND_STOP; - return -1; -} - -void class_unregister(struct class *cls) -{ - TRACE_AND_STOP; -} - -void bus_unregister(struct bus_type *bus) -{ - TRACE_AND_STOP; -} - -void driver_unregister(struct device_driver *drv) -{ - 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 e60e6e23d..9a0c2ea14 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,107 +1177,46 @@ int device_init_wakeup(struct device *dev, bool val) return 0; } +int device_set_wakeup_enable(struct device *dev, bool enable) +{ + TRACE; + return 0; +} + struct regulator *__must_check devm_regulator_get(struct device *dev, const char *id) { TRACE; return nullptr; } -struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, unsigned int index) -{ - TRACE; - return nullptr; -} - -bool of_phy_is_fixed_link(struct device_node *np) -{ - TRACE; - return 0; -} - -int pinctrl_pm_select_default_state(struct device *dev) -{ - TRACE; - return -1; -} - -int pinctrl_pm_select_sleep_state(struct device *dev) -{ - TRACE; - return -1; -} - -struct resource *platform_get_resource(struct platform_device * d, unsigned r1, unsigned r2) -{ - TRACE; - return nullptr; -} - -void pm_runtime_enable(struct device *dev) +void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, size_t size, + enum dma_data_direction dir) { TRACE; } -void pm_runtime_get_noresume(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; } -int pm_runtime_set_active(struct device *dev) -{ - TRACE; - return 0; -} - -void pm_runtime_set_autosuspend_delay(struct device *dev, int delay) -{ - TRACE; -} - -void pm_runtime_use_autosuspend(struct device *dev) -{ - TRACE; -} - -struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, struct device *parent) -{ - TRACE; - return (ptp_clock*)0xdeadbeef; -} - -int regulator_enable(struct regulator * d) -{ - TRACE; - return 0; -} - -int class_register(struct class_ *cls) -{ - TRACE; - return 0; -} - -int try_module_get(struct module *mod) -{ - TRACE; - return -1; -} - struct device *get_device(struct device *dev) { TRACE; return dev; } -int device_bind_driver(struct device *dev) +struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, unsigned int index) { TRACE; - return 0; + return nullptr; } -void netif_tx_start_all_queues(struct net_device *dev) +bool netdev_uses_dsa(struct net_device *dev) { TRACE; + return false; } void netif_tx_lock_bh(struct net_device *dev) @@ -1263,18 +1224,7 @@ void netif_tx_lock_bh(struct net_device *dev) TRACE; } -int device_set_wakeup_enable(struct device *dev, bool enable) -{ - TRACE; - return 0; -} - -void trace_consume_skb(struct sk_buff * sb) -{ - TRACE; -} - -void trace_kfree_skb(struct sk_buff * sb, void * p) +void netif_tx_start_all_queues(struct net_device *dev) { TRACE; } @@ -1289,22 +1239,17 @@ void netif_wake_queue(struct net_device * d) TRACE; } -bool netdev_uses_dsa(struct net_device *dev) +const void *of_get_mac_address(struct device_node *np) { TRACE; - return false; + return nullptr; } -void dma_sync_single_for_device(struct device *dev, dma_addr_t addr, - size_t size, enum dma_data_direction dir) -{ - TRACE; -} +int of_machine_is_compatible(const char *compat) -void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, size_t size, - enum dma_data_direction dir) { TRACE; + return 0; } void of_node_put(struct device_node *node) @@ -1312,12 +1257,102 @@ void of_node_put(struct device_node *node) TRACE; } -const void *of_get_mac_address(struct device_node *np) +bool of_phy_is_fixed_link(struct device_node *np) +{ + TRACE; + return 0; +} + +void phy_led_trigger_change_speed(struct phy_device *phy) +{ + TRACE; +} + +int phy_led_triggers_register(struct phy_device *phy) +{ + TRACE; + return -1; +} + +int pinctrl_pm_select_default_state(struct device *dev) +{ + TRACE; + return -1; +} + +int pinctrl_pm_select_sleep_state(struct device *dev) +{ + TRACE; + return -1; +} + +int platform_get_irq_byname(struct platform_device *dev, const char *name) +{ + TRACE; + return -1; +} + +struct resource *platform_get_resource(struct platform_device * d, unsigned r1, unsigned r2) { TRACE; return nullptr; } +int platform_irq_count(struct platform_device *dev) +{ + TRACE; + return 0; +} + +void pm_runtime_enable(struct device *dev) +{ + TRACE; +} + +void pm_runtime_get_noresume(struct device *dev) +{ + TRACE; +} + +int pm_runtime_set_active(struct device *dev) +{ + TRACE; + return 0; +} + +void pm_runtime_use_autosuspend(struct device *dev) +{ + TRACE; +} + +void pm_runtime_set_autosuspend_delay(struct device *dev, int delay) +{ + TRACE; +} + +struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, struct device *parent) +{ + TRACE; + return (ptp_clock*)0xdeadbeef; +} + +void put_device(struct device *dev) +{ + TRACE; +} + +int regulator_enable(struct regulator * d) +{ + TRACE; + return 0; +} + +int request_module(const char *fmt, ...) +{ + TRACE; + return 0; +} + void rtnl_lock(void) { TRACE; @@ -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 c376188eb..685e04125 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 82651bfe0..117aa615f 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 2510b2509..2650596cb 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 a15795c73..a3eda534e 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 a4d67a69b..896bd7da7 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 5a687d351..cbb5aa69b 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 2ed0ab345..8f6f580a8 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 *); diff --git a/repos/dde_rump/recipes/src/rump/hash b/repos/dde_rump/recipes/src/rump/hash index b3ecd3e45..3e1f82910 100644 --- a/repos/dde_rump/recipes/src/rump/hash +++ b/repos/dde_rump/recipes/src/rump/hash @@ -1 +1 @@ -2019-05-29 dafd374922d3d37c56194a46f9880bae6841d9a6 +2019-07-08 e7e8677a984c1a07b7d5d83333a8624177cc16f1 diff --git a/repos/demo/recipes/src/demo/hash b/repos/demo/recipes/src/demo/hash index 39cdd0ded..db7f64e70 100644 --- a/repos/demo/recipes/src/demo/hash +++ b/repos/demo/recipes/src/demo/hash @@ -1 +1 @@ -- +2019-07-08 e08ff86c60bbe0bdcbb39288cbd08574074191b6 diff --git a/repos/gems/lib/mk/vfs_trace.mk b/repos/gems/lib/mk/vfs_trace.mk new file mode 100644 index 000000000..a68030762 --- /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/recipes/api/gems/hash b/repos/gems/recipes/api/gems/hash index 9a69873a2..434bd18f2 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 8d97c73ec..1b56cfc35 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 2a81bcda0..090bd0d9b 100644 --- a/repos/gems/recipes/pkg/depot_download/hash +++ b/repos/gems/recipes/pkg/depot_download/hash @@ -1 +1 @@ -2019-06-02 f02e679ea033f1f810b9d81ceac23b8f864933a6 +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 85ca278b6..82097b2b5 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 39cdd0ded..76eb4969e 100644 --- a/repos/gems/recipes/pkg/drivers_nic-muen/hash +++ b/repos/gems/recipes/pkg/drivers_nic-muen/hash @@ -1 +1 @@ -- +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 39cdd0ded..3ea2ea135 100644 --- a/repos/gems/recipes/pkg/drivers_nic-pc/hash +++ b/repos/gems/recipes/pkg/drivers_nic-pc/hash @@ -1 +1 @@ -- +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 39cdd0ded..66b5d23ae 100644 --- a/repos/gems/recipes/pkg/drivers_nic-rpi/hash +++ b/repos/gems/recipes/pkg/drivers_nic-rpi/hash @@ -1 +1 @@ -- +2019-07-08 3a7d056f0f545dffa0ae49533d9c8677dc7bd48c diff --git a/repos/gems/recipes/pkg/fonts_fs/hash b/repos/gems/recipes/pkg/fonts_fs/hash index d5fb90af1..1e8cedceb 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 39cdd0ded..fbbddee88 100644 --- a/repos/gems/recipes/pkg/motif_decorator/hash +++ b/repos/gems/recipes/pkg/motif_decorator/hash @@ -1 +1 @@ -- +2019-07-08 159ffae61e8028b831fc5d11c4669efc670c5238 diff --git a/repos/gems/recipes/pkg/motif_wm/hash b/repos/gems/recipes/pkg/motif_wm/hash index 39cdd0ded..0638743d3 100644 --- a/repos/gems/recipes/pkg/motif_wm/hash +++ b/repos/gems/recipes/pkg/motif_wm/hash @@ -1 +1 @@ -- +2019-07-08 b696d2f501c09afe96aa5525d76c081a47c8be7b diff --git a/repos/gems/recipes/pkg/motif_wm/runtime b/repos/gems/recipes/pkg/motif_wm/runtime index c01a56275..b963b61c9 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/nano3d/hash b/repos/gems/recipes/pkg/nano3d/hash index 39cdd0ded..2ee0eae3c 100644 --- a/repos/gems/recipes/pkg/nano3d/hash +++ b/repos/gems/recipes/pkg/nano3d/hash @@ -1 +1 @@ -- +2019-07-08 8a93c3f6de1b79499eb52e1e938866a89b0dab4e diff --git a/repos/gems/recipes/pkg/sculpt-installation/hash b/repos/gems/recipes/pkg/sculpt-installation/hash index 2d096950f..8e194e958 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/README b/repos/gems/recipes/pkg/sculpt/README index 23eaf68ba..e46491f13 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/archives b/repos/gems/recipes/pkg/sculpt/archives index dcc769efb..21c673f1d 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/recipes/pkg/sculpt/hash b/repos/gems/recipes/pkg/sculpt/hash index dc2f1e787..edff5cc6d 100644 --- a/repos/gems/recipes/pkg/sculpt/hash +++ b/repos/gems/recipes/pkg/sculpt/hash @@ -1 +1 @@ -2019-06-02 5969e131a97d746a9c84785197951e49799075eb +2019-07-08 b48e3fc351006cdc133c0b644d06bfc4dc413a7c diff --git a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash index 1ccd642df..ff46499f4 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 7028d2c97..8a3048943 100644 --- a/repos/gems/recipes/pkg/terminal/hash +++ b/repos/gems/recipes/pkg/terminal/hash @@ -1 +1 @@ -2019-06-02 f4b9f2297ef53745d99b74ded3834d32fe3df472 +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 6ebeb81e0..7a5649653 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-05 b5a6f6e233d11443d0122f97ebca9ccb7f5db339 +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 3ad2aeb5d..282228591 100644 --- a/repos/gems/recipes/pkg/test-fs_tool/hash +++ b/repos/gems/recipes/pkg/test-fs_tool/hash @@ -1 +1 @@ -2019-06-05 ef6426edd30e4cf117549f50b099faa3be9de7cf +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 f4b5414fd..ce94b2dec 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-05 b489febdf56bcb3af09b33768ffa2744694a9e11 +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 371ca3c5a..a1a7b87d3 100644 --- a/repos/gems/recipes/pkg/test-magic_ring_buffer/hash +++ b/repos/gems/recipes/pkg/test-magic_ring_buffer/hash @@ -1 +1 @@ -2019-06-05 3c0853fa4a8ff0fae707d38933585f16bb3cd31d +2019-07-08 b61895c94038ac6bf263884df31057b7db3bf471 diff --git a/repos/gems/recipes/pkg/test-pipe/hash b/repos/gems/recipes/pkg/test-pipe/hash index 93d125d05..33263f8e9 100644 --- a/repos/gems/recipes/pkg/test-pipe/hash +++ b/repos/gems/recipes/pkg/test-pipe/hash @@ -1 +1 @@ -2019-06-05 9baf0e9fa5978ab85bc0aaefe81ce6e897e63c2f +2019-07-08 75e61a1cf66170ef9ce78f983c07ed23e879341e diff --git a/repos/gems/recipes/pkg/themed_decorator/hash b/repos/gems/recipes/pkg/themed_decorator/hash index 63ce5d915..4d0527ae1 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 669ecf158..66c400660 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/themed_wm/runtime b/repos/gems/recipes/pkg/themed_wm/runtime index 8bff9dca6..39f04e7e5 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/trace_fs/README b/repos/gems/recipes/pkg/trace_fs/README new file mode 100644 index 000000000..5b5813f54 --- /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 000000000..6565eacb3 --- /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 000000000..5d42836f7 --- /dev/null +++ b/repos/gems/recipes/pkg/trace_fs/hash @@ -0,0 +1 @@ +2019-07-08 e96823d8956e3a27b07dfe8936a58e7dfda0e228 diff --git a/repos/gems/recipes/pkg/trace_fs/runtime b/repos/gems/recipes/pkg/trace_fs/runtime new file mode 100644 index 000000000..eaf5201d8 --- /dev/null +++ b/repos/gems/recipes/pkg/trace_fs/runtime @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/repos/gems/recipes/pkg/window_layouter/hash b/repos/gems/recipes/pkg/window_layouter/hash index 95f2c0c77..f93f9a53c 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 39cdd0ded..7ec29ad80 100644 --- a/repos/gems/recipes/pkg/wm/hash +++ b/repos/gems/recipes/pkg/wm/hash @@ -1 +1 @@ -- +2019-07-08 319598aabf81c51a8c9c3ecaf06ede2c908cd859 diff --git a/repos/gems/recipes/pkg/wm/runtime b/repos/gems/recipes/pkg/wm/runtime index 76bfe5f31..9c92c01a9 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/hash b/repos/gems/recipes/raw/motif_wm/hash index a2de4a1c6..e5c2b06c1 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/motif_wm/wm.config b/repos/gems/recipes/raw/motif_wm/wm.config index 0296db990..065156753 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/hash b/repos/gems/recipes/raw/wm/hash index 49fd90bc9..909ea1aa8 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/raw/wm/wm.config b/repos/gems/recipes/raw/wm/wm.config index 862bf4f98..080f5dc4e 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/recipes/src/backdrop/hash b/repos/gems/recipes/src/backdrop/hash index 39cdd0ded..c03eca630 100644 --- a/repos/gems/recipes/src/backdrop/hash +++ b/repos/gems/recipes/src/backdrop/hash @@ -1 +1 @@ -- +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 39cdd0ded..0d73fc3c9 100644 --- a/repos/gems/recipes/src/cpu_load_display/hash +++ b/repos/gems/recipes/src/cpu_load_display/hash @@ -1 +1 @@ -- +2019-07-08 7aeab5d9168ab0451eeb00bfa50ac3b50fa35486 diff --git a/repos/gems/recipes/src/decorator/hash b/repos/gems/recipes/src/decorator/hash index 39cdd0ded..7d1902a43 100644 --- a/repos/gems/recipes/src/decorator/hash +++ b/repos/gems/recipes/src/decorator/hash @@ -1 +1 @@ -- +2019-07-08 62dda47c52dc4763c4fccfe4ecf4a695f62f7349 diff --git a/repos/gems/recipes/src/depot_deploy/hash b/repos/gems/recipes/src/depot_deploy/hash index 39cdd0ded..92277e9a6 100644 --- a/repos/gems/recipes/src/depot_deploy/hash +++ b/repos/gems/recipes/src/depot_deploy/hash @@ -1 +1 @@ -- +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 da43f92c5..be3609a1f 100644 --- a/repos/gems/recipes/src/depot_download_manager/hash +++ b/repos/gems/recipes/src/depot_download_manager/hash @@ -1 +1 @@ -2019-05-29 8f8e7f64749d1ad8d3d4aef3aaa2af001ec04969 +2019-07-08 bc8d09bc26779ebd2d6cfcadf5d276ca3f6bf9fd diff --git a/repos/gems/recipes/src/depot_query/content.mk b/repos/gems/recipes/src/depot_query/content.mk index 22ffb5017..19ba54374 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/recipes/src/depot_query/hash b/repos/gems/recipes/src/depot_query/hash index 14d703566..31faa7320 100644 --- a/repos/gems/recipes/src/depot_query/hash +++ b/repos/gems/recipes/src/depot_query/hash @@ -1 +1 @@ -2019-06-05 76065faf7e557b77d93a3e872ce9c75e91d04cca +2019-07-08 f4cc271fd08aaaae87171f546b1902c13a03f08f diff --git a/repos/gems/recipes/src/driver_manager/hash b/repos/gems/recipes/src/driver_manager/hash index 9cb7f14d5..ae5a75380 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 ddf25cd3b..40f8057b5 100644 --- a/repos/gems/recipes/src/file_terminal/hash +++ b/repos/gems/recipes/src/file_terminal/hash @@ -1 +1 @@ -2019-05-29 47d47d61c6ea8422ca2c4295cbdfafcc1b6d5f13 +2019-07-08 90e677c3356724bbb21cd1c5692f89d4cf644e64 diff --git a/repos/gems/recipes/src/fs_query/hash b/repos/gems/recipes/src/fs_query/hash index 5f8b4511a..a1dd12993 100644 --- a/repos/gems/recipes/src/fs_query/hash +++ b/repos/gems/recipes/src/fs_query/hash @@ -1 +1 @@ -2019-06-05 5b0e0c54d6d5b2335fc062ad9f71400fef04da79 +2019-07-08 5a0803d3c334957ca40f97bfbbb4b447f6630b74 diff --git a/repos/gems/recipes/src/fs_tool/hash b/repos/gems/recipes/src/fs_tool/hash index 647c2cd85..aa047250d 100644 --- a/repos/gems/recipes/src/fs_tool/hash +++ b/repos/gems/recipes/src/fs_tool/hash @@ -1 +1 @@ -2019-06-05 b2c67c3d11809f306b9354330a62c5968d6362ed +2019-07-08 0f466f46baf793e94db12ceda686599b9932fa73 diff --git a/repos/gems/recipes/src/gpt_write/hash b/repos/gems/recipes/src/gpt_write/hash index 2cba44673..f1b60faaf 100644 --- a/repos/gems/recipes/src/gpt_write/hash +++ b/repos/gems/recipes/src/gpt_write/hash @@ -1 +1 @@ -2019-05-29 afcf0874945c55e1742a28eb948d888d674f3717 +2019-07-08 29b9d1349010dc191d274173acdc41f869aa2fd9 diff --git a/repos/gems/recipes/src/menu_view/hash b/repos/gems/recipes/src/menu_view/hash index 5dd5eb36d..29f44b1d9 100644 --- a/repos/gems/recipes/src/menu_view/hash +++ b/repos/gems/recipes/src/menu_view/hash @@ -1 +1 @@ -2019-05-29 2472095c7285d6b2c6f86f35676fe38d5033dd91 +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 39cdd0ded..36bd9b14c 100644 --- a/repos/gems/recipes/src/mixer_gui_qt/hash +++ b/repos/gems/recipes/src/mixer_gui_qt/hash @@ -1 +1 @@ -- +2019-07-08 c237375f4389fc0fd19242cf70d09d1cb39f1e68 diff --git a/repos/gems/recipes/src/nano3d/hash b/repos/gems/recipes/src/nano3d/hash index 39cdd0ded..16a1ff14e 100644 --- a/repos/gems/recipes/src/nano3d/hash +++ b/repos/gems/recipes/src/nano3d/hash @@ -1 +1 @@ -- +2019-07-08 71f6297bf886866c5e59829058041d45dfe173cd diff --git a/repos/gems/recipes/src/nit_fader/hash b/repos/gems/recipes/src/nit_fader/hash index db73d64b7..4e532344e 100644 --- a/repos/gems/recipes/src/nit_fader/hash +++ b/repos/gems/recipes/src/nit_fader/hash @@ -1 +1 @@ -2019-05-29 803daae214f6213a9c178ab42dcfc6b56b0ab09c +2019-07-08 75f58beb386490e5c97e50813a199d8337b4f274 diff --git a/repos/gems/recipes/src/pipe/hash b/repos/gems/recipes/src/pipe/hash index be5b40e3a..4d191ef3d 100644 --- a/repos/gems/recipes/src/pipe/hash +++ b/repos/gems/recipes/src/pipe/hash @@ -1 +1 @@ -2019-06-04 7a1cc28db04bc4c3605950301dc687cb6fede015 +2019-07-08 8590636a19c13674cb2dc2bab20f4b1e86189c69 diff --git a/repos/gems/recipes/src/sculpt_manager/hash b/repos/gems/recipes/src/sculpt_manager/hash index 091bd460c..85ea332fe 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 801783095..05cb4b034 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 e4582274e..eaf4346d6 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/terminal/used_apis b/repos/gems/recipes/src/terminal/used_apis index aec14c9df..ad8294e06 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/recipes/src/test-magic_ring_buffer/hash b/repos/gems/recipes/src/test-magic_ring_buffer/hash index b61b82063..721d18ac2 100644 --- a/repos/gems/recipes/src/test-magic_ring_buffer/hash +++ b/repos/gems/recipes/src/test-magic_ring_buffer/hash @@ -1 +1 @@ -2019-06-04 23f8b292972963d6db2c79838c8eef5c33792702 +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 39cdd0ded..a90689c47 100644 --- a/repos/gems/recipes/src/test-tiled_wm/hash +++ b/repos/gems/recipes/src/test-tiled_wm/hash @@ -1 +1 @@ -- +2019-07-08 57743b41104d0d38dad7ae3b4021e2336b411136 diff --git a/repos/gems/recipes/src/themed_decorator/hash b/repos/gems/recipes/src/themed_decorator/hash index 56847b3d3..9f1fc02b6 100644 --- a/repos/gems/recipes/src/themed_decorator/hash +++ b/repos/gems/recipes/src/themed_decorator/hash @@ -1 +1 @@ -2019-05-29 137947b7099af76e0623f56aea84432cd4b716cf +2019-07-08 3547ec134252732eec879cbd6a5df5bfb83653cd diff --git a/repos/gems/recipes/src/vfs_audit/hash b/repos/gems/recipes/src/vfs_audit/hash index 01ed60dcc..670c30fae 100644 --- a/repos/gems/recipes/src/vfs_audit/hash +++ b/repos/gems/recipes/src/vfs_audit/hash @@ -1 +1 @@ -2019-06-05 5e76c949f3e982fefab9d3565f5a2b9f3498d07b +2019-07-08 fcb63d15d5f32b02918caa19280ad3d39875e5b0 diff --git a/repos/gems/recipes/src/vfs_import/hash b/repos/gems/recipes/src/vfs_import/hash index e16a46512..09a5b4305 100644 --- a/repos/gems/recipes/src/vfs_import/hash +++ b/repos/gems/recipes/src/vfs_import/hash @@ -1 +1 @@ -2019-06-05 3ed78428b48e10538f75c2524efe8dc80732bf5b +2019-07-08 f313c7cd49cb260c3519315775e9a0c3ad1306e5 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 000000000..15f93fa1c --- /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 000000000..321f39cb1 --- /dev/null +++ b/repos/gems/recipes/src/vfs_trace/hash @@ -0,0 +1 @@ +2019-07-08 c99a1f4ea7f75228d0fe0934bf9787ef5779fe7f 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 000000000..1d6ba0fc7 --- /dev/null +++ b/repos/gems/recipes/src/vfs_trace/used_apis @@ -0,0 +1,5 @@ +base +os +so +vfs +gems diff --git a/repos/gems/recipes/src/vfs_ttf/hash b/repos/gems/recipes/src/vfs_ttf/hash index 99d1a59e9..e3da30852 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 39cdd0ded..cd37c8c47 100644 --- a/repos/gems/recipes/src/window_layouter/hash +++ b/repos/gems/recipes/src/window_layouter/hash @@ -1 +1 @@ -- +2019-07-08 6f3fbc037259bb825faa791a7775090f11373792 diff --git a/repos/gems/recipes/src/wm/hash b/repos/gems/recipes/src/wm/hash index d372d13dc..996210d8d 100644 --- a/repos/gems/recipes/src/wm/hash +++ b/repos/gems/recipes/src/wm/hash @@ -1 +1 @@ -2019-05-29 53d789ea778cd48f5d977fadef29de40b439000a +2019-07-08 e36e50e1124b5a943e3cbdbab060cf1c229ca50a diff --git a/repos/gems/run/depot_deploy.run b/repos/gems/run/depot_deploy.run index 31a392a43..36efccf83 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 { - diff --git a/repos/gems/run/depot_download.run b/repos/gems/run/depot_download.run index 7375a3290..038313bec 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 rpi3] || [expr [have_spec imx53] && [have_spec trustzone]]} { puts "Run script does not support this platform." exit 0 diff --git a/repos/gems/run/launcher.run b/repos/gems/run/launcher.run index 385d08146..e672faa8a 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.run b/repos/gems/run/sculpt.run index 1b50c14ac..699dd30a4 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 { + + + + + + @@ -498,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.06" } + return "19.07" } # write file with newline (for producing nice output when using 'cat /VERSION') set fd [open [run_dir]/genode/VERSION w] diff --git a/repos/gems/run/sculpt/clipboard.config b/repos/gems/run/sculpt/clipboard.config new file mode 100644 index 000000000..927904e41 --- /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 b0623a1ce..f0cf4f7fa 100644 --- a/repos/gems/run/sculpt/fonts.config +++ b/repos/gems/run/sculpt/fonts.config @@ -1,4 +1,4 @@ - + diff --git a/repos/gems/run/sculpt/leitzentrale.config b/repos/gems/run/sculpt/leitzentrale.config index 6e5a8aecf..d463d9b09 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/sculpt/machine.vbox b/repos/gems/run/sculpt/machine.vbox index 00013120b..9e90f44c1 100644 --- a/repos/gems/run/sculpt/machine.vbox +++ b/repos/gems/run/sculpt/machine.vbox @@ -45,6 +45,7 @@ + diff --git a/repos/gems/run/wm.run b/repos/gems/run/wm.run index 78c5f30bb..d337e6eca 100644 --- a/repos/gems/run/wm.run +++ b/repos/gems/run/wm.run @@ -74,7 +74,9 @@ install_config { - + + + @@ -151,8 +153,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 diff --git a/repos/gems/src/app/depot_deploy/child.h b/repos/gems/src/app/depot_deploy/child.h index e35839483..96b820550 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/depot_query/main.cc b/repos/gems/src/app/depot_query/main.cc index 59dd7fdfb..c983c0975 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", [&] () { diff --git a/repos/gems/src/app/gpt_write/main.cc b/repos/gems/src/app/gpt_write/main.cc index 391f8e159..5ff518d33 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); } }; diff --git a/repos/gems/src/app/gpt_write/util.h b/repos/gems/src/app/gpt_write/util.h index 27ccfee1c..385f62f49 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; } diff --git a/repos/gems/src/app/sculpt_manager/deploy.cc b/repos/gems/src/app/sculpt_manager/deploy.cc index 0aa11cc4a..a0e8f980b 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 7b7572386..80c962307 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; } diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 3eec7ef5c..65dae97bf 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 ** @@ -249,6 +266,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); }); @@ -930,6 +957,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 e24a39e17..6655a6d61 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 fa1ea58da..82f5836c1 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 c117d6d5b..0267b6e2c 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 d720b661e..7db7fcc13 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"); diff --git a/repos/gems/src/app/themed_decorator/main.cc b/repos/gems/src/app/themed_decorator/main.cc index 93881c57d..86ea3b369 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(_window_layout.xml(), flush_window_stack_changes); - _window_stack.update_model(xml, flush_window_stack_changes); + model_updated = true; - 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); - - } catch (Xml_node::Invalid_syntax) { - - /* - * 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); } diff --git a/repos/gems/src/app/themed_decorator/window.cc b/repos/gems/src/app/themed_decorator/window.cc index 74fecc38c..f5cae4327 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()); diff --git a/repos/gems/src/app/window_layouter/assign.h b/repos/gems/src/app/window_layouter/assign.h index 41ee36cf8..7d30a047e 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 7cb8cacca..c92d6e355 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 }; @@ -116,6 +118,7 @@ struct Window_layouter::Main : Operations, target.geometry(), _decorator_margins); member.window.outer_geometry(rect); + member.window.maximized(assign.maximized()); }); }); }); @@ -137,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(); } /** @@ -219,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; @@ -244,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 @@ -256,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); } @@ -399,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) { @@ -419,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 d82aca0b1..957046995 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; @@ -463,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; } diff --git a/repos/gems/src/server/terminal/README b/repos/gems/src/server/terminal/README index b2ae8a590..2a3ec4dbb 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/color_palette.h b/repos/gems/src/server/terminal/color_palette.h index 8dd4c654b..7f82fed4b 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 */ diff --git a/repos/gems/src/server/terminal/main.cc b/repos/gems/src/server/terminal/main.cc index dd520c7bb..fbacec3b4 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 3dba87959..ac038323b 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/gems/src/server/wm/main.cc b/repos/gems/src/server/wm/main.cc index 577cff690..de95b140b 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 3284aa94c..50c212ee0 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 000000000..5da945943 --- /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/ports/libc.hash b/repos/libports/ports/libc.hash index f6b196cf1..dbf5ca4b2 100644 --- a/repos/libports/ports/libc.hash +++ b/repos/libports/ports/libc.hash @@ -1 +1 @@ -12ac556f17580c447e7502e0485a662610f59c06 +9252999ee23cfb811e707887ef05bf1283a41597 diff --git a/repos/libports/ports/libc.port b/repos/libports/ports/libc.port index d144f4223..731444268 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/recipes/api/jitterentropy/hash b/repos/libports/recipes/api/jitterentropy/hash index 2e4acf295..fc36dc7d5 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 1bf37f09c..d322f8264 100644 --- a/repos/libports/recipes/api/libc/hash +++ b/repos/libports/recipes/api/libc/hash @@ -1 +1 @@ -2019-05-29 d99ff7780700f7d0ad51fab5522ddc39daec3e7b +2019-07-08 a5dfcad9d182deb17b5e8566102231aac512a63b diff --git a/repos/libports/recipes/api/libc_setjmp/hash b/repos/libports/recipes/api/libc_setjmp/hash index c03227a83..cdf28b240 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 7a83630e1..d454ec04b 100644 --- a/repos/libports/recipes/api/stdcxx/hash +++ b/repos/libports/recipes/api/stdcxx/hash @@ -1 +1 @@ -2019-06-02 dc9280119fb18d413e5ded85e1c202007b033da4 +2019-07-08 3bb6e6088df167fab2110be4487222b125e3efd9 diff --git a/repos/libports/recipes/pkg/acpica/hash b/repos/libports/recipes/pkg/acpica/hash index 39cdd0ded..46e1ae6f8 100644 --- a/repos/libports/recipes/pkg/acpica/hash +++ b/repos/libports/recipes/pkg/acpica/hash @@ -1 +1 @@ -- +2019-07-08 c1ee705dfc3d69f45ba93e08c38a9a719a576683 diff --git a/repos/libports/recipes/pkg/gcov/hash b/repos/libports/recipes/pkg/gcov/hash index ea0a85776..ecd36fef5 100644 --- a/repos/libports/recipes/pkg/gcov/hash +++ b/repos/libports/recipes/pkg/gcov/hash @@ -1 +1 @@ -2019-06-05 39b96a4755cc2c74b6f673c31b19351402f8e961 +2019-07-08 1322d2c9ee4f3884159b27d54a0e1fcc67ad4c28 diff --git a/repos/libports/recipes/pkg/pdf_view/hash b/repos/libports/recipes/pkg/pdf_view/hash index a4ee5bcd3..01c830386 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 ba3db727a..0bfe1ed4b 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/qt5_textedit/runtime b/repos/libports/recipes/pkg/qt5_textedit/runtime index a8fda6b8d..d42dea8a7 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/pkg/test-expat/hash b/repos/libports/recipes/pkg/test-expat/hash index b22fa660e..e97ef3575 100644 --- a/repos/libports/recipes/pkg/test-expat/hash +++ b/repos/libports/recipes/pkg/test-expat/hash @@ -1 +1 @@ -2019-06-05 13d473bcaf47704e0c926d0cd7b3ea04048962bf +2019-07-08 1aaa9eee566ef3e59f5c011144eea7dea95eed0a diff --git a/repos/libports/recipes/pkg/test-gnatio/hash b/repos/libports/recipes/pkg/test-gnatio/hash index 4c1c75470..3f51138f5 100644 --- a/repos/libports/recipes/pkg/test-gnatio/hash +++ b/repos/libports/recipes/pkg/test-gnatio/hash @@ -1 +1 @@ -2019-06-05 232ca54da8d345fa7f274aca9cd64856ece965ec +2019-07-08 9b8a04ad6a71621edd81e6437061214a1fa9715d diff --git a/repos/libports/recipes/pkg/test-ldso/hash b/repos/libports/recipes/pkg/test-ldso/hash index f21a4ab07..b392c94a7 100644 --- a/repos/libports/recipes/pkg/test-ldso/hash +++ b/repos/libports/recipes/pkg/test-ldso/hash @@ -1 +1 @@ -2019-06-05 314bf8ea1209c07c1c7303577b428cc700d7d9ea +2019-07-08 ce628c5aad79736da63251def72f165c86ebcd8c diff --git a/repos/libports/recipes/pkg/test-libc/hash b/repos/libports/recipes/pkg/test-libc/hash index 072c8d9da..b31a033bc 100644 --- a/repos/libports/recipes/pkg/test-libc/hash +++ b/repos/libports/recipes/pkg/test-libc/hash @@ -1 +1 @@ -2019-06-05 e1a79134abcf6aedc7844a929bf02106341e7e4f +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 b60fea710..fc0bd831c 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-05-a bbe03e4d0e31c38c61dd3700866efd70b965c712 +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 55166f99d..0f142930e 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-05-a 9adb1918f69e35693898dab721f0035cf0e9c060 +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 b65e2e08b..b6bbfa1e9 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-05-a 922f5ccee996fdede4be30f7d8e5d5f0e7b10eaa +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 ee01903ff..803f2fb0c 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-05-a 540081156003e4938f2bd06b2fe523570300288c +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 d3db2de61..264b91d9c 100644 --- a/repos/libports/recipes/pkg/test-libc_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_counter/hash @@ -1 +1 @@ -2019-06-05 c7eca85c61b4125e9f2fa2aa794dff5bc365da9c +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 f5c498660..1e589a679 100644 --- a/repos/libports/recipes/pkg/test-libc_getenv/hash +++ b/repos/libports/recipes/pkg/test-libc_getenv/hash @@ -1 +1 @@ -2019-06-05 247e655e050d4f5cad8043c5d6d469a4579a4fbb +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 6c2a8ff0f..e3d22e620 100644 --- a/repos/libports/recipes/pkg/test-libc_pipe/hash +++ b/repos/libports/recipes/pkg/test-libc_pipe/hash @@ -1 +1 @@ -2019-06-05-b ade3618dbfff2d873050ca0f7454c5492dc2ea9e +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 85f326ac3..6350c3503 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs/hash @@ -1 +1 @@ -2019-06-05 44fefa10cdbed255e8bafab702b00af007c54f74 +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 2bea12ae3..ef8028884 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-05 5a43cfc75ee5d2f4e3cb62ec82effe6e8522921f +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 5c6dc6e44..05a19c62c 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-05 429928fba0b5160993d0e96c39bfe66d06f34d63 +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 595a1aede..1a039ba2e 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-05 50dde950f12ac92243f421a38c8f80e06e593a7a +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 09004e4ef..e9b70d5b4 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-05 71aa25571bcc25d1b55302890d77decb9c6af5d2 +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 cb0dc63da..43f582549 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-05 c246aec33e82d685a7134e89e1fd9f69601f18c7 +2019-07-08 22f64e8dc979b277558fce046ddffaedf05b19ee diff --git a/repos/libports/recipes/pkg/test-pthread/hash b/repos/libports/recipes/pkg/test-pthread/hash index 922f051e1..a5f117d29 100644 --- a/repos/libports/recipes/pkg/test-pthread/hash +++ b/repos/libports/recipes/pkg/test-pthread/hash @@ -1 +1 @@ -2019-06-05 412353f3764b3d36cb9bed5c5ef557b3b5e1d34f +2019-07-08 8686358c46627a1302a6c865cd68fa856c32695a diff --git a/repos/libports/recipes/pkg/test-python/hash b/repos/libports/recipes/pkg/test-python/hash index e374d657c..fa25305dd 100644 --- a/repos/libports/recipes/pkg/test-python/hash +++ b/repos/libports/recipes/pkg/test-python/hash @@ -1 +1 @@ -2019-06-05 bb3515d1d72c37979f4d92443f1119528ad8e78c +2019-07-08 f50de1fcc4fb855fec90611bc6b84ffb8fbf3a8b diff --git a/repos/libports/recipes/pkg/test-rust/hash b/repos/libports/recipes/pkg/test-rust/hash index eb6d8226f..b56c29193 100644 --- a/repos/libports/recipes/pkg/test-rust/hash +++ b/repos/libports/recipes/pkg/test-rust/hash @@ -1 +1 @@ -2019-06-05 f1b8a0a591fb4a9993a34c0a5e800096202d2075 +2019-07-08 6c3bac179c7e21d9b9c65c61d6a6415d6d9887b7 diff --git a/repos/libports/recipes/pkg/test-sequence/hash b/repos/libports/recipes/pkg/test-sequence/hash index 9cdcc7579..f5675b037 100644 --- a/repos/libports/recipes/pkg/test-sequence/hash +++ b/repos/libports/recipes/pkg/test-sequence/hash @@ -1 +1 @@ -2019-06-05 e3c41de0f6af7d56adf4ddaabaa3f0a9ed74cb78 +2019-07-08 9fb54ddf5dd984b8ce782dfceb4a348a4dec15db diff --git a/repos/libports/recipes/pkg/test-solo5/hash b/repos/libports/recipes/pkg/test-solo5/hash index 7d03486a3..8e954cf6b 100644 --- a/repos/libports/recipes/pkg/test-solo5/hash +++ b/repos/libports/recipes/pkg/test-solo5/hash @@ -1 +1 @@ -2019-06-05 b4a6dfa92ce3a04c560f822819dfa3706e672e27 +2019-07-08 05843e0dd9e09c69e26f1c05933056a908d4e559 diff --git a/repos/libports/recipes/pkg/test-spark/hash b/repos/libports/recipes/pkg/test-spark/hash index 023a95e6d..1f693f249 100644 --- a/repos/libports/recipes/pkg/test-spark/hash +++ b/repos/libports/recipes/pkg/test-spark/hash @@ -1 +1 @@ -2019-06-05 ee9da06368e6ab383eb07271853060da4d1f601f +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 c220cbd2a..4f311e955 100644 --- a/repos/libports/recipes/pkg/test-spark_exception/hash +++ b/repos/libports/recipes/pkg/test-spark_exception/hash @@ -1 +1 @@ -2019-06-05 859cbbab329e01251630f54342a017f6b9ca0128 +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 49258d96a..36e57acd1 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-05 28579480b7f14324a916aee92365b62b7598c160 +2019-07-08 e25d42450aee436495782834a4fc8e22b2197d24 diff --git a/repos/libports/recipes/pkg/test-stdcxx/hash b/repos/libports/recipes/pkg/test-stdcxx/hash index 0c31f6c5a..a87a4eeed 100644 --- a/repos/libports/recipes/pkg/test-stdcxx/hash +++ b/repos/libports/recipes/pkg/test-stdcxx/hash @@ -1 +1 @@ -2019-06-05 10e02d3b4f171d5150928351a378f7513fb63f8d +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 b49381f0f..974f9ba0f 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-05-a 61155b8796fae9fdaf12686827ed23aa8f0cf869 +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 a5ce4da08..6d545a608 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-05-a 7fa3602a627a6ea4624ce2ea798505a625d242e1 +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 3f949b75b..492d34356 100644 --- a/repos/libports/recipes/pkg/test-timed_semaphore/hash +++ b/repos/libports/recipes/pkg/test-timed_semaphore/hash @@ -1 +1 @@ -2019-06-05 fb1fe0478d4902ff04af00b69ecb7970a86dfb20 +2019-07-08 f5de623e56543fc7a7a23219e70da5fa839b8b2d diff --git a/repos/libports/recipes/raw/qt5_textedit/hash b/repos/libports/recipes/raw/qt5_textedit/hash index d6cf410ad..ef7a9db1e 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/raw/qt5_textedit/textedit.config b/repos/libports/recipes/raw/qt5_textedit/textedit.config index b0d5b6da3..c60c34f46 100644 --- a/repos/libports/recipes/raw/qt5_textedit/textedit.config +++ b/repos/libports/recipes/raw/qt5_textedit/textedit.config @@ -1,4 +1,4 @@ - + diff --git a/repos/libports/recipes/src/acpica/hash b/repos/libports/recipes/src/acpica/hash index 39cdd0ded..29a253731 100644 --- a/repos/libports/recipes/src/acpica/hash +++ b/repos/libports/recipes/src/acpica/hash @@ -1 +1 @@ -- +2019-07-08 bc92bc6bafcef7f45fca255a5e777d8b6f8600ce diff --git a/repos/libports/recipes/src/curl/hash b/repos/libports/recipes/src/curl/hash index c0be98082..05d35f501 100644 --- a/repos/libports/recipes/src/curl/hash +++ b/repos/libports/recipes/src/curl/hash @@ -1 +1 @@ -2019-05-29 fef22a031e6fbd1eda272f2d106fee841dcb2d2d +2019-07-08 152c39789183acc3916a7bc1f09dbadb7886b82e diff --git a/repos/libports/recipes/src/drm/hash b/repos/libports/recipes/src/drm/hash index 39cdd0ded..761cfb33c 100644 --- a/repos/libports/recipes/src/drm/hash +++ b/repos/libports/recipes/src/drm/hash @@ -1 +1 @@ -- +2019-07-08 aa8487ec553dd61838d8e494eea0a844df8074db diff --git a/repos/libports/recipes/src/expat/hash b/repos/libports/recipes/src/expat/hash index 380596926..bf6e4129c 100644 --- a/repos/libports/recipes/src/expat/hash +++ b/repos/libports/recipes/src/expat/hash @@ -1 +1 @@ -2019-06-04 d0ca9329588612025a675841a20df2ae7820a00c +2019-07-08 fc9d34088f394e6e07b0b272d7990fb39a443d4d diff --git a/repos/libports/recipes/src/extract/hash b/repos/libports/recipes/src/extract/hash index f01b319b8..661ed61b1 100644 --- a/repos/libports/recipes/src/extract/hash +++ b/repos/libports/recipes/src/extract/hash @@ -1 +1 @@ -2019-05-29 a64299432cc5c74f3cdc4cd3265961657e68e692 +2019-07-08 4894d8d40bc1db3a03a202b51ca3669816914746 diff --git a/repos/libports/recipes/src/fetchurl/hash b/repos/libports/recipes/src/fetchurl/hash index b2f0faea4..876b0806b 100644 --- a/repos/libports/recipes/src/fetchurl/hash +++ b/repos/libports/recipes/src/fetchurl/hash @@ -1 +1 @@ -2019-05-29 3f991cbb18d4ac982eb5d57e085228bc5470c301 +2019-07-08 26ae8557788e8b36d7681201fc713d897f8a7629 diff --git a/repos/libports/recipes/src/freetype/hash b/repos/libports/recipes/src/freetype/hash index 39cdd0ded..18da94a82 100644 --- a/repos/libports/recipes/src/freetype/hash +++ b/repos/libports/recipes/src/freetype/hash @@ -1 +1 @@ -- +2019-07-08 c2a994348a1056778558f52e84706124d8a5ba7a diff --git a/repos/libports/recipes/src/gcov/hash b/repos/libports/recipes/src/gcov/hash index 44e1c2776..598463098 100644 --- a/repos/libports/recipes/src/gcov/hash +++ b/repos/libports/recipes/src/gcov/hash @@ -1 +1 @@ -2019-06-05 203a340ea2bbf2b5d7fde2aeec0e1f5e67988c64 +2019-07-08 74aa4edc89b8541dbd10c9b107b76c2aeac01e79 diff --git a/repos/libports/recipes/src/gmp/hash b/repos/libports/recipes/src/gmp/hash index f9317c19d..d1f637002 100644 --- a/repos/libports/recipes/src/gmp/hash +++ b/repos/libports/recipes/src/gmp/hash @@ -1 +1 @@ -2019-06-05 7a935d82df3c1ac10d85a8aac6a182b459095d7c +2019-07-08 3e342c70d3b9e05b52e5253efa65bf97f9d99e4d diff --git a/repos/libports/recipes/src/icu/hash b/repos/libports/recipes/src/icu/hash index 39cdd0ded..43161bb7a 100644 --- a/repos/libports/recipes/src/icu/hash +++ b/repos/libports/recipes/src/icu/hash @@ -1 +1 @@ -- +2019-07-08 f4161a0a049115f4420374e59187032df67897ed diff --git a/repos/libports/recipes/src/jbig2dec/hash b/repos/libports/recipes/src/jbig2dec/hash index 7d35e2c26..4c4c957a9 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 39cdd0ded..e3521d050 100644 --- a/repos/libports/recipes/src/jpeg/hash +++ b/repos/libports/recipes/src/jpeg/hash @@ -1 +1 @@ -- +2019-07-08 90d17e5100e209510aec1265ddc8a37129d84f07 diff --git a/repos/libports/recipes/src/libarchive/hash b/repos/libports/recipes/src/libarchive/hash index fb7fd9789..dbff0b753 100644 --- a/repos/libports/recipes/src/libarchive/hash +++ b/repos/libports/recipes/src/libarchive/hash @@ -1 +1 @@ -2019-05-29 caec511fa75b6c137e8710a746e4f9efac7729b5 +2019-07-08 d3ce57dfab6693b6223ff51c4ad960705b7b06d6 diff --git a/repos/libports/recipes/src/libc/hash b/repos/libports/recipes/src/libc/hash index 72e1f06ee..6ff59cf3d 100644 --- a/repos/libports/recipes/src/libc/hash +++ b/repos/libports/recipes/src/libc/hash @@ -1 +1 @@ -2019-06-05 f56484d63f0b1f3cda717166423ef9c91efd1b7c +2019-07-08 9da18c6726ac3dd0cc8bcc8a6e927dd1110ce752 diff --git a/repos/libports/recipes/src/libcrypto/hash b/repos/libports/recipes/src/libcrypto/hash index 3e3c16484..876332c74 100644 --- a/repos/libports/recipes/src/libcrypto/hash +++ b/repos/libports/recipes/src/libcrypto/hash @@ -1 +1 @@ -2019-05-29 aa6555dc1d9d3aa34037c217d99f63813ac4d2d2 +2019-07-08 475c1a095df07aa8dead660c79fea964a4f228c0 diff --git a/repos/libports/recipes/src/libiconv/hash b/repos/libports/recipes/src/libiconv/hash index e0ea8e1d5..908c0567f 100644 --- a/repos/libports/recipes/src/libiconv/hash +++ b/repos/libports/recipes/src/libiconv/hash @@ -1 +1 @@ -2019-06-02 42de54435a1659b1d842500013fc603f41a47cda +2019-07-08 53e35acadff5dfe7c19f4a894cd6633b1f358392 diff --git a/repos/libports/recipes/src/liblzma/hash b/repos/libports/recipes/src/liblzma/hash index d06b52652..4b4c426db 100644 --- a/repos/libports/recipes/src/liblzma/hash +++ b/repos/libports/recipes/src/liblzma/hash @@ -1 +1 @@ -2019-05-29 4a1bd9155bb32462671fedd879dcb60ead231aaf +2019-07-08 06ea31fe85d356020cdfb6533dd5ab4e154dc2f0 diff --git a/repos/libports/recipes/src/libpng/hash b/repos/libports/recipes/src/libpng/hash index 60fe3da9d..73a959075 100644 --- a/repos/libports/recipes/src/libpng/hash +++ b/repos/libports/recipes/src/libpng/hash @@ -1 +1 @@ -2019-05-29 5bb20a02108fdce51f7bcfcdaa054ff537ca5d7e +2019-07-08 52b2fd0806b7e7a3dbba966d32580ae8d0629048 diff --git a/repos/libports/recipes/src/libssh/hash b/repos/libports/recipes/src/libssh/hash index 3b155615b..47a7ad4e9 100644 --- a/repos/libports/recipes/src/libssh/hash +++ b/repos/libports/recipes/src/libssh/hash @@ -1 +1 @@ -2019-05-29 adf72c7ddb6621c4b9ec4b8373419701e4b4696c +2019-07-08 5efa3c0195d187288f6890653b6d7182749c91dc diff --git a/repos/libports/recipes/src/libssl/hash b/repos/libports/recipes/src/libssl/hash index 09f0bd254..460ad008e 100644 --- a/repos/libports/recipes/src/libssl/hash +++ b/repos/libports/recipes/src/libssl/hash @@ -1 +1 @@ -2019-05-29 b43350a6ed3ea733d971957da4bfbc42a4690c79 +2019-07-08 b92168b136fa2fb4e16090723ddc671680f389be diff --git a/repos/libports/recipes/src/mesa/hash b/repos/libports/recipes/src/mesa/hash index 39cdd0ded..03c79a94e 100644 --- a/repos/libports/recipes/src/mesa/hash +++ b/repos/libports/recipes/src/mesa/hash @@ -1 +1 @@ -- +2019-07-08 1bcc30098eaea21755641464818a4c82299fe136 diff --git a/repos/libports/recipes/src/mpc/hash b/repos/libports/recipes/src/mpc/hash index 4186d6f38..7aeb2b62c 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 b396319c5..b4f93b9c0 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 71dae6e15..d4b12e0a1 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 3bfb8d9ce..e9b49120e 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 e88d5a1ee..f9a185b37 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 1b66823cd..c0a9a1266 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 39cdd0ded..907b3a30c 100644 --- a/repos/libports/recipes/src/pcre16/hash +++ b/repos/libports/recipes/src/pcre16/hash @@ -1 +1 @@ -- +2019-07-08 3d8f1a853a35128aab504f473676402c78ede47b diff --git a/repos/libports/recipes/src/pdf_view/hash b/repos/libports/recipes/src/pdf_view/hash index 39cdd0ded..d3d13fc03 100644 --- a/repos/libports/recipes/src/pdf_view/hash +++ b/repos/libports/recipes/src/pdf_view/hash @@ -1 +1 @@ -- +2019-07-08 8fdc1f787aa707a47ab09b32ade38f2df27c8231 diff --git a/repos/libports/recipes/src/posix/hash b/repos/libports/recipes/src/posix/hash index be40d1071..678445492 100644 --- a/repos/libports/recipes/src/posix/hash +++ b/repos/libports/recipes/src/posix/hash @@ -1 +1 @@ -2019-06-05 fb786443a213924c0b68dd46c4204c957f5cc24d +2019-07-08 1b4b7b78fd8b4ee1adea70ada3de80aeb70fd813 diff --git a/repos/libports/recipes/src/python/hash b/repos/libports/recipes/src/python/hash index 5af781e54..1a1bd81bc 100644 --- a/repos/libports/recipes/src/python/hash +++ b/repos/libports/recipes/src/python/hash @@ -1 +1 @@ -2019-06-04 1ccd97e4f88b3d4ededb6db63450f898aa6e2ee2 +2019-07-08 bfa01112479ab3dfef4b4d17634b34e3adac3c0e diff --git a/repos/libports/recipes/src/qt5_calculatorform/hash b/repos/libports/recipes/src/qt5_calculatorform/hash index 39cdd0ded..c95b0c883 100644 --- a/repos/libports/recipes/src/qt5_calculatorform/hash +++ b/repos/libports/recipes/src/qt5_calculatorform/hash @@ -1 +1 @@ -- +2019-07-08 ad3258b1e057495938bdf1ddb8376eb3b88ac5b6 diff --git a/repos/libports/recipes/src/qt5_component/hash b/repos/libports/recipes/src/qt5_component/hash index 39cdd0ded..9d64ec6df 100644 --- a/repos/libports/recipes/src/qt5_component/hash +++ b/repos/libports/recipes/src/qt5_component/hash @@ -1 +1 @@ -- +2019-07-08 df07c3eb360ad24795f5578761cacd5831a5aa20 diff --git a/repos/libports/recipes/src/qt5_core/hash b/repos/libports/recipes/src/qt5_core/hash index 39cdd0ded..29394990d 100644 --- a/repos/libports/recipes/src/qt5_core/hash +++ b/repos/libports/recipes/src/qt5_core/hash @@ -1 +1 @@ -- +2019-07-08 aeb6b73882673051ab5e30d48729f031f26090ad diff --git a/repos/libports/recipes/src/qt5_gui/hash b/repos/libports/recipes/src/qt5_gui/hash index 39cdd0ded..d49a1303d 100644 --- a/repos/libports/recipes/src/qt5_gui/hash +++ b/repos/libports/recipes/src/qt5_gui/hash @@ -1 +1 @@ -- +2019-07-08 6464d26601cb5c2f9c64a2d6407986cb1416f50b diff --git a/repos/libports/recipes/src/qt5_launchpad/hash b/repos/libports/recipes/src/qt5_launchpad/hash index 39cdd0ded..eef01cc24 100644 --- a/repos/libports/recipes/src/qt5_launchpad/hash +++ b/repos/libports/recipes/src/qt5_launchpad/hash @@ -1 +1 @@ -- +2019-07-08 f7a456b715d23401e7c87d0d341171c54610e744 diff --git a/repos/libports/recipes/src/qt5_network/hash b/repos/libports/recipes/src/qt5_network/hash index 39cdd0ded..659bb0393 100644 --- a/repos/libports/recipes/src/qt5_network/hash +++ b/repos/libports/recipes/src/qt5_network/hash @@ -1 +1 @@ -- +2019-07-08 fe2d702408f7d15acfb7f8de856e7876daad27eb diff --git a/repos/libports/recipes/src/qt5_opengl/hash b/repos/libports/recipes/src/qt5_opengl/hash index 39cdd0ded..03fe0180d 100644 --- a/repos/libports/recipes/src/qt5_opengl/hash +++ b/repos/libports/recipes/src/qt5_opengl/hash @@ -1 +1 @@ -- +2019-07-08 4e4827a6ce5dc712b23afd703551b017891c2a88 diff --git a/repos/libports/recipes/src/qt5_openglwindow/hash b/repos/libports/recipes/src/qt5_openglwindow/hash index 39cdd0ded..5796f5430 100644 --- a/repos/libports/recipes/src/qt5_openglwindow/hash +++ b/repos/libports/recipes/src/qt5_openglwindow/hash @@ -1 +1 @@ -- +2019-07-08 33b5c596a896f302c746843d7b27892b85a33814 diff --git a/repos/libports/recipes/src/qt5_printsupport/hash b/repos/libports/recipes/src/qt5_printsupport/hash index 39cdd0ded..c4d8acd9c 100644 --- a/repos/libports/recipes/src/qt5_printsupport/hash +++ b/repos/libports/recipes/src/qt5_printsupport/hash @@ -1 +1 @@ -- +2019-07-08 e5c3c98bc70c3eae3e3bfe6ff15f5937ffedd4a9 diff --git a/repos/libports/recipes/src/qt5_qjpeg/hash b/repos/libports/recipes/src/qt5_qjpeg/hash index 39cdd0ded..b7b49b73d 100644 --- a/repos/libports/recipes/src/qt5_qjpeg/hash +++ b/repos/libports/recipes/src/qt5_qjpeg/hash @@ -1 +1 @@ -- +2019-07-08 6d0f3af45ac62911e30e6801e1014b277e7543b5 diff --git a/repos/libports/recipes/src/qt5_qml/hash b/repos/libports/recipes/src/qt5_qml/hash index 39cdd0ded..8eee9fbd2 100644 --- a/repos/libports/recipes/src/qt5_qml/hash +++ b/repos/libports/recipes/src/qt5_qml/hash @@ -1 +1 @@ -- +2019-07-08 82e8419c2b361f5a7ee64a70a5bf494ab0cad134 diff --git a/repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash b/repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash index 39cdd0ded..fb7e0abb6 100644 --- a/repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash +++ b/repos/libports/recipes/src/qt5_qnitpickerviewwidget/hash @@ -1 +1 @@ -- +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 2f2594717..a8df23b8a 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 39cdd0ded..89b422efc 100644 --- a/repos/libports/recipes/src/qt5_qpluginwidget/hash +++ b/repos/libports/recipes/src/qt5_qpluginwidget/hash @@ -1 +1 @@ -- +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 39cdd0ded..7719d548f 100644 --- a/repos/libports/recipes/src/qt5_qt_labs_folderlistmodel/hash +++ b/repos/libports/recipes/src/qt5_qt_labs_folderlistmodel/hash @@ -1 +1 @@ -- +2019-07-08 78c41523f8c00df67ca255da9d50cf3dad2c533a diff --git a/repos/libports/recipes/src/qt5_qtquick2/hash b/repos/libports/recipes/src/qt5_qtquick2/hash index 39cdd0ded..0b6fa5995 100644 --- a/repos/libports/recipes/src/qt5_qtquick2/hash +++ b/repos/libports/recipes/src/qt5_qtquick2/hash @@ -1 +1 @@ -- +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 39cdd0ded..88089fcaf 100644 --- a/repos/libports/recipes/src/qt5_qtquick_layouts/hash +++ b/repos/libports/recipes/src/qt5_qtquick_layouts/hash @@ -1 +1 @@ -- +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 39cdd0ded..046f1a754 100644 --- a/repos/libports/recipes/src/qt5_qtquick_virtualkeyboard/hash +++ b/repos/libports/recipes/src/qt5_qtquick_virtualkeyboard/hash @@ -1 +1 @@ -- +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 39cdd0ded..e61fffa7f 100644 --- a/repos/libports/recipes/src/qt5_qtquick_window/hash +++ b/repos/libports/recipes/src/qt5_qtquick_window/hash @@ -1 +1 @@ -- +2019-07-08 813f09ab9431e925486406ca520f8873ea5fc6f5 diff --git a/repos/libports/recipes/src/qt5_quick/hash b/repos/libports/recipes/src/qt5_quick/hash index 39cdd0ded..4f34a941b 100644 --- a/repos/libports/recipes/src/qt5_quick/hash +++ b/repos/libports/recipes/src/qt5_quick/hash @@ -1 +1 @@ -- +2019-07-08 0a71c162320020d090ee847689f1bfbfa49bed04 diff --git a/repos/libports/recipes/src/qt5_samegame/hash b/repos/libports/recipes/src/qt5_samegame/hash index 39cdd0ded..a2afffb3c 100644 --- a/repos/libports/recipes/src/qt5_samegame/hash +++ b/repos/libports/recipes/src/qt5_samegame/hash @@ -1 +1 @@ -- +2019-07-08 2bf262f833b66fe685fce95d843bd6a72d2083e2 diff --git a/repos/libports/recipes/src/qt5_scriptclassic/hash b/repos/libports/recipes/src/qt5_scriptclassic/hash index 39cdd0ded..489b39924 100644 --- a/repos/libports/recipes/src/qt5_scriptclassic/hash +++ b/repos/libports/recipes/src/qt5_scriptclassic/hash @@ -1 +1 @@ -- +2019-07-08 5b3f9ca8c4f03cfcba578158669ac72bea436ce0 diff --git a/repos/libports/recipes/src/qt5_sql/hash b/repos/libports/recipes/src/qt5_sql/hash index 39cdd0ded..bbb07cedc 100644 --- a/repos/libports/recipes/src/qt5_sql/hash +++ b/repos/libports/recipes/src/qt5_sql/hash @@ -1 +1 @@ -- +2019-07-08 b432621e0761a1ba7ae397510180b6bf11d7ab0f diff --git a/repos/libports/recipes/src/qt5_svg/hash b/repos/libports/recipes/src/qt5_svg/hash index 39cdd0ded..861a2a4cd 100644 --- a/repos/libports/recipes/src/qt5_svg/hash +++ b/repos/libports/recipes/src/qt5_svg/hash @@ -1 +1 @@ -- +2019-07-08 6d66d48dc318b6c46f9d19f5daf0a11c631173bb diff --git a/repos/libports/recipes/src/qt5_test/hash b/repos/libports/recipes/src/qt5_test/hash index 39cdd0ded..2c0b1c85a 100644 --- a/repos/libports/recipes/src/qt5_test/hash +++ b/repos/libports/recipes/src/qt5_test/hash @@ -1 +1 @@ -- +2019-07-08 3e59ba69b159c4f6e810e07b09f7271bbd55a1a3 diff --git a/repos/libports/recipes/src/qt5_testqstring/hash b/repos/libports/recipes/src/qt5_testqstring/hash index 39cdd0ded..e3db2f128 100644 --- a/repos/libports/recipes/src/qt5_testqstring/hash +++ b/repos/libports/recipes/src/qt5_testqstring/hash @@ -1 +1 @@ -- +2019-07-08 67fcad20c58a482607d3d33ce09a569d1cf88933 diff --git a/repos/libports/recipes/src/qt5_tetrix/hash b/repos/libports/recipes/src/qt5_tetrix/hash index 39cdd0ded..401052acf 100644 --- a/repos/libports/recipes/src/qt5_tetrix/hash +++ b/repos/libports/recipes/src/qt5_tetrix/hash @@ -1 +1 @@ -- +2019-07-08 770010e40000cdb63516cd2cccde89c8d5c3bcf9 diff --git a/repos/libports/recipes/src/qt5_textedit/hash b/repos/libports/recipes/src/qt5_textedit/hash index 39cdd0ded..1281aef36 100644 --- a/repos/libports/recipes/src/qt5_textedit/hash +++ b/repos/libports/recipes/src/qt5_textedit/hash @@ -1 +1 @@ -- +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 39cdd0ded..3600dd194 100644 --- a/repos/libports/recipes/src/qt5_ui_tools/hash +++ b/repos/libports/recipes/src/qt5_ui_tools/hash @@ -1 +1 @@ -- +2019-07-08 18286c8c5666300f0f42e6db183e6d7d71c136d7 diff --git a/repos/libports/recipes/src/qt5_virtualkeyboard/hash b/repos/libports/recipes/src/qt5_virtualkeyboard/hash index 39cdd0ded..e0a53f4ac 100644 --- a/repos/libports/recipes/src/qt5_virtualkeyboard/hash +++ b/repos/libports/recipes/src/qt5_virtualkeyboard/hash @@ -1 +1 @@ -- +2019-07-08 b9a3a2637a715b0d238f9fc5eeee58fb704a97e9 diff --git a/repos/libports/recipes/src/qt5_webkit/hash b/repos/libports/recipes/src/qt5_webkit/hash index 39cdd0ded..936382c67 100644 --- a/repos/libports/recipes/src/qt5_webkit/hash +++ b/repos/libports/recipes/src/qt5_webkit/hash @@ -1 +1 @@ -- +2019-07-08 f0d23346182f63fb62212305b4dd5d1f12458b2c diff --git a/repos/libports/recipes/src/qt5_widgets/hash b/repos/libports/recipes/src/qt5_widgets/hash index 39cdd0ded..c3726aeae 100644 --- a/repos/libports/recipes/src/qt5_widgets/hash +++ b/repos/libports/recipes/src/qt5_widgets/hash @@ -1 +1 @@ -- +2019-07-08 88215b6f831207a2f4f5ca7021417370bde1a2a6 diff --git a/repos/libports/recipes/src/qt5_xml/hash b/repos/libports/recipes/src/qt5_xml/hash index 39cdd0ded..7bbbdb4d8 100644 --- a/repos/libports/recipes/src/qt5_xml/hash +++ b/repos/libports/recipes/src/qt5_xml/hash @@ -1 +1 @@ -- +2019-07-08 5827adab7b6267ed3738447ec4d3ae408e77f8cf diff --git a/repos/libports/recipes/src/sanitizer/hash b/repos/libports/recipes/src/sanitizer/hash index b04ca43b3..9eceabaa2 100644 --- a/repos/libports/recipes/src/sanitizer/hash +++ b/repos/libports/recipes/src/sanitizer/hash @@ -1 +1 @@ -2019-06-05 ad7d25a4886a0bb2c8a5bc20c3de4ddd04346f91 +2019-07-08 d97a725f89aed4a753236e47aad244112993c07b diff --git a/repos/libports/recipes/src/solo5/hash b/repos/libports/recipes/src/solo5/hash index 9ab6fab47..dac69cb98 100644 --- a/repos/libports/recipes/src/solo5/hash +++ b/repos/libports/recipes/src/solo5/hash @@ -1 +1 @@ -2019-06-05 198e8480c1f56c442ca0c3308b71d20eb618ad4a +2019-07-08 e7b47fd57769867ef50f52e92fff8cdb654b7ee6 diff --git a/repos/libports/recipes/src/spark/hash b/repos/libports/recipes/src/spark/hash index 63000ebc9..3ec72da22 100644 --- a/repos/libports/recipes/src/spark/hash +++ b/repos/libports/recipes/src/spark/hash @@ -1 +1 @@ -2019-06-05 5c2a201ed5da2efc0eb0106ea03e79fe372426a2 +2019-07-08 61e98c3ec81ff59a1ed8ed5bb035c8c9c634f050 diff --git a/repos/libports/recipes/src/stdcxx/hash b/repos/libports/recipes/src/stdcxx/hash index 0a7d7d6d1..c7d0ad234 100644 --- a/repos/libports/recipes/src/stdcxx/hash +++ b/repos/libports/recipes/src/stdcxx/hash @@ -1 +1 @@ -2019-06-02 a256a4d9e818ffed2911b377a881eebe952da61f +2019-07-08 40c0703ef0d4443a83f8a571381741f4e183b51c diff --git a/repos/libports/recipes/src/test-expat/hash b/repos/libports/recipes/src/test-expat/hash index 2427be471..1969c5cf8 100644 --- a/repos/libports/recipes/src/test-expat/hash +++ b/repos/libports/recipes/src/test-expat/hash @@ -1 +1 @@ -2019-06-04 488f43806b8448419268f720175454b3f9712033 +2019-07-08 161745765cdb1630c5758b1405137ac49c948f3d diff --git a/repos/libports/recipes/src/test-gnatio/hash b/repos/libports/recipes/src/test-gnatio/hash index 9c2ce2d3e..8ffc74197 100644 --- a/repos/libports/recipes/src/test-gnatio/hash +++ b/repos/libports/recipes/src/test-gnatio/hash @@ -1 +1 @@ -2019-06-05 a3d06f41a66734a971dde32bc576a452984c0a3d +2019-07-08 39623ef76139921c1ece41ec937b023944a5139b diff --git a/repos/libports/recipes/src/test-ldso/hash b/repos/libports/recipes/src/test-ldso/hash index 02242024a..208d90a50 100644 --- a/repos/libports/recipes/src/test-ldso/hash +++ b/repos/libports/recipes/src/test-ldso/hash @@ -1 +1 @@ -2019-06-04 014108262c29d56dce48cfbc25a38aa98d38e143 +2019-07-08 375d953455367add2b602d83e4bb30c11767dda6 diff --git a/repos/libports/recipes/src/test-libc/hash b/repos/libports/recipes/src/test-libc/hash index e13b86480..84edc9741 100644 --- a/repos/libports/recipes/src/test-libc/hash +++ b/repos/libports/recipes/src/test-libc/hash @@ -1 +1 @@ -2019-06-04 457e4ddd5b60441cfa162e9c0a2a4cd6ecf56009 +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 724fe4d35..a0c3a3f86 100644 --- a/repos/libports/recipes/src/test-libc_connect/hash +++ b/repos/libports/recipes/src/test-libc_connect/hash @@ -1 +1 @@ -2019-06-04 3e08741589cbd5bf69061191c8324bf6a4ab11bc +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 755a9fc25..7a72f23fc 100644 --- a/repos/libports/recipes/src/test-libc_counter/hash +++ b/repos/libports/recipes/src/test-libc_counter/hash @@ -1 +1 @@ -2019-06-04 65dae2fa715edbe92dcb02783ffb012db6f4e066 +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 c9d487e3e..3afa60ce7 100644 --- a/repos/libports/recipes/src/test-libc_getenv/hash +++ b/repos/libports/recipes/src/test-libc_getenv/hash @@ -1 +1 @@ -2019-06-04 d8af24799effce8a6c023174173f236cd2e2cbba +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 fb6270dad..ff6eafd43 100644 --- a/repos/libports/recipes/src/test-libc_pipe/hash +++ b/repos/libports/recipes/src/test-libc_pipe/hash @@ -1 +1 @@ -2019-06-05 6517db45edf860f2e2bbe8f8b92a44d227bfe138 +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 0dcdfbe39..cdda7795a 100644 --- a/repos/libports/recipes/src/test-libc_vfs/hash +++ b/repos/libports/recipes/src/test-libc_vfs/hash @@ -1 +1 @@ -2019-06-04 736a88e89fea70e3a4707d5f5f8cbf822459676f +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 292b84247..6ac9c2560 100644 --- a/repos/libports/recipes/src/test-libc_vfs_block/hash +++ b/repos/libports/recipes/src/test-libc_vfs_block/hash @@ -1 +1 @@ -2019-06-04 b38bac44288df48a1749c2745d3dc7f9546f5779 +2019-07-08 7850c9970a6feb98d1f88b47d5cc13516eb8ec4f diff --git a/repos/libports/recipes/src/test-netty/hash b/repos/libports/recipes/src/test-netty/hash index 3d6170fda..c75886038 100644 --- a/repos/libports/recipes/src/test-netty/hash +++ b/repos/libports/recipes/src/test-netty/hash @@ -1 +1 @@ -2019-06-05 5f2b51ee908cc3c5dbf45486045293f43a5d3885 +2019-07-08 e646766e25c0956148758b981e7507f3f52d77c9 diff --git a/repos/libports/recipes/src/test-pthread/hash b/repos/libports/recipes/src/test-pthread/hash index 0f442df04..bb32df092 100644 --- a/repos/libports/recipes/src/test-pthread/hash +++ b/repos/libports/recipes/src/test-pthread/hash @@ -1 +1 @@ -2019-06-05 8ed97e510145b84c3042d1c9fe7c94149bf6215b +2019-07-08 c14bd22201c87453b68ce3cb09f0b77a303a22a0 diff --git a/repos/libports/recipes/src/test-python/hash b/repos/libports/recipes/src/test-python/hash index 222575aac..1a5287b27 100644 --- a/repos/libports/recipes/src/test-python/hash +++ b/repos/libports/recipes/src/test-python/hash @@ -1 +1 @@ -2019-06-04 e8676d8b20fe39808bb1c7192659490ac775b6f7 +2019-07-08 3ab666375e6c296006bea8b6ddd00af7c0ac3a22 diff --git a/repos/libports/recipes/src/test-qpluginwidget/hash b/repos/libports/recipes/src/test-qpluginwidget/hash index 39cdd0ded..bd34d58dc 100644 --- a/repos/libports/recipes/src/test-qpluginwidget/hash +++ b/repos/libports/recipes/src/test-qpluginwidget/hash @@ -1 +1 @@ -- +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 39cdd0ded..97c691b60 100644 --- a/repos/libports/recipes/src/test-qt_core/hash +++ b/repos/libports/recipes/src/test-qt_core/hash @@ -1 +1 @@ -- +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 39cdd0ded..c5d0b8c6d 100644 --- a/repos/libports/recipes/src/test-qt_quick/hash +++ b/repos/libports/recipes/src/test-qt_quick/hash @@ -1 +1 @@ -- +2019-07-08 2cb882d69b90408afabc4583de53aa8a135c492c diff --git a/repos/libports/recipes/src/test-rust/hash b/repos/libports/recipes/src/test-rust/hash index 189ccdc5e..b37523cdb 100644 --- a/repos/libports/recipes/src/test-rust/hash +++ b/repos/libports/recipes/src/test-rust/hash @@ -1 +1 @@ -2019-06-05 b0fdec59571b8933c2f00285e19381dcde2f9530 +2019-07-08 28d88ddae03452f9edfdd2e2e60d7844f17f2d37 diff --git a/repos/libports/recipes/src/test-solo5/hash b/repos/libports/recipes/src/test-solo5/hash index 7fd5698e1..5f9fe4000 100644 --- a/repos/libports/recipes/src/test-solo5/hash +++ b/repos/libports/recipes/src/test-solo5/hash @@ -1 +1 @@ -2019-06-05 7effd3110fa51dd24f0adf905ca41c1691db14a4 +2019-07-08 31f89beba8423bbf3972e9a27bf604e119443f30 diff --git a/repos/libports/recipes/src/test-spark/hash b/repos/libports/recipes/src/test-spark/hash index c3a3f79de..dda71a1f8 100644 --- a/repos/libports/recipes/src/test-spark/hash +++ b/repos/libports/recipes/src/test-spark/hash @@ -1 +1 @@ -2019-06-05 ebd64eb4a37fb34a5b6c199ae7fc06556dd4de5c +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 7d9d86b5f..ae4288f48 100644 --- a/repos/libports/recipes/src/test-spark_exception/hash +++ b/repos/libports/recipes/src/test-spark_exception/hash @@ -1 +1 @@ -2019-06-05 31794a10d72f6bd28191f5294ac5b182894dcc00 +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 1b70744d2..4cc21d081 100644 --- a/repos/libports/recipes/src/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/src/test-spark_secondary_stack/hash @@ -1 +1 @@ -2019-06-05 17e0a5f04a3ed9dbc91c1efada3d00a19eebefce +2019-07-08 ff46408a2484676531b524ff680c2e4ac72deaf7 diff --git a/repos/libports/recipes/src/test-stdcxx/hash b/repos/libports/recipes/src/test-stdcxx/hash index e433611d6..a65e1fd11 100644 --- a/repos/libports/recipes/src/test-stdcxx/hash +++ b/repos/libports/recipes/src/test-stdcxx/hash @@ -1 +1 @@ -2019-06-04 73acac25c913395664392138dda2b85e932297d7 +2019-07-08 e63eb14ef32348cee009fae8c9d7fa26c82fd63b diff --git a/repos/libports/recipes/src/test-tcp/hash b/repos/libports/recipes/src/test-tcp/hash index f8378c831..94605dcb7 100644 --- a/repos/libports/recipes/src/test-tcp/hash +++ b/repos/libports/recipes/src/test-tcp/hash @@ -1 +1 @@ -2019-06-05 bc2fed967125df4c422c66db7bc08a552927c551 +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 5b97b3c4f..74e57eef5 100644 --- a/repos/libports/recipes/src/test-timed_semaphore/hash +++ b/repos/libports/recipes/src/test-timed_semaphore/hash @@ -1 +1 @@ -2019-06-05 96ef15a1fbed429026dddd6af1aa260d70f25487 +2019-07-08 a3914f3fe2d8bb3b845d81f6665ab986410c128a diff --git a/repos/libports/recipes/src/vesa_drv/hash b/repos/libports/recipes/src/vesa_drv/hash index 4060770a1..3188a6e2a 100644 --- a/repos/libports/recipes/src/vesa_drv/hash +++ b/repos/libports/recipes/src/vesa_drv/hash @@ -1 +1 @@ -2019-05-29 9cd2bb5d926061759c321afcae6514a557a44e0d +2019-07-08 74311f011f535b291b042751db1789ebaabaf11a diff --git a/repos/libports/recipes/src/vfs_fatfs/hash b/repos/libports/recipes/src/vfs_fatfs/hash index 39cdd0ded..ddede3229 100644 --- a/repos/libports/recipes/src/vfs_fatfs/hash +++ b/repos/libports/recipes/src/vfs_fatfs/hash @@ -1 +1 @@ -- +2019-07-08 e6e0c5eded527893ad5942fdbd598ea096a5e77e diff --git a/repos/libports/recipes/src/vfs_jitterentropy/hash b/repos/libports/recipes/src/vfs_jitterentropy/hash index 770f3855f..195c28c75 100644 --- a/repos/libports/recipes/src/vfs_jitterentropy/hash +++ b/repos/libports/recipes/src/vfs_jitterentropy/hash @@ -1 +1 @@ -2019-06-05 206b881933452a4deefb0df57d6d2529dc4f3caf +2019-07-08 40bd5ef7d3d0359216b8fe3931d91618ccea9cc0 diff --git a/repos/libports/recipes/src/vfs_lwip/hash b/repos/libports/recipes/src/vfs_lwip/hash index c98215a4c..05ee1b342 100644 --- a/repos/libports/recipes/src/vfs_lwip/hash +++ b/repos/libports/recipes/src/vfs_lwip/hash @@ -1 +1 @@ -2019-06-05-a aa3fbd0a4951c9095ca63c79d8c9025f006cc6a7 +2019-07-08 7200799ce1d49e78efc172687695c15737874262 diff --git a/repos/libports/recipes/src/zlib/hash b/repos/libports/recipes/src/zlib/hash index 4880eefac..e94225d7a 100644 --- a/repos/libports/recipes/src/zlib/hash +++ b/repos/libports/recipes/src/zlib/hash @@ -1 +1 @@ -2019-05-29 2988d95a19a72ba3347fc2f117bfbaecc24aa325 +2019-07-08 8544ead2199bdae026b28e251694a81029bcd13c diff --git a/repos/libports/run/fetchurl.inc b/repos/libports/run/fetchurl.inc index 091f548c5..173376e96 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 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 cd30bf614..17b48fe2b 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 3e5bf06f1..679c07481 100644 --- a/repos/libports/run/lwip.run +++ b/repos/libports/run/lwip.run @@ -22,7 +22,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/mupdf.run b/repos/libports/run/mupdf.run index f44556278..f79281213 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/nic_bridge.run b/repos/libports/run/nic_bridge.run index b096ba6a3..e3c4dd52a 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/libports/run/qt5_common.inc b/repos/libports/run/qt5_common.inc index 5137a2e53..7c1392921 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/libports/run/solo5.run b/repos/libports/run/solo5.run index 8b5e3b3c6..e0446ffd4 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 96ca697ea..1218371cd 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 658dc2bc7..fdd82beb1 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 } 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 c51d6e52d..7419fcc85 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 + + 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 000000000..67c691f82 --- /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 1782bc619..c8e72f406 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 *) { diff --git a/repos/libports/src/lib/libc/vfs_plugin.cc b/repos/libports/src/lib/libc/vfs_plugin.cc index e10f66436..9b36f73fb 100644 --- a/repos/libports/src/lib/libc/vfs_plugin.cc +++ b/repos/libports/src/lib/libc/vfs_plugin.cc @@ -124,13 +124,6 @@ namespace Libc { char const *string() const { return _value.string(); } }; - char const *config_pipe() __attribute__((weak)); - char const *config_pipe() - { - static Config_attr attr("pipe", ""); - return attr.string(); - } - char const *config_rtc() __attribute__((weak)); char const *config_rtc() { @@ -520,7 +513,7 @@ ssize_t Libc::Vfs_plugin::write(Libc::File_descriptor *fd, const void *buf, Vfs::Vfs_handle *handle; void const *buf; - ::size_t const count; + ::size_t count; Vfs::file_size &out_count; Result &out_result; @@ -533,16 +526,14 @@ ssize_t Libc::Vfs_plugin::write(Libc::File_descriptor *fd, const void *buf, bool suspend() override { - Vfs::file_size out = 0; try { - out_result = VFS_THREAD_SAFE(handle->fs().write(handle, (char const *)buf+out_count, - count - out_count, out)); + out_result = VFS_THREAD_SAFE(handle->fs().write(handle, (char const *)buf, + count, out_count)); + retry = false; } catch (Vfs::File_io_service::Insufficient_buffer) { - out_result = Result::WRITE_OK; + retry = true; } - out_count += out; - retry = (out_result == Result::WRITE_OK) && (out_count < count); return retry; } } check(handle, buf, count, out_count, out_result); @@ -1320,59 +1311,6 @@ int Libc::Vfs_plugin::munmap(void *addr, ::size_t) } -int Libc::Vfs_plugin::pipe(Libc::File_descriptor *pipefdo[2]) -{ - Absolute_path base_path(Libc::config_pipe()); - if (base_path == "") { - Genode::error(__func__, ": pipe fs not mounted"); - return Errno(EACCES); - } - - Libc::File_descriptor *meta_fd { nullptr }; - - { - Absolute_path new_path = base_path; - new_path.append("/new"); - - meta_fd = open(new_path.base(), O_RDONLY, Libc::ANY_FD); - if (!meta_fd) { - Genode::error("failed to create pipe at ", new_path); - return Errno(EACCES); - } - - char buf[32]; - int const n = read(meta_fd, buf, sizeof(buf)-1); - if (n < 1) { - Genode::error("failed to read pipe at ", new_path); - close(meta_fd); - return Errno(EACCES); - } - buf[n] = '\0'; - base_path.append("/"); - base_path.append(buf); - } { - Absolute_path out_path = base_path; - out_path.append("/out"); - pipefdo[0] = open(out_path.base(), O_RDONLY, Libc::ANY_FD); - if (!pipefdo[0]) - Genode::error("failed to open pipe end at ", out_path); - } { - Absolute_path in_path = base_path; - in_path.append("/in"); - pipefdo[1] = open(in_path.base(), O_WRONLY, Libc::ANY_FD); - if (!pipefdo[1]) - Genode::error("failed to open pipe end at ", in_path); - } - - close(meta_fd); - - if (!pipefdo[0] || !pipefdo[1]) - return Errno(EACCES); - - return 0; -} - - bool Libc::Vfs_plugin::poll(File_descriptor &fd, struct pollfd &pfd) { if (fd.plugin != this) return false; diff --git a/repos/libports/src/lib/libc/vfs_plugin.h b/repos/libports/src/lib/libc/vfs_plugin.h index dfccba1c8..402739eb1 100644 --- a/repos/libports/src/lib/libc/vfs_plugin.h +++ b/repos/libports/src/lib/libc/vfs_plugin.h @@ -115,7 +115,6 @@ class Libc::Vfs_plugin : public Libc::Plugin bool supports_access(const char *, int) override { return true; } bool supports_mkdir(const char *, mode_t) override { return true; } bool supports_open(const char *, int) override { return true; } - bool supports_pipe() override { return true; } bool supports_poll() override { return true; } bool supports_readlink(const char *, char *, ::size_t) override { return true; } bool supports_rename(const char *, const char *) override { return true; } @@ -148,7 +147,6 @@ class Libc::Vfs_plugin : public Libc::Plugin int ioctl(Libc::File_descriptor *, int , char *) override; ::off_t lseek(Libc::File_descriptor *fd, ::off_t offset, int whence) override; int mkdir(const char *, mode_t) override; - int pipe(Libc::File_descriptor *pipefdo[2]) override; bool poll(File_descriptor &fdo, struct pollfd &pfd) override; ssize_t read(Libc::File_descriptor *, void *, ::size_t) override; ssize_t readlink(const char *, char *, ::size_t) override; 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 d6c218b23..16b694121 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 07499879b..7bd8f3ee0 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 */ diff --git a/repos/os/recipes/pkg/chroot/hash b/repos/os/recipes/pkg/chroot/hash index 39cdd0ded..e2b1c733c 100644 --- a/repos/os/recipes/pkg/chroot/hash +++ b/repos/os/recipes/pkg/chroot/hash @@ -1 +1 @@ -- +2019-07-08 970f91f662e8c7a09f86d28e4a93f64e4057056e diff --git a/repos/os/recipes/pkg/clipboard/hash b/repos/os/recipes/pkg/clipboard/hash index 39cdd0ded..d046fc5a2 100644 --- a/repos/os/recipes/pkg/clipboard/hash +++ b/repos/os/recipes/pkg/clipboard/hash @@ -1 +1 @@ -- +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 39cdd0ded..8f9ee2365 100644 --- a/repos/os/recipes/pkg/drivers_interactive-imx53_qsb/hash +++ b/repos/os/recipes/pkg/drivers_interactive-imx53_qsb/hash @@ -1 +1 @@ -- +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 4ea8333b1..4db8ee4bf 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 39cdd0ded..7e92483d3 100644 --- a/repos/os/recipes/pkg/drivers_interactive-muen/hash +++ b/repos/os/recipes/pkg/drivers_interactive-muen/hash @@ -1 +1 @@ -- +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 39cdd0ded..cff75e37f 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash @@ -1 +1 @@ -- +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 39cdd0ded..b71fab66f 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pc/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pc/hash @@ -1 +1 @@ -- +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 68513efae..2061c8107 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 39cdd0ded..d7e2fa883 100644 --- a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash @@ -1 +1 @@ -- +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 39cdd0ded..35e9aaeaa 100644 --- a/repos/os/recipes/pkg/drivers_nic-zynq/hash +++ b/repos/os/recipes/pkg/drivers_nic-zynq/hash @@ -1 +1 @@ -- +2019-07-08 9cadf3a083e89d322a6b304d3cb2600afe463190 diff --git a/repos/os/recipes/pkg/fs_rom/hash b/repos/os/recipes/pkg/fs_rom/hash index af766d944..2d6d5bcb5 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 39cdd0ded..b54a76088 100644 --- a/repos/os/recipes/pkg/mixer/hash +++ b/repos/os/recipes/pkg/mixer/hash @@ -1 +1 @@ -- +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 39cdd0ded..b46167603 100644 --- a/repos/os/recipes/pkg/nic_router-nat/hash +++ b/repos/os/recipes/pkg/nic_router-nat/hash @@ -1 +1 @@ -- +2019-07-08 2740b31d7f97c1ab42f967adcadf98b94ce6e7a9 diff --git a/repos/os/recipes/pkg/nit_focus/hash b/repos/os/recipes/pkg/nit_focus/hash index 39cdd0ded..1a0dd71bd 100644 --- a/repos/os/recipes/pkg/nit_focus/hash +++ b/repos/os/recipes/pkg/nit_focus/hash @@ -1 +1 @@ -- +2019-07-08 7077f814c9e2085b7676e7e95a1f87ffcb074b9c diff --git a/repos/os/recipes/pkg/rom_filter/hash b/repos/os/recipes/pkg/rom_filter/hash index 39cdd0ded..253498307 100644 --- a/repos/os/recipes/pkg/rom_filter/hash +++ b/repos/os/recipes/pkg/rom_filter/hash @@ -1 +1 @@ -- +2019-07-08 2e06476d03e1b5da5f5eb02bc6f5841edd8dce28 diff --git a/repos/os/recipes/pkg/rom_reporter/hash b/repos/os/recipes/pkg/rom_reporter/hash index 39cdd0ded..23b0086f1 100644 --- a/repos/os/recipes/pkg/rom_reporter/hash +++ b/repos/os/recipes/pkg/rom_reporter/hash @@ -1 +1 @@ -- +2019-07-08 691541b7e76989f5862333b3b11644e269a805d8 diff --git a/repos/os/recipes/pkg/test-block/hash b/repos/os/recipes/pkg/test-block/hash index 8b34c385e..b5dffae67 100644 --- a/repos/os/recipes/pkg/test-block/hash +++ b/repos/os/recipes/pkg/test-block/hash @@ -1 +1 @@ -2019-06-05 af342a4c0ab7e1f363a54c843cfe97a8bf2934ce +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 34f2fec95..cc7d0006a 100644 --- a/repos/os/recipes/pkg/test-block_cache/hash +++ b/repos/os/recipes/pkg/test-block_cache/hash @@ -1 +1 @@ -2019-06-05 14d035c83ddedb68e13590a39aaca77e1f549640 +2019-07-08 78921ed4cae0a20fd4aad6c498dbd795c0918130 diff --git a/repos/os/recipes/pkg/test-clipboard/hash b/repos/os/recipes/pkg/test-clipboard/hash index 5c509bba7..25eb4d60e 100644 --- a/repos/os/recipes/pkg/test-clipboard/hash +++ b/repos/os/recipes/pkg/test-clipboard/hash @@ -1 +1 @@ -2019-06-05 cf30b2b082ff78944beff6cc5e9572550c0b4bb0 +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 23a0df33b..e2ee36a1f 100644 --- a/repos/os/recipes/pkg/test-dynamic_config/hash +++ b/repos/os/recipes/pkg/test-dynamic_config/hash @@ -1 +1 @@ -2019-06-05 465d2ff25fad310d338b40011f11b8f57b767128 +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 7c26069e6..2a047b60c 100644 --- a/repos/os/recipes/pkg/test-dynamic_config_loader/hash +++ b/repos/os/recipes/pkg/test-dynamic_config_loader/hash @@ -1 +1 @@ -2019-06-05 adc7be4664310979f7e60a2f0474b9b7f91b8d09 +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 dd1bb7a1c..0e3d46182 100644 --- a/repos/os/recipes/pkg/test-dynamic_config_slave/hash +++ b/repos/os/recipes/pkg/test-dynamic_config_slave/hash @@ -1 +1 @@ -2019-06-05 947a4807bd291f6657f1e3bd7dbf92bb4f4513de +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 1a2de4951..fa5f2d162 100644 --- a/repos/os/recipes/pkg/test-fault_detection/hash +++ b/repos/os/recipes/pkg/test-fault_detection/hash @@ -1 +1 @@ -2019-06-05 f86077933e9f67f705f1b49b8c32efb50589adb0 +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 c686d7755..48997e9e4 100644 --- a/repos/os/recipes/pkg/test-fs_log/hash +++ b/repos/os/recipes/pkg/test-fs_log/hash @@ -1 +1 @@ -2019-06-05 b99c8367b7b85e8923c7ea6b08627f9f259546e6 +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 c142cc829..0b1c24d17 100644 --- a/repos/os/recipes/pkg/test-fs_packet/hash +++ b/repos/os/recipes/pkg/test-fs_packet/hash @@ -1 +1 @@ -2019-06-05 35c60064dc4dbd6e8031c82b9bb48a428d769bda +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 0bf531b7c..815b1b77d 100644 --- a/repos/os/recipes/pkg/test-fs_report/hash +++ b/repos/os/recipes/pkg/test-fs_report/hash @@ -1 +1 @@ -2019-06-05 3db7c96f8b251f7b871fba959e226b9f9fb645bd +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 70c2c9ee2..5158b7332 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-05 6619a517eb0215a467c8e08243dd1c3bbafcbf0e +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 0c1fe8b51..92c50e044 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-05 c6dc21fedcf43158c0e83a750c1c91922cffb9ab +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 cd95424fd..090000a8e 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-05 8864d8bbda03f34d1016954eb73591d497f2e559 +2019-07-08 81d870d7460cdf372184ac10006cfbd2f63b03a2 diff --git a/repos/os/recipes/pkg/test-init/hash b/repos/os/recipes/pkg/test-init/hash index fc9865359..cafc5b733 100644 --- a/repos/os/recipes/pkg/test-init/hash +++ b/repos/os/recipes/pkg/test-init/hash @@ -1 +1 @@ -2019-06-05 9ab66809774a455ed5a453e465178d392f027640 +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 54709b028..9b6211c28 100644 --- a/repos/os/recipes/pkg/test-init_loop/hash +++ b/repos/os/recipes/pkg/test-init_loop/hash @@ -1 +1 @@ -2019-06-05 d648f770f3871c113071cbc41776510ae297a353 +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 e18a7902e..2b3127cb3 100644 --- a/repos/os/recipes/pkg/test-lx_block/hash +++ b/repos/os/recipes/pkg/test-lx_block/hash @@ -1 +1 @@ -2019-06-05 34644ff9d418e6349dd00bd568985cfa4ba7931c +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 37ac2eed6..7d02f8ac8 100644 --- a/repos/os/recipes/pkg/test-nic_loopback/hash +++ b/repos/os/recipes/pkg/test-nic_loopback/hash @@ -1 +1 @@ -2019-06-05 da1588aa85cb41f02d9b48304855e982967a896c +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 b3aa74583..2cb586688 100644 --- a/repos/os/recipes/pkg/test-part_block_gpt/hash +++ b/repos/os/recipes/pkg/test-part_block_gpt/hash @@ -1 +1 @@ -2019-06-05 10c35c103049924380b327fc18a78f24925db92c +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 cf3cb5585..300fdc005 100644 --- a/repos/os/recipes/pkg/test-part_block_mbr/hash +++ b/repos/os/recipes/pkg/test-part_block_mbr/hash @@ -1 +1 @@ -2019-06-05 0485a5e14e9e501d7b70dd041566029e4bba3d7a +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 8b9aed050..589850a36 100644 --- a/repos/os/recipes/pkg/test-ram_fs_chunk/hash +++ b/repos/os/recipes/pkg/test-ram_fs_chunk/hash @@ -1 +1 @@ -2019-06-05 3f012587d82c5eb49ecbfd6fdec0dcbf1da574af +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 49ecb3a76..effe9a8ca 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-05 a8628c93e4b39238463d06c803ac4e60e87d5103 +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 71a40b50f..f9fd4de27 100644 --- a/repos/os/recipes/pkg/test-report_rom/hash +++ b/repos/os/recipes/pkg/test-report_rom/hash @@ -1 +1 @@ -2019-06-05 3ee2f247c857cddf4840ef7941f2770e8a20d4d8 +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 40366050d..fbc9bc0a9 100644 --- a/repos/os/recipes/pkg/test-resource_request/hash +++ b/repos/os/recipes/pkg/test-resource_request/hash @@ -1 +1 @@ -2019-06-05 54688f3200684eda2e76a5a900498d8c4ed6964c +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 bf0054572..20f5a94ed 100644 --- a/repos/os/recipes/pkg/test-resource_yield/hash +++ b/repos/os/recipes/pkg/test-resource_yield/hash @@ -1 +1 @@ -2019-06-05 6137da9c4dd9dace848947e1a7c836e50bddc48e +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 e56234ab3..5470a6a7d 100644 --- a/repos/os/recipes/pkg/test-rom_block/hash +++ b/repos/os/recipes/pkg/test-rom_block/hash @@ -1 +1 @@ -2019-06-05 44c0b8b350df215d405017f88c3582e7426449ec +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 5f6b9069b..056ba649a 100644 --- a/repos/os/recipes/pkg/test-rom_filter/hash +++ b/repos/os/recipes/pkg/test-rom_filter/hash @@ -1 +1 @@ -2019-06-05 98dba061a62c261d3081f005d52ff7f03475c56b +2019-07-08 507cf99489d6208da018c81e4317493d7c136cd3 diff --git a/repos/os/recipes/pkg/test-rtc/hash b/repos/os/recipes/pkg/test-rtc/hash index 39cdd0ded..b792f3f18 100644 --- a/repos/os/recipes/pkg/test-rtc/hash +++ b/repos/os/recipes/pkg/test-rtc/hash @@ -1 +1 @@ -- +2019-07-08 0cf75315b5f5b4cd9bd28a9fbb6b86b2fde134d4 diff --git a/repos/os/recipes/pkg/test-signal/hash b/repos/os/recipes/pkg/test-signal/hash index 3ddad21a3..0abe45a71 100644 --- a/repos/os/recipes/pkg/test-signal/hash +++ b/repos/os/recipes/pkg/test-signal/hash @@ -1 +1 @@ -2019-06-05 7b9273e9bc2a2586873199a30f9b0e6cca2c8d44 +2019-07-08 14f712c2ae52872b0739e5f29728a6e5acdce2ba diff --git a/repos/os/recipes/pkg/test-slab/hash b/repos/os/recipes/pkg/test-slab/hash index 02294de3e..73b6a3e9b 100644 --- a/repos/os/recipes/pkg/test-slab/hash +++ b/repos/os/recipes/pkg/test-slab/hash @@ -1 +1 @@ -2019-06-05 560fd786da282172123794dddd8d435e01ebb21a +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 884d929d1..f8a4dccb8 100644 --- a/repos/os/recipes/pkg/test-terminal_crosslink/hash +++ b/repos/os/recipes/pkg/test-terminal_crosslink/hash @@ -1 +1 @@ -2019-06-05 1a1b185d10e1aa92a50946ed87a1e2d03ea761b1 +2019-07-08 f1f6c1089dd727d63df2f6a61c6ddd31ca26a9c8 diff --git a/repos/os/recipes/pkg/test-trace/hash b/repos/os/recipes/pkg/test-trace/hash index bf7c27f4d..8b6fac900 100644 --- a/repos/os/recipes/pkg/test-trace/hash +++ b/repos/os/recipes/pkg/test-trace/hash @@ -1 +1 @@ -2019-06-05 0aed5de880814f18d19f0633716c365e83ccddf2 +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 8da5419ea..24379bd9f 100644 --- a/repos/os/recipes/pkg/test-trace_logger/hash +++ b/repos/os/recipes/pkg/test-trace_logger/hash @@ -1 +1 @@ -2019-06-05 8e6dbdc956d6bf7624874cfca68886802b58d213 +2019-07-08 785569a7568cf501ec7f8643cacbc50a68980c93 diff --git a/repos/os/recipes/pkg/test-utf8/hash b/repos/os/recipes/pkg/test-utf8/hash index 8f1ef1239..f1231d16a 100644 --- a/repos/os/recipes/pkg/test-utf8/hash +++ b/repos/os/recipes/pkg/test-utf8/hash @@ -1 +1 @@ -2019-06-05 93ef4697de0d34490a90e9ea399da2cce54eb413 +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 656d928f0..8e34ba450 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-05 48a3eed997a5f6b97a88347691066e405621f391 +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 b88ba641f..7c39b829a 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-05 096e7d011a0344882c4ac59e7959b95730435927 +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 55bda8c32..495716268 100644 --- a/repos/os/recipes/pkg/test-weak_ptr/hash +++ b/repos/os/recipes/pkg/test-weak_ptr/hash @@ -1 +1 @@ -2019-06-05 6ed46e7b148699bbfc1e08f202a35427d524e41e +2019-07-08 5b89fea9fefdf8093d80a52aed4922b363f155d1 diff --git a/repos/os/recipes/src/acpi_drv/hash b/repos/os/recipes/src/acpi_drv/hash index f4c6292a9..3e109598f 100644 --- a/repos/os/recipes/src/acpi_drv/hash +++ b/repos/os/recipes/src/acpi_drv/hash @@ -1 +1 @@ -2019-05-29 34a142697ca834fe4980b508f7c79e23fad983cd +2019-07-08 58de551e0c3f96f8835e7fc8e790dce91ced96ec diff --git a/repos/os/recipes/src/ahci_drv/hash b/repos/os/recipes/src/ahci_drv/hash index 8a65b338a..360575bb5 100644 --- a/repos/os/recipes/src/ahci_drv/hash +++ b/repos/os/recipes/src/ahci_drv/hash @@ -1 +1 @@ -2019-05-29 25e37d5c383eedb09557f8c41384365de14b5f3f +2019-07-08 68a5c26fd94e4b6b8aa701b2f5d1701740d59479 diff --git a/repos/os/recipes/src/block_cache/hash b/repos/os/recipes/src/block_cache/hash index 5f8877d36..9a989912e 100644 --- a/repos/os/recipes/src/block_cache/hash +++ b/repos/os/recipes/src/block_cache/hash @@ -1 +1 @@ -2019-06-05 eea0a2c3aa7e52e3cd0fb71e255d41b58c775adb +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 81faa2c14..b8d3e914e 100644 --- a/repos/os/recipes/src/boot_fb_drv/hash +++ b/repos/os/recipes/src/boot_fb_drv/hash @@ -1 +1 @@ -2019-05-29 82ae6f648e37c41359f10a31f1f7a274c510d73c +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 4ab392c38..6b24181c7 100644 --- a/repos/os/recipes/src/cached_fs_rom/hash +++ b/repos/os/recipes/src/cached_fs_rom/hash @@ -1 +1 @@ -2019-06-05 3e0f0f79adf028d30f7476ee4aba4508852b0ce2 +2019-07-08 c2f0dec8d7bea8a179300864d3458681308956cb diff --git a/repos/os/recipes/src/chroot/hash b/repos/os/recipes/src/chroot/hash index 592fb6efc..22824b9f0 100644 --- a/repos/os/recipes/src/chroot/hash +++ b/repos/os/recipes/src/chroot/hash @@ -1 +1 @@ -2019-05-29 bb09f5e5014799b9c248694aa0093a36afe64fac +2019-07-08 9874cf8ddcd42482fa7d4f5af694c2554d212164 diff --git a/repos/os/recipes/src/clipboard/hash b/repos/os/recipes/src/clipboard/hash index c2e535da5..50353b5bf 100644 --- a/repos/os/recipes/src/clipboard/hash +++ b/repos/os/recipes/src/clipboard/hash @@ -1 +1 @@ -2019-06-05 4627abec8b8fe7c250dceaaa495b529703fa2966 +2019-07-08 05587bc85808fc4c99710a9f07b24aa0e923931b diff --git a/repos/os/recipes/src/cpu_burner/hash b/repos/os/recipes/src/cpu_burner/hash index a8d9b2d5b..210b1a086 100644 --- a/repos/os/recipes/src/cpu_burner/hash +++ b/repos/os/recipes/src/cpu_burner/hash @@ -1 +1 @@ -2019-06-05 b9851ea2124f3abb07c9663292975374303b8a66 +2019-07-08 7f8453156daf32c08913ad1f7cd35ade8c927e8a diff --git a/repos/os/recipes/src/dummy/hash b/repos/os/recipes/src/dummy/hash index bd1fcf9c5..ff2b023e7 100644 --- a/repos/os/recipes/src/dummy/hash +++ b/repos/os/recipes/src/dummy/hash @@ -1 +1 @@ -2019-06-05 2d14a11e2a961efe0861263694c884ad4a278c8a +2019-07-08 72a9a4af3033919437e7a72510e08a33c2f43416 diff --git a/repos/os/recipes/src/dynamic_rom/hash b/repos/os/recipes/src/dynamic_rom/hash index 96322aaae..5009bb63f 100644 --- a/repos/os/recipes/src/dynamic_rom/hash +++ b/repos/os/recipes/src/dynamic_rom/hash @@ -1 +1 @@ -2019-06-05 6847e7c3fb3ff3613d2307307aa46dbcbf1467e4 +2019-07-08 59fccfd4051168be0f0674c0b0e715db78724afd diff --git a/repos/os/recipes/src/fb_sdl/hash b/repos/os/recipes/src/fb_sdl/hash index b0ffc2b15..3449331f7 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 5f1bf24c9..c1806a15b 100644 --- a/repos/os/recipes/src/fs_log/hash +++ b/repos/os/recipes/src/fs_log/hash @@ -1 +1 @@ -2019-06-05 7ccfd369753b67f5b75e700687c5e15389e85f68 +2019-07-08 486df680bc700acd2fdce77ed1f23878e7902f8f diff --git a/repos/os/recipes/src/fs_report/hash b/repos/os/recipes/src/fs_report/hash index 0957f1d11..fb084a116 100644 --- a/repos/os/recipes/src/fs_report/hash +++ b/repos/os/recipes/src/fs_report/hash @@ -1 +1 @@ -2019-06-05 03a61bd9fe7d84390a3f3fd0b8bb622da048f921 +2019-07-08 4cffd4369f05f5cd98b329f08395914cc4587e68 diff --git a/repos/os/recipes/src/fs_rom/hash b/repos/os/recipes/src/fs_rom/hash index cf7cf6866..b6390e3fd 100644 --- a/repos/os/recipes/src/fs_rom/hash +++ b/repos/os/recipes/src/fs_rom/hash @@ -1 +1 @@ -2019-06-05 20fb0c5b760f0f63cf4ed39c6890c30a05a0cf2a +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 4d53d469a..8f265a8f5 100644 --- a/repos/os/recipes/src/global_keys_handler/hash +++ b/repos/os/recipes/src/global_keys_handler/hash @@ -1 +1 @@ -2019-05-29 6dc1649a6dbcde317a446c4c0f0a131f4f01719a +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 39cdd0ded..e78d57185 100644 --- a/repos/os/recipes/src/imx53_qsb_drivers/hash +++ b/repos/os/recipes/src/imx53_qsb_drivers/hash @@ -1 +1 @@ -- +2019-07-08 827e77a7bf0608c4cd7a65396dd9198e21247ad1 diff --git a/repos/os/recipes/src/init/hash b/repos/os/recipes/src/init/hash index 535ecf794..3df82d47c 100644 --- a/repos/os/recipes/src/init/hash +++ b/repos/os/recipes/src/init/hash @@ -1 +1 @@ -2019-06-05 543090d6e662da831709a3d8eff301813bf9b240 +2019-07-08 e2763f1e838e404f2abaf54b67e420901bbc2f23 diff --git a/repos/os/recipes/src/input_filter/hash b/repos/os/recipes/src/input_filter/hash index d9db90808..9be4fb910 100644 --- a/repos/os/recipes/src/input_filter/hash +++ b/repos/os/recipes/src/input_filter/hash @@ -1 +1 @@ -2019-05-29 6cf16fc0dd397de8cae65ea9ac6db49cb39570a5 +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 39cdd0ded..b846e10de 100644 --- a/repos/os/recipes/src/lan9118_nic_drv/hash +++ b/repos/os/recipes/src/lan9118_nic_drv/hash @@ -1 +1 @@ -- +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 a01af3e84..1f7134959 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 4f3f25267..0b3b75821 100644 --- a/repos/os/recipes/src/loader/hash +++ b/repos/os/recipes/src/loader/hash @@ -1 +1 @@ -2019-06-05 5a3662d87bfe6df8816fa9694e15ef2d09516a3b +2019-07-08 4e37c3e12ce96b5758b58921766c72ca0b32cdad diff --git a/repos/os/recipes/src/log_core/hash b/repos/os/recipes/src/log_core/hash index 3668d420e..538089f4f 100644 --- a/repos/os/recipes/src/log_core/hash +++ b/repos/os/recipes/src/log_core/hash @@ -1 +1 @@ -2019-05-29 8553781a4b4f89cd88cad9b5bd1f2c88ec1449cf +2019-07-08 1548d51c744c59ff784e7ba3079ffdc8a1479231 diff --git a/repos/os/recipes/src/log_terminal/hash b/repos/os/recipes/src/log_terminal/hash index 542a160b6..3505a62b0 100644 --- a/repos/os/recipes/src/log_terminal/hash +++ b/repos/os/recipes/src/log_terminal/hash @@ -1 +1 @@ -2019-06-05 d0b88b6f4e28c07bb58a4857bc212a0cc51edfcd +2019-07-08 64e5cdbb2603290556bec20ff375382c1e0311f8 diff --git a/repos/os/recipes/src/lx_block/hash b/repos/os/recipes/src/lx_block/hash index f6c76df0e..97cc88bde 100644 --- a/repos/os/recipes/src/lx_block/hash +++ b/repos/os/recipes/src/lx_block/hash @@ -1 +1 @@ -2019-06-05 e78130146297a027bc262407fc6275c6b7e78c53 +2019-07-08 2b0277116b40c851128bece5fc4a0a360e10536a diff --git a/repos/os/recipes/src/mixer/hash b/repos/os/recipes/src/mixer/hash index 39cdd0ded..27655483b 100644 --- a/repos/os/recipes/src/mixer/hash +++ b/repos/os/recipes/src/mixer/hash @@ -1 +1 @@ -- +2019-07-08 2ee14621def02803f59dbe885eda47b0676518e7 diff --git a/repos/os/recipes/src/nic_bridge/hash b/repos/os/recipes/src/nic_bridge/hash index ca912f7da..d826b3b00 100644 --- a/repos/os/recipes/src/nic_bridge/hash +++ b/repos/os/recipes/src/nic_bridge/hash @@ -1 +1 @@ -2019-06-05 1d310f234cdf57a0db7520dfe80254d902f9679c +2019-07-08 bc7289c4643b7bd2419029994aa22921653f359b diff --git a/repos/os/recipes/src/nic_loopback/hash b/repos/os/recipes/src/nic_loopback/hash index 80a4c907a..8d0568edf 100644 --- a/repos/os/recipes/src/nic_loopback/hash +++ b/repos/os/recipes/src/nic_loopback/hash @@ -1 +1 @@ -2019-06-05 9903dcc03db57760aee382bf63505d9849825695 +2019-07-08 73b1303cc74074577fbb6229642326a1f0f483ec diff --git a/repos/os/recipes/src/nic_router/hash b/repos/os/recipes/src/nic_router/hash index ad3b13cf1..1f365329f 100644 --- a/repos/os/recipes/src/nic_router/hash +++ b/repos/os/recipes/src/nic_router/hash @@ -1 +1 @@ -2019-06-05 98308ec789ae866e3e544cc406736e019925db7c +2019-07-08 13edbacbcbc3344288922d3c6596b395eef11363 diff --git a/repos/os/recipes/src/nit_fb/hash b/repos/os/recipes/src/nit_fb/hash index 01e36b574..2a3dd5373 100644 --- a/repos/os/recipes/src/nit_fb/hash +++ b/repos/os/recipes/src/nit_fb/hash @@ -1 +1 @@ -2019-05-29 c6de3d407506f2cba25bfa903449110998632cc1 +2019-07-08 f4162a41e7c4ee336c293d0ef18414b40e77f0dd diff --git a/repos/os/recipes/src/nit_focus/hash b/repos/os/recipes/src/nit_focus/hash index 39cdd0ded..b1d12b9ea 100644 --- a/repos/os/recipes/src/nit_focus/hash +++ b/repos/os/recipes/src/nit_focus/hash @@ -1 +1 @@ -- +2019-07-08 14c3f2d40827cc8286e73d07b16a51ab9e4a9249 diff --git a/repos/os/recipes/src/nitpicker/hash b/repos/os/recipes/src/nitpicker/hash index 7bc11b84e..ab2bd5a8b 100644 --- a/repos/os/recipes/src/nitpicker/hash +++ b/repos/os/recipes/src/nitpicker/hash @@ -1 +1 @@ -2019-06-05 d6f30181ae3bf8168f071903ec5b16f7c1bd9fa1 +2019-07-08 de605a5a5cc21619e775adc3c8b924b886160357 diff --git a/repos/os/recipes/src/nvme_drv/hash b/repos/os/recipes/src/nvme_drv/hash index 80007682d..56d3054a6 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 2536999a9..bafc6bc22 100644 --- a/repos/os/recipes/src/part_block/hash +++ b/repos/os/recipes/src/part_block/hash @@ -1 +1 @@ -2019-06-05 501c6ad27dcb00cfccdac44ff1137dd5088b231a +2019-07-08 ea4165422251da0486e183f63f040dd8a2381fdb diff --git a/repos/os/recipes/src/pbxa9_drivers/hash b/repos/os/recipes/src/pbxa9_drivers/hash index 39cdd0ded..8d8b37f3d 100644 --- a/repos/os/recipes/src/pbxa9_drivers/hash +++ b/repos/os/recipes/src/pbxa9_drivers/hash @@ -1 +1 @@ -- +2019-07-08 e481b9e320ed5f493cb7127ddaeab7a5cb11a86c diff --git a/repos/os/recipes/src/platform_drv/hash b/repos/os/recipes/src/platform_drv/hash index 8e56c10bd..8e6a1641b 100644 --- a/repos/os/recipes/src/platform_drv/hash +++ b/repos/os/recipes/src/platform_drv/hash @@ -1 +1 @@ -2019-05-29 e3815d8615201e083565191da9b9b699d00f9c3f +2019-07-08 8d84e7764a7cebaccf7f6433c3ad54f20c4503d3 diff --git a/repos/os/recipes/src/ps2_drv/hash b/repos/os/recipes/src/ps2_drv/hash index b174f558f..3a0c0db81 100644 --- a/repos/os/recipes/src/ps2_drv/hash +++ b/repos/os/recipes/src/ps2_drv/hash @@ -1 +1 @@ -2019-05-29 d298921b3603a1d24c8ab857ce450e35efc9029b +2019-07-08 61230e78e9bb919567bba5aa2ad92e2e74eb3b0c diff --git a/repos/os/recipes/src/ram_block/hash b/repos/os/recipes/src/ram_block/hash index fb2eb7de4..af21b712e 100644 --- a/repos/os/recipes/src/ram_block/hash +++ b/repos/os/recipes/src/ram_block/hash @@ -1 +1 @@ -2019-06-05 340969a3e0b2533a0daaf3adae6d0715b89f126b +2019-07-08 59f776d6fcc5c180ed61f1d58ce668c3dff3854d diff --git a/repos/os/recipes/src/ram_fs/hash b/repos/os/recipes/src/ram_fs/hash index 38e3771ce..1aa761acc 100644 --- a/repos/os/recipes/src/ram_fs/hash +++ b/repos/os/recipes/src/ram_fs/hash @@ -1 +1 @@ -2019-06-05 004a0b12f4f6673bf26681816c0664041c9ef3c2 +2019-07-08 2d2b4cdd3a6b52af29a7681faad4c7c69816e3ce diff --git a/repos/os/recipes/src/report_rom/hash b/repos/os/recipes/src/report_rom/hash index e88f98794..6270e5288 100644 --- a/repos/os/recipes/src/report_rom/hash +++ b/repos/os/recipes/src/report_rom/hash @@ -1 +1 @@ -2019-06-05 e8490a608ee00b382943ff0355c520cf42a00023 +2019-07-08 dfd0cf4237b5ee9622dbb3d25202dd9dcd710d2c diff --git a/repos/os/recipes/src/rom_block/hash b/repos/os/recipes/src/rom_block/hash index a0f0020e0..2766f3830 100644 --- a/repos/os/recipes/src/rom_block/hash +++ b/repos/os/recipes/src/rom_block/hash @@ -1 +1 @@ -2019-06-05 830c74bdf14047e45468bfd16f2543bdc31764ff +2019-07-08 299dab591156af2c8406e2cf64035324af9a5cef diff --git a/repos/os/recipes/src/rom_filter/hash b/repos/os/recipes/src/rom_filter/hash index 05ad2af1e..8edea3f35 100644 --- a/repos/os/recipes/src/rom_filter/hash +++ b/repos/os/recipes/src/rom_filter/hash @@ -1 +1 @@ -2019-06-05 fbf03c983326dee6bf1501a7e59c587679a01d3e +2019-07-08 c74df86f9c8588e737918c177cc737b8d41b215d diff --git a/repos/os/recipes/src/rom_logger/hash b/repos/os/recipes/src/rom_logger/hash index 4dc1e2ddf..e81889ef8 100644 --- a/repos/os/recipes/src/rom_logger/hash +++ b/repos/os/recipes/src/rom_logger/hash @@ -1 +1 @@ -2019-06-04 f84027d2ebdaa7a0f5d1b9b26f4ee82b7a7c2dc8 +2019-07-08 23695840a29326efa5a559c0db557e2fffb828e1 diff --git a/repos/os/recipes/src/rom_reporter/hash b/repos/os/recipes/src/rom_reporter/hash index fdc1fbd98..190fc8a1f 100644 --- a/repos/os/recipes/src/rom_reporter/hash +++ b/repos/os/recipes/src/rom_reporter/hash @@ -1 +1 @@ -2019-05-29 d4b26851db8642ded841b409020719493f7f5000 +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 71ce76ab8..b78bcd005 100644 --- a/repos/os/recipes/src/rom_to_file/hash +++ b/repos/os/recipes/src/rom_to_file/hash @@ -1 +1 @@ -2019-06-05 c291fda542955190c44a56623368bac085e6defd +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 39cdd0ded..ee858d398 100644 --- a/repos/os/recipes/src/rpi_fb_drv/hash +++ b/repos/os/recipes/src/rpi_fb_drv/hash @@ -1 +1 @@ -- +2019-07-08 484cff6960fc03c0032147e3b3bf4e81e7fc0407 diff --git a/repos/os/recipes/src/rtc_drv/hash b/repos/os/recipes/src/rtc_drv/hash index 4666662d2..6c12353b1 100644 --- a/repos/os/recipes/src/rtc_drv/hash +++ b/repos/os/recipes/src/rtc_drv/hash @@ -1 +1 @@ -2019-05-29 e7eda87d9ef3e66becf3b4ba7d38572218e1b39a +2019-07-08 63162b412d1071cae4ab301909a13d0003f2886f diff --git a/repos/os/recipes/src/sequence/hash b/repos/os/recipes/src/sequence/hash index ada66581b..86e4cebab 100644 --- a/repos/os/recipes/src/sequence/hash +++ b/repos/os/recipes/src/sequence/hash @@ -1 +1 @@ -2019-06-05 8065f6980ab0edf6aa041e3e319e365dca8ca3b3 +2019-07-08 9d58ee5b463bb7f68434683183f4afd0076ce70f diff --git a/repos/os/recipes/src/terminal_crosslink/hash b/repos/os/recipes/src/terminal_crosslink/hash index 0b880d49d..731777054 100644 --- a/repos/os/recipes/src/terminal_crosslink/hash +++ b/repos/os/recipes/src/terminal_crosslink/hash @@ -1 +1 @@ -2019-06-05 044589986328254f86cbe7de4b896d52b8286924 +2019-07-08 64b6caca1f2afd1d11a4a4b965142e76312b4a53 diff --git a/repos/os/recipes/src/terminal_log/hash b/repos/os/recipes/src/terminal_log/hash index 0eee7f6af..ad4ca2aa5 100644 --- a/repos/os/recipes/src/terminal_log/hash +++ b/repos/os/recipes/src/terminal_log/hash @@ -1 +1 @@ -2019-05-29 dfaed63969c0d07b16d6f33bed49b5b1cc0aced9 +2019-07-08 1843a95c39082d13abbd08339ba967c7e5f7b9a5 diff --git a/repos/os/recipes/src/test-block/hash b/repos/os/recipes/src/test-block/hash index 2db101486..87401e37b 100644 --- a/repos/os/recipes/src/test-block/hash +++ b/repos/os/recipes/src/test-block/hash @@ -1 +1 @@ -2019-06-05 18ff35d37a6508ab91cf5d0a9f7288193042dc91 +2019-07-08 cde02dd5379835f2399683a0e8b8469a9e2b162b diff --git a/repos/os/recipes/src/test-bomb/hash b/repos/os/recipes/src/test-bomb/hash index 710eeb77f..a94aeac8c 100644 --- a/repos/os/recipes/src/test-bomb/hash +++ b/repos/os/recipes/src/test-bomb/hash @@ -1 +1 @@ -2019-06-05 67a91f61a4e279759c4a89f711e4c7223801fd07 +2019-07-08 1f0fa80ecaf1d94f528fdd4186e2e18897d4b577 diff --git a/repos/os/recipes/src/test-clipboard/hash b/repos/os/recipes/src/test-clipboard/hash index dafa59818..423df0990 100644 --- a/repos/os/recipes/src/test-clipboard/hash +++ b/repos/os/recipes/src/test-clipboard/hash @@ -1 +1 @@ -2019-06-05 e27cd2376a1dad0569d66346b965ebab41257087 +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 7e0b1db46..603505057 100644 --- a/repos/os/recipes/src/test-dynamic_config/hash +++ b/repos/os/recipes/src/test-dynamic_config/hash @@ -1 +1 @@ -2019-06-05 8afbd5c8584d717deb6f73a66df0cffc45799e5d +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 c837fa01e..ff379b50d 100644 --- a/repos/os/recipes/src/test-fault_detection/hash +++ b/repos/os/recipes/src/test-fault_detection/hash @@ -1 +1 @@ -2019-06-05 5ce8dea0c620001fe75c24446570e6060b2964a3 +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 df256c962..fea649b64 100644 --- a/repos/os/recipes/src/test-fs_packet/hash +++ b/repos/os/recipes/src/test-fs_packet/hash @@ -1 +1 @@ -2019-06-05 606a136dfc30d3c55c8bdc8a0b52ee44b3f71fdb +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 889257aa8..0cd213609 100644 --- a/repos/os/recipes/src/test-fs_report/hash +++ b/repos/os/recipes/src/test-fs_report/hash @@ -1 +1 @@ -2019-06-05 3d5809ee7649697de1ea20a52271c94609770b0d +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 5711a5583..24f531e7f 100644 --- a/repos/os/recipes/src/test-immutable_rom/hash +++ b/repos/os/recipes/src/test-immutable_rom/hash @@ -1 +1 @@ -2019-06-04 2b6e5f720c9e583a4b9fe1147ea85283858cc7e1 +2019-07-08 698ef7fe2be9e6645fbd044d14baa98f7d009fac diff --git a/repos/os/recipes/src/test-init/hash b/repos/os/recipes/src/test-init/hash index 85cd49afc..ca63edcf9 100644 --- a/repos/os/recipes/src/test-init/hash +++ b/repos/os/recipes/src/test-init/hash @@ -1 +1 @@ -2019-06-05 598e9e7997708b4acd5e617d03311cb17b00c9b6 +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 9ecaec200..bd3fbebd1 100644 --- a/repos/os/recipes/src/test-init_loop/hash +++ b/repos/os/recipes/src/test-init_loop/hash @@ -1 +1 @@ -2019-06-05 dc845a5c5fa96220182b734eec668f04f5ed16d4 +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 c0c23ecde..85d1487fb 100644 --- a/repos/os/recipes/src/test-nic_loopback/hash +++ b/repos/os/recipes/src/test-nic_loopback/hash @@ -1 +1 @@ -2019-06-05 eeaed180f6c9f0e383a8c0992d3af19151451229 +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 cde44582f..e2700fad9 100644 --- a/repos/os/recipes/src/test-ram_fs_chunk/hash +++ b/repos/os/recipes/src/test-ram_fs_chunk/hash @@ -1 +1 @@ -2019-06-05 6638f41cedd40dd4b060e654ceaf468e823df4c2 +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 593a09538..7c4e0dd44 100644 --- a/repos/os/recipes/src/test-report_rom/hash +++ b/repos/os/recipes/src/test-report_rom/hash @@ -1 +1 @@ -2019-06-05 5b6153c639900a7bdce1b91100b315f7498876ea +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 2e7a30f27..96c91bcb4 100644 --- a/repos/os/recipes/src/test-resource_request/hash +++ b/repos/os/recipes/src/test-resource_request/hash @@ -1 +1 @@ -2019-06-05 bd9d028ac364adedc2a75e9a8f1ce719e860dc68 +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 6a3367f34..ba0a44a6b 100644 --- a/repos/os/recipes/src/test-resource_yield/hash +++ b/repos/os/recipes/src/test-resource_yield/hash @@ -1 +1 @@ -2019-06-05 14e9b77f3b90bd4ea5c2c22e50a0e3fe4429c9a5 +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 d0297ba92..db5202486 100644 --- a/repos/os/recipes/src/test-rom_block/hash +++ b/repos/os/recipes/src/test-rom_block/hash @@ -1 +1 @@ -2019-06-05 bec5c15920eb80bc3af353e4bc8a80d5b18917a1 +2019-07-08 05dcd4cbe80e91bc260d70b132caee6627ae9bc5 diff --git a/repos/os/recipes/src/test-rtc/hash b/repos/os/recipes/src/test-rtc/hash index 39cdd0ded..24eac17e6 100644 --- a/repos/os/recipes/src/test-rtc/hash +++ b/repos/os/recipes/src/test-rtc/hash @@ -1 +1 @@ -- +2019-07-08 cd1b8a716abbd46be875f04471adb13b148b969e diff --git a/repos/os/recipes/src/test-signal/hash b/repos/os/recipes/src/test-signal/hash index f47aacf50..73c34c63f 100644 --- a/repos/os/recipes/src/test-signal/hash +++ b/repos/os/recipes/src/test-signal/hash @@ -1 +1 @@ -2019-06-05 f5cace705c6cf0f1cbb266e2943afe4d217f8a28 +2019-07-08 16afd7afcb3c3ca1c7b16b338c2ccba6f49ecbb5 diff --git a/repos/os/recipes/src/test-slab/hash b/repos/os/recipes/src/test-slab/hash index 6062e7e25..a62cf3cf0 100644 --- a/repos/os/recipes/src/test-slab/hash +++ b/repos/os/recipes/src/test-slab/hash @@ -1 +1 @@ -2019-06-05 8a793ac3db6fc43a235d630399a312a005a8594d +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 a89e9925e..7ef8f4e5a 100644 --- a/repos/os/recipes/src/test-terminal_crosslink/hash +++ b/repos/os/recipes/src/test-terminal_crosslink/hash @@ -1 +1 @@ -2019-06-05 9833fa700ecd4247b56d166da6d8f9a31a70e640 +2019-07-08 5d073bb8c1bfcd26e20e2d1f5c582d94d0c9afd6 diff --git a/repos/os/recipes/src/test-trace/hash b/repos/os/recipes/src/test-trace/hash index 82f7410ed..0e68af993 100644 --- a/repos/os/recipes/src/test-trace/hash +++ b/repos/os/recipes/src/test-trace/hash @@ -1 +1 @@ -2019-06-05 45652d22268be5afd03a27834f80e1732b48f3d3 +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 60fa14642..8262dd4a3 100644 --- a/repos/os/recipes/src/test-trace_logger/hash +++ b/repos/os/recipes/src/test-trace_logger/hash @@ -1 +1 @@ -2019-06-05 9982bfe46088899480092c65efcfcf14a0761ee3 +2019-07-08 373058a14b405d2f1652bc6a809cbbfb70147110 diff --git a/repos/os/recipes/src/test-utf8/hash b/repos/os/recipes/src/test-utf8/hash index 09e5ad43f..331b273b6 100644 --- a/repos/os/recipes/src/test-utf8/hash +++ b/repos/os/recipes/src/test-utf8/hash @@ -1 +1 @@ -2019-06-05 b924f15399c2e51df893b82f954562e8cae304ef +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 586a6a697..f9ca11ef9 100644 --- a/repos/os/recipes/src/test-vfs_stress/hash +++ b/repos/os/recipes/src/test-vfs_stress/hash @@ -1 +1 @@ -2019-06-05 74428fab2780e420eca60ffd607324639ccd7286 +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 07d5288b4..bf4632d70 100644 --- a/repos/os/recipes/src/test-weak_ptr/hash +++ b/repos/os/recipes/src/test-weak_ptr/hash @@ -1 +1 @@ -2019-06-05 71d5ffe45c9ad59ec7271f03cf13f877dafd8082 +2019-07-08 2cf2dd3fe27ade228d2f2115d6136c5769599dd0 diff --git a/repos/os/recipes/src/top/hash b/repos/os/recipes/src/top/hash index d08b4727b..0a7d0354c 100644 --- a/repos/os/recipes/src/top/hash +++ b/repos/os/recipes/src/top/hash @@ -1 +1 @@ -2019-06-05 36d8bbd4775d554d4198368effdb37f45fb19bda +2019-07-08 59fed61835195820eac5ea73ee0a55bdbd45ecb0 diff --git a/repos/os/recipes/src/trace_logger/hash b/repos/os/recipes/src/trace_logger/hash index a8f1041f6..5ccd52850 100644 --- a/repos/os/recipes/src/trace_logger/hash +++ b/repos/os/recipes/src/trace_logger/hash @@ -1 +1 @@ -2019-06-05 d400fac18e9367fd1809c0b644d6e41f7bf5425c +2019-07-08 e9ae85736f62cf1dbb12b8815d9c1727618f5c90 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 000000000..c59342778 --- /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 000000000..85963e764 --- /dev/null +++ b/repos/os/recipes/src/trace_policy/hash @@ -0,0 +1 @@ +2019-07-08 82278d75d73f8ca83a67c2cbcc1e2c183db67099 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 000000000..ec3bf565d --- /dev/null +++ b/repos/os/recipes/src/trace_policy/used_apis @@ -0,0 +1,2 @@ +base +os diff --git a/repos/os/recipes/src/trace_subject_reporter/hash b/repos/os/recipes/src/trace_subject_reporter/hash index 39cdd0ded..bad48f780 100644 --- a/repos/os/recipes/src/trace_subject_reporter/hash +++ b/repos/os/recipes/src/trace_subject_reporter/hash @@ -1 +1 @@ -- +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 dbba5703d..5cf4f8f14 100644 --- a/repos/os/recipes/src/usb_block_drv/hash +++ b/repos/os/recipes/src/usb_block_drv/hash @@ -1 +1 @@ -2019-05-29 c0dfc8b8e6c55f2f3a08e647cfc1d4ae0403e290 +2019-07-08 045a6d5926039b73206717e746f2fe6f85aa4f6b diff --git a/repos/os/recipes/src/vfs/hash b/repos/os/recipes/src/vfs/hash index 961008324..c197c9b8a 100644 --- a/repos/os/recipes/src/vfs/hash +++ b/repos/os/recipes/src/vfs/hash @@ -1 +1 @@ -2019-06-05 4a16d02131da517cca89dfcc6d78bae48b96d31b +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 39cdd0ded..300a66d7e 100644 --- a/repos/os/recipes/src/zynq_nic_drv/hash +++ b/repos/os/recipes/src/zynq_nic_drv/hash @@ -1 +1 @@ -- +2019-07-08 d7e68301275447502123a995f63db05c60541298 diff --git a/repos/os/run/fb_bench.run b/repos/os/run/fb_bench.run index cca3d1b7e..4aca65548 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 a50e9b8e5..b063baa8c 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 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 eb39a512f..aaa2bde00 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 1a9a6939d..bd138ff9b 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] || +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." exit 0 diff --git a/repos/os/run/ping_nic_router.run b/repos/os/run/ping_nic_router.run index dbbf17e71..acc9a890a 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] || +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." exit 0 diff --git a/repos/os/run/test.run b/repos/os/run/test.run index d99d320ee..3cd97250f 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) diff --git a/repos/os/src/server/clipboard/main.cc b/repos/os/src/server/clipboard/main.cc index 0d8b2e80b..0f272bf5f 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()); + Genode::Xml_node const focus = _focus_ds.xml(); - if (focus.attribute_value("active", false)) - _focused_domain = focus.attribute_value("domain", Domain()); - - } 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,13 @@ 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) { + _config.sigh(_config_handler); + _handle_config(); _focus_ds.sigh(_focus_handler); _handle_focus(); diff --git a/repos/os/src/server/trace_fs/README b/repos/os/src/server/trace_fs/README deleted file mode 100644 index f5dcd307a..000000000 --- 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 595df39e6..000000000 --- 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 79fcfaa55..000000000 --- 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 dfcda613a..000000000 --- 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 07a3fba21..000000000 --- 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 8a5d0fed9..000000000 --- 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 8205eb3f9..000000000 --- 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 17785d99d..000000000 --- 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 84088ac41..000000000 --- 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 2ce96cc1b..000000000 --- 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 43d4b122b..000000000 --- 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/os/src/test/block/client/main.cc b/repos/os/src/test/block/client/main.cc index d1b8fcffe..41224fd18 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 { diff --git a/repos/ports/recipes/pkg/arora/hash b/repos/ports/recipes/pkg/arora/hash index 77159dcc7..8e367904d 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 68db31751..e807664d3 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 d274f5300..c2b4672ad 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 12925dcc0..5bb65a514 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/noux-system/runtime b/repos/ports/recipes/pkg/noux-system/runtime index cd3db6cdd..7e5c3c145 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/pkg/report_dump/hash b/repos/ports/recipes/pkg/report_dump/hash index 0abfab936..dab413cbf 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 b9ca8346d..a94924051 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash +++ b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash @@ -1 +1 @@ -2019-06-02 41edd77c040fcf312aeadbd05616509a49b5e229 +2019-07-08 93657b32cd029a2211d8bb9b576760e4e2f9f420 diff --git a/repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime b/repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime index 523f3c319..21069f30f 100755 --- a/repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime +++ b/repos/ports/recipes/pkg/vbox5-nova-sculpt/runtime @@ -7,11 +7,12 @@ - - + + + diff --git a/repos/ports/recipes/raw/noux-system/hash b/repos/ports/recipes/raw/noux-system/hash index 043f0390c..0fe852eaa 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/raw/noux-system/noux-system.config b/repos/ports/recipes/raw/noux-system/noux-system.config index 8c88d7d3a..25c9e9edb 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 @@ + + + + - + + + diff --git a/repos/ports/recipes/src/arora/hash b/repos/ports/recipes/src/arora/hash index 39cdd0ded..0c8a8f4cc 100644 --- a/repos/ports/recipes/src/arora/hash +++ b/repos/ports/recipes/src/arora/hash @@ -1 +1 @@ -- +2019-07-08 16691504fe3a159103e5f7a4c484f44f17ec61cf diff --git a/repos/ports/recipes/src/bash-minimal/hash b/repos/ports/recipes/src/bash-minimal/hash index b83c93474..7594fe5d6 100644 --- a/repos/ports/recipes/src/bash-minimal/hash +++ b/repos/ports/recipes/src/bash-minimal/hash @@ -1 +1 @@ -2019-05-29 a86ac9bec88cbefb30e389f9e07c17e1c6240aab +2019-07-08 71addf7c9333e9062712084eba5bb60af2e42cd5 diff --git a/repos/ports/recipes/src/bash/hash b/repos/ports/recipes/src/bash/hash index 39cdd0ded..2ffeb872f 100644 --- a/repos/ports/recipes/src/bash/hash +++ b/repos/ports/recipes/src/bash/hash @@ -1 +1 @@ -- +2019-07-08 d98815baf4913cad455476c68ce6703986a76b8c diff --git a/repos/ports/recipes/src/binutils_x86/hash b/repos/ports/recipes/src/binutils_x86/hash index 13d3dc97a..71ae0ac6a 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 95a67448b..7d138f291 100644 --- a/repos/ports/recipes/src/coreutils-minimal/hash +++ b/repos/ports/recipes/src/coreutils-minimal/hash @@ -1 +1 @@ -2019-05-29 871e94e9bf86e7531e320969bea4820e4bedc4d5 +2019-07-08 9340a43cd2bb03beeddf96fa9718886b82b4a803 diff --git a/repos/ports/recipes/src/coreutils/hash b/repos/ports/recipes/src/coreutils/hash index 46a7c56e3..e7ae2033c 100644 --- a/repos/ports/recipes/src/coreutils/hash +++ b/repos/ports/recipes/src/coreutils/hash @@ -1 +1 @@ -2019-06-06 39cc30fd58904c32aff8674fa8e2620178ecd91a +2019-07-08 bb2f6bd4227606b4714b8905226b67cbd611da64 diff --git a/repos/ports/recipes/src/e2fsprogs-minimal/hash b/repos/ports/recipes/src/e2fsprogs-minimal/hash index 906a15b73..160352725 100644 --- a/repos/ports/recipes/src/e2fsprogs-minimal/hash +++ b/repos/ports/recipes/src/e2fsprogs-minimal/hash @@ -1 +1 @@ -2019-05-29 c5b45efd22e270db90223bebca83b6dc23ea9387 +2019-07-08 8ffc595ecf07afada98b96e8f8c40d2e22407562 diff --git a/repos/ports/recipes/src/e2fsprogs/hash b/repos/ports/recipes/src/e2fsprogs/hash index 4a350f3dd..7dc96098d 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 3c57b87a6..b09429cfd 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 39cdd0ded..fcc66cd35 100644 --- a/repos/ports/recipes/src/gcc_x86/hash +++ b/repos/ports/recipes/src/gcc_x86/hash @@ -1 +1 @@ -- +2019-07-08 09174f57d9a3f68b6c41a6f5677c5b08c1c2d8e4 diff --git a/repos/ports/recipes/src/gnumake/hash b/repos/ports/recipes/src/gnumake/hash index 5071bb959..f0f10a05e 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 11e5cf7c7..9b60c4647 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 39cdd0ded..5e681abdf 100644 --- a/repos/ports/recipes/src/libgetdns/hash +++ b/repos/ports/recipes/src/libgetdns/hash @@ -1 +1 @@ -- +2019-07-08 c0c81bf10be42d4eb51eb8170e20dd974564818e diff --git a/repos/ports/recipes/src/lighttpd/hash b/repos/ports/recipes/src/lighttpd/hash index ec25d92a0..6087aa968 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 2e8752436..940ab8ab2 100644 --- a/repos/ports/recipes/src/noux/hash +++ b/repos/ports/recipes/src/noux/hash @@ -1 +1 @@ -2019-06-06-c f05d7229861c347b08b9eb1e9fca2f0da18d6b73 +2019-07-08 69e45a6af4a961f6a080b823515164ad41141523 diff --git a/repos/ports/recipes/src/sed/hash b/repos/ports/recipes/src/sed/hash index fb4507ab4..7f18ab7de 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 39cdd0ded..f512852b8 100644 --- a/repos/ports/recipes/src/seoul/hash +++ b/repos/ports/recipes/src/seoul/hash @@ -1 +1 @@ -- +2019-07-08 9ec300adadc0808c25fc137925eb4548fb8c21a9 diff --git a/repos/ports/recipes/src/stubby/hash b/repos/ports/recipes/src/stubby/hash index 39cdd0ded..d4e52df55 100644 --- a/repos/ports/recipes/src/stubby/hash +++ b/repos/ports/recipes/src/stubby/hash @@ -1 +1 @@ -- +2019-07-08 a18ac4b2eb35408aa4cdaf39653f5de8a1eb94d4 diff --git a/repos/ports/recipes/src/tar/hash b/repos/ports/recipes/src/tar/hash index 63a1e367a..92a31fe44 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 39cdd0ded..e7061d2d1 100644 --- a/repos/ports/recipes/src/tclsh/hash +++ b/repos/ports/recipes/src/tclsh/hash @@ -1 +1 @@ -- +2019-07-08 56a4d57cd89b1e88d7a122ad26d01dff61c8347f diff --git a/repos/ports/recipes/src/vbox5-nova/hash b/repos/ports/recipes/src/vbox5-nova/hash index 87aacaf1f..363fd4b5d 100644 --- a/repos/ports/recipes/src/vbox5-nova/hash +++ b/repos/ports/recipes/src/vbox5-nova/hash @@ -1 +1 @@ -2019-06-02 5be10012ad14b1963753428b563228c0d05b274f +2019-07-08 0b74557d38c296303dc37f589c259d1735eb46ff diff --git a/repos/ports/recipes/src/vbox5/hash b/repos/ports/recipes/src/vbox5/hash index ff5ea951d..fabe416f6 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 a141b2550..3adaf3a2d 100644 --- a/repos/ports/recipes/src/verify/hash +++ b/repos/ports/recipes/src/verify/hash @@ -1 +1 @@ -2019-05-29 886d2266312cd21ba33c7a42c4fb1a42485ac810 +2019-07-08 9ec400b95fd525078680274745d35ca0e6b1434c diff --git a/repos/ports/recipes/src/vim-minimal/hash b/repos/ports/recipes/src/vim-minimal/hash index a0b150339..685d6d7e4 100644 --- a/repos/ports/recipes/src/vim-minimal/hash +++ b/repos/ports/recipes/src/vim-minimal/hash @@ -1 +1 @@ -2019-05-29 750a1392a678c4dfd51b24e4b346145c56909815 +2019-07-08 56e3e4396b86f77d74ae416285e4e7cf1c3b9b6e diff --git a/repos/ports/recipes/src/vim/hash b/repos/ports/recipes/src/vim/hash index 2ff0df59a..2ff42cb63 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 454e4341c..502f5b959 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 diff --git a/repos/ports/run/netperf.inc b/repos/ports/run/netperf.inc index de1b8b1ab..f01ed7824 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 } diff --git a/repos/ports/run/noux_trace_fs.run b/repos/ports/run/noux_trace_fs.run deleted file mode 100644 index 9f21f5803..000000000 --- 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 : diff --git a/repos/ports/run/noux_vim.run b/repos/ports/run/noux_vim.run index 85f7b2966..7298db13f 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 diff --git a/repos/ports/run/vbox_win.inc b/repos/ports/run/vbox_win.inc index 50db1b361..2c4cd088a 100644 --- a/repos/ports/run/vbox_win.inc +++ b/repos/ports/run/vbox_win.inc @@ -144,7 +144,9 @@ if { $use_vms > 1 } { - + + + diff --git a/repos/ports/src/lib/libc_noux/plugin.cc b/repos/ports/src/lib/libc_noux/plugin.cc index 655aac990..15407a08a 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"))); /********************* diff --git a/tool/autopilot b/tool/autopilot index ccf39044b..1f9442c40 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,13 +55,27 @@ 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) + + 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" @@ -111,83 +126,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 name of log file for test of 'run_script' on 'platform' -# -proc log_file_name { platform kernel run_script } { - return $platform.$kernel.$run_script.log + return [file join $test_dir $arch] } ## -# Return path to log file for test of 'run_script' on 'platform' +# Return specific parts of target (arch-board-kernel) # -proc log_file { platform kernel run_script } { +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 target +# +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 target +# +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 +219,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 +252,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 +269,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 +284,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. # @@ -297,22 +352,35 @@ if {[file exists $test_dir] && ![get_cmd_switch --force] && if {[get_cmd_switch --force]} { wipe_test_dir } -# create build directories -foreach platform $platforms { - - set build_dir [build_dir $platform] - - if {[get_cmd_switch --keep] && [file exists $build_dir]} { continue } - - if {[catch { - exec [genode_dir]/tool/create_builddir $platform BUILD_DIR=$build_dir - }]} { - fail "create_builddir for platform $platform failed" -1 +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]} { + append_run_opt $build_conf + continue + } + + if {[catch { + exec [genode_dir]/tool/create_builddir $arch BUILD_DIR=$build_dir + }]} { + fail "create_builddir for architecture $arch failed" -1 + } + 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 @@ -328,12 +396,7 @@ foreach platform $platforms { 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 } @@ -345,26 +408,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 +447,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 +482,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 { diff --git a/tool/depot/publish b/tool/depot/publish index e11d667d1..d359edcfd 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 @@ -103,13 +105,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 diff --git a/tool/run/depot.inc b/tool/run/depot.inc index 9e804c993..da513070a 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