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