fix: comprehensive boot warnings and exceptions — fixable silenced, unfixable diagnosed

Build system (5 gaps hardened):
- COOKBOOK_OFFLINE defaults to true (fork-mode)
- normalize_patch handles diff -ruN format
- New 'repo validate-patches' command (25/25 relibc patches)
- 14 patched Qt/Wayland/display recipes added to protected list
- relibc archive regenerated with current patch chain

Boot fixes (fixable):
- Full ISO EFI partition: 16 MiB → 1 MiB (matches mini, BIOS hardcoded 2 MiB offset)
- D-Bus system bus: absolute /usr/bin/dbus-daemon path (was skipped)
- redbear-sessiond: absolute /usr/bin/redbear-sessiond path (was skipped)
- daemon framework: silenced spurious INIT_NOTIFY warnings for oneshot_async services (P0-daemon-silence-init-notify.patch)
- udev-shim: demoted INIT_NOTIFY warning to INFO (expected for oneshot_async)
- relibc: comprehensive named semaphores (sem_open/close/unlink) replacing upstream todo!() stubs
- greeterd: Wayland socket timeout 15s → 30s (compositor DRM wait)
- greeter-ui: built and linked (header guard unification, sem_compat stubs removed)
- mc: un-ignored in both configs, fixed glib/libiconv/pcre2 transitive deps
- greeter config: removed stale keymapd dependency from display/greeter services
- prefix toolchain: relibc headers synced, _RELIBC_STDLIB_H guard unified

Unfixable (diagnosed, upstream):
- i2c-hidd: abort on no-I2C-hardware (QEMU) — process::exit → relibc abort
- kded6/greeter-ui: page fault 0x8 — Qt library null deref
- Thread panics fd != -1 — Rust std library on Redox
- DHCP timeout / eth0 MAC — QEMU user-mode networking
- hwrngd/thermald — no hardware RNG/thermal in VM
- live preload allocation — BIOS memory fragmentation, continues on demand
This commit is contained in:
2026-05-05 20:20:37 +01:00
parent a5f97b6632
commit f31522130f
81834 changed files with 11051982 additions and 108 deletions
@@ -0,0 +1,32 @@
# Copyright (C) 2025 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qsvgrenderer Binary:
#####################################################################
if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
cmake_minimum_required(VERSION 3.16)
project(tst_bench_qsvgrenderer LANGUAGES CXX)
find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
endif()
qt_internal_add_benchmark(tst_bench_qsvgrenderer
SOURCES
tst_qsvgrenderer.cpp
LIBRARIES
Qt::Gui
Qt::Test
Qt::Svg
)
qt_internal_add_resource(tst_bench_qsvgrenderer "tst_bench_qsvgrenderer_dat"
PREFIX
"/"
FILES
"./data/tiger.svg"
"./data/filter.svg"
"./data/mask.svg"
"./data/opacity.svg"
"./data/text.svg"
)
@@ -0,0 +1,140 @@
<svg width="550" height="700" viewBox="0 0 550 700" xmlns="http://www.w3.org/2000/svg">
<filter id="f1" filterUnits="userSpaceOnUse" primitiveUnits="userSpaceOnUse">
<feOffset in="SourceGraphic" dx="20" dy="20" />
</filter>
<filter id="f2" filterUnits="userSpaceOnUse" primitiveUnits="objectBoundingBox">
<feOffset in="SourceGraphic" dx="0.2" dy="0.2" />
</filter>
<filter id="f3" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse">
<feOffset in="SourceGraphic" dx="20" dy="20" />
</filter>
<filter id="f4" filterUnits="objectBoundingBox" primitiveUnits="objectBoundingBox">
<feOffset in="SourceGraphic" dx="0.2" dy="0.2" />
</filter>
<filter id="b1" filterUnits="userSpaceOnUse" primitiveUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="20" />
</filter>
<filter id="b2" filterUnits="userSpaceOnUse" primitiveUnits="objectBoundingBox">
<feGaussianBlur in="SourceGraphic" stdDeviation="0.2" />
</filter>
<filter id="b3" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="20" />
</filter>
<filter id="b4" filterUnits="objectBoundingBox" primitiveUnits="objectBoundingBox">
<feGaussianBlur in="SourceGraphic" stdDeviation="0.2" />
</filter>
<filter id="c1" filterUnits="userSpaceOnUse" primitiveUnits="userSpaceOnUse">
<feColorMatrix in="SourceGraphic" type="matrix" values="0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" />
</filter>
<filter id="c2" filterUnits="userSpaceOnUse" primitiveUnits="objectBoundingBox">
<feColorMatrix in="SourceGraphic" type="matrix" values="0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" />
</filter>
<filter id="c3" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse">
<feColorMatrix in="SourceGraphic" type="matrix" values="0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" />
</filter>
<filter id="c4" filterUnits="objectBoundingBox" primitiveUnits="objectBoundingBox">
<feColorMatrix in="SourceGraphic" type="matrix" values="0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0" />
</filter>
<filter id="m1" filterUnits="userSpaceOnUse" primitiveUnits="userSpaceOnUse">
<feGaussianBlur in="SourceAlpha" stdDeviation="2" result="blur2" />
<feOffset in="blur2" dx="-5" dy="-5" result="offset2" />
<feMerge>
<feMergeNode in="offset2" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="m2" filterUnits="userSpaceOnUse" primitiveUnits="objectBoundingBox">
<feGaussianBlur in="SourceAlpha" stdDeviation="0.02" result="blur2" />
<feOffset in="blur2" dx="-0.05" dy="-0.05" result="offset2" />
<feMerge>
<feMergeNode in="offset2" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="m3" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse">
<feGaussianBlur in="SourceAlpha" stdDeviation="2" result="blur2" />
<feOffset in="blur2" dx="-5" dy="-5" result="offset2" />
<feMerge>
<feMergeNode in="offset2" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="m4" filterUnits="objectBoundingBox" primitiveUnits="objectBoundingBox">
<feGaussianBlur in="SourceAlpha" stdDeviation="0.02" result="blur2" />
<feOffset in="blur2" dx="-0.05" dy="-0.05" result="offset2" />
<feMerge>
<feMergeNode in="offset2" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="p1" filterUnits="userSpaceOnUse" primitiveUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" />
<feComposite in2="SourceAlpha" operator="xor" />
</filter>
<filter id="p2" filterUnits="userSpaceOnUse" primitiveUnits="objectBoundingBox">
<feOffset dx="0.2" dy="0.2" />
<feComposite in2="SourceAlpha" operator="xor" />
</filter>
<filter id="p3" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" />
<feComposite in2="SourceAlpha" operator="xor" />
</filter>
<filter id="p4" filterUnits="objectBoundingBox" primitiveUnits="objectBoundingBox">
<feOffset dx="0.2" dy="0.2" />
<feComposite in2="SourceAlpha" operator="xor" />
</filter>
<filter id="d1" filterUnits="userSpaceOnUse" x="70" y="470" width="180" height="180" primitiveUnits="userSpaceOnUse">
<feFlood flood-color="purple" />
</filter>
<filter id="d2" filterUnits="userSpaceOnUse" x="170" y="470" width="180" height="180" primitiveUnits="objectBoundingBox">
<feFlood flood-color="purple" />
</filter>
<filter id="d3" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse">
<feFlood flood-color="purple" />
</filter>
<filter id="d4" filterUnits="objectBoundingBox" primitiveUnits="objectBoundingBox">
<feFlood flood-color="purple" />
</filter>
<circle cx="60" cy="60" r="50" fill="green" opacity="0.5" />
<circle cx="160" cy="60" r="50" fill="red" opacity="0.5" filter="url(#f1)" />
<circle cx="260" cy="60" r="50" fill="blue" opacity="0.5" filter="url(#f2)" />
<circle cx="360" cy="60" r="50" fill="yellow" opacity="0.5" filter="url(#f3)" />
<circle cx="460" cy="60" r="50" fill="magenta" opacity="0.5" filter="url(#f4)" />
<circle cx="60" cy="160" r="50" fill="green" opacity="0.5" />
<circle cx="160" cy="160" r="50" fill="red" opacity="0.5" filter="url(#b1)" />
<circle cx="260" cy="160" r="50" fill="blue" opacity="0.5" filter="url(#b2)" />
<circle cx="360" cy="160" r="50" fill="yellow" opacity="0.5" filter="url(#b3)" />
<circle cx="460" cy="160" r="50" fill="magenta" opacity="0.5" filter="url(#b4)" />
<circle cx="60" cy="260" r="50" fill="green" opacity="0.5" />
<circle cx="160" cy="260" r="50" fill="red" opacity="0.5" filter="url(#c1)" />
<circle cx="260" cy="260" r="50" fill="blue" opacity="0.5" filter="url(#c2)" />
<circle cx="360" cy="260" r="50" fill="yellow" opacity="0.5" filter="url(#c3)" />
<circle cx="460" cy="260" r="50" fill="magenta" opacity="0.5" filter="url(#c4)" />
<circle cx="60" cy="360" r="50" fill="green" opacity="0.5" />
<circle cx="160" cy="360" r="50" fill="red" opacity="0.5" filter="url(#m1)" />
<circle cx="260" cy="360" r="50" fill="blue" opacity="0.5" filter="url(#m2)" />
<circle cx="360" cy="360" r="50" fill="yellow" opacity="0.5" filter="url(#m3)" />
<circle cx="460" cy="360" r="50" fill="magenta" opacity="0.5" filter="url(#m4)" />
<circle cx="60" cy="460" r="50" fill="green" opacity="0.5" />
<circle cx="160" cy="460" r="50" fill="red" opacity="0.5" filter="url(#p1)" />
<circle cx="260" cy="460" r="50" fill="blue" opacity="0.5" filter="url(#p2)" />
<circle cx="360" cy="460" r="50" fill="yellow" opacity="0.5" filter="url(#p3)" />
<circle cx="460" cy="460" r="50" fill="magenta" opacity="0.5" filter="url(#p4)" />
<circle cx="60" cy="560" r="50" fill="green" opacity="0.5" />
<circle cx="160" cy="560" r="50" fill="red" opacity="0.5" filter="url(#d1)" />
<circle cx="260" cy="560" r="50" fill="blue" opacity="0.5" filter="url(#d2)" />
<circle cx="360" cy="560" r="50" fill="yellow" opacity="0.5" filter="url(#d3)" />
<circle cx="460" cy="560" r="50" fill="magenta" opacity="0.5" filter="url(#d4)" />
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

@@ -0,0 +1,34 @@
<svg viewBox="-10 -10 560 230" xmlns="http://www.w3.org/2000/svg">
<mask x="0.1" y="0.1" width="0.8" height="0.8" id="myMask">
<g>
<rect x="0" y="0" width="100" height="100" fill="white" />
<path d="M10,35 A20,20,0,0,1,50,35 A20,20,0,0,1,90,35 Q90,65,50,95 Q10,65,10,35 Z"
fill="black" />
</g>
</mask>
<mask x="0" y="0" width="0.5" height="1" id="myMask2">
<g>
<rect x="0" y="0" width="100" height="100" fill="white" />
<path d="M10,35 A20,20,0,0,1,50,35 A20,20,0,0,1,90,35 Q90,65,50,95 Q10,65,10,35 Z"
fill="black" />
</g>
</mask>
<rect transform="translate(0, 0)" x="0" y="0" width="100" height="100" opacity="0.5" mask="url(#myMask)" />
<circle transform="translate(110, 0)" cx="50" cy="50" r="50" mask="url(#myMask)" />
<ellipse transform="translate(220, 0)" cx="50" cy="50" rx="40" ry="70" mask="url(#myMask)" />
<line transform="translate(330, 0)" x1="0" y1="0" x2="100" y2="100" style="stroke:rgb(255,0,0);stroke-width:2" mask="url(#myMask)" />
<polygon transform="translate(440, 0)" points="-10,110 -10,-10 110,110" fill="green" mask="url(#myMask)" />
<polyline transform="translate(0, 110)" points="10,90 10,10 90,90, 10,90" style="fill:none;stroke:black;stroke-width:3" mask="url(#myMask)" />
<path transform="translate(110, 110)" d="M10,90 L10,10 L90,90, Z" fill="black" mask="url(#myMask)" />
<text transform="translate(220, 110)" fill="blue" x="0" y="20" mask="url(#myMask)" font-family="Arial" font-size="16"> Lovely SVG! </text>
<g transform="translate(330, 110)" mask="url(#myMask)">
<rect x="5" y="10" width="40" height="80" />
<ellipse cx="75" cy="50" ry="40" rx="20" />
</g>
<rect transform="translate(440, 110)" x="0" y="0" width="100" height="100" fill="yellow" />
<rect transform="translate(440, 110)" x="0" y="0" width="100" height="100" fill="red" mask="url(#myMask)" />
<rect transform="translate(440, 110)" x="0" y="0" width="100" height="100" fill="blue" mask="url(#myMask2)" />
<rect transform="translate(440, 110)" x="0" y="0" width="50" height="100" fill="green" mask="url(#myMask)" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,19 @@
<svg version="1.2" baseProfile="tiny" viewBox="0 0 200 200" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(0, 0)">
<path style="fill:#808080" d="M 10 10 L 10 50 L 50 50 L 50 10 z" fill-opacity="0.5"/>
<path style="fill:#808080" d="M 30 30 L 30 70 L 70 70 L 70 30 z" fill-opacity="0.5"/>
</g>
<g transform="translate(80, 0)" fill-opacity="0.5">
<path style="fill:#808080" d="M 10 10 L 10 50 L 50 50 L 50 10 z"/>
<path style="fill:#808080" d="M 30 30 L 30 70 L 70 70 L 70 30 z"/>
</g>
<g transform="translate(0, 80)">
<path style="fill:#808080" d="M 10 10 L 10 50 L 50 50 L 50 10 z" opacity="0.5"/>
<path style="fill:#808080" d="M 30 30 L 30 70 L 70 70 L 70 30 z" opacity="0.5"/>
</g>
<g transform="translate(80, 80)" opacity="0.5">
<path style="fill:#808080" d="M 10 10 L 10 50 L 50 50 L 50 10 z"/>
<path style="fill:#808080" d="M 30 30 L 30 70 L 70 70 L 70 30 z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1016 B

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="500">
<defs>
<g id="loremIpsum" font-family="sans-serif" font-size="20px">
<text x="20" y="20">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod
tempor incidunt ut labore</text>
<text x="20" y="50">et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris</text>
<text x="20" y="80">nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in
voluptate velit esse</text>
</g>
</defs>
<use href="#loremIpsum" y="20"/>
<use href="#loremIpsum" y="140" fill="green" stroke="blue" font-weight="bold"/>
<use href="#loremIpsum" y="260" fill="green" stroke="blue" font-weight="bold" fill-opacity="0.3"/>
<use href="#loremIpsum" y="380" fill="green" stroke="blue" font-weight="bold" stroke-opacity="0.3"/>
</svg>

After

Width:  |  Height:  |  Size: 892 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 94 KiB

@@ -0,0 +1,139 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qtest.h>
#include <QFile>
#include <QPainter>
#include <QPicture>
#include <QSvgRenderer>
using namespace Qt::Literals::StringLiterals;
class tst_QSvgRenderer : public QObject
{
Q_OBJECT
public:
tst_QSvgRenderer();
virtual ~tst_QSvgRenderer();
public slots:
void init();
void cleanup();
private slots:
void construct();
void load_data();
void load();
void render_picture_data();
void render_picture();
void render_image_data();
void render_image();
};
tst_QSvgRenderer::tst_QSvgRenderer()
{
}
tst_QSvgRenderer::~tst_QSvgRenderer()
{
}
void tst_QSvgRenderer::init()
{
}
void tst_QSvgRenderer::cleanup()
{
}
void tst_QSvgRenderer::construct()
{
QBENCHMARK {
QSvgRenderer renderer;
}
}
void load_sample_filenames()
{
QTest::addColumn<QString>("fileName");
QTest::newRow("tiger") << u":/data/tiger.svg"_s;
QTest::newRow("filter") << u":/data/filter.svg"_s;
QTest::newRow("mask") << u":/data/mask.svg"_s;
QTest::newRow("opacity") << u":/data/opacity.svg"_s;
QTest::newRow("text") << u":/data/text.svg"_s;
}
void tst_QSvgRenderer::load_data()
{
load_sample_filenames();
}
void tst_QSvgRenderer::load()
{
QFETCH(QString, fileName);
QFile file(fileName);
if (!file.open(QFile::ReadOnly))
QFAIL(qPrintable(QStringLiteral("Cannot open file %1").arg(fileName)));
QByteArray data = file.readAll();
QSvgRenderer renderer;
QBENCHMARK {
renderer.load(data);
}
}
void tst_QSvgRenderer::render_picture_data()
{
load_sample_filenames();
}
void tst_QSvgRenderer::render_picture()
{
QFETCH(QString, fileName);
QFile file(fileName);
if (!file.open(QFile::ReadOnly))
QFAIL(qPrintable(QStringLiteral("Cannot open file %1").arg(fileName)));
QByteArray data = file.readAll();
QSvgRenderer renderer;
renderer.load(data);
QPicture picture;
picture.setBoundingRect(QRect(QPoint(), renderer.defaultSize()));
QPainter painter(&picture);
QBENCHMARK {
renderer.render(&painter);
}
}
void tst_QSvgRenderer::render_image_data()
{
load_sample_filenames();
}
void tst_QSvgRenderer::render_image()
{
QFETCH(QString, fileName);
QFile file(fileName);
if (!file.open(QFile::ReadOnly))
QFAIL(qPrintable(QStringLiteral("Cannot open file %1").arg(fileName)));
QByteArray data = file.readAll();
QSvgRenderer renderer;
renderer.load(data);
QImage image(renderer.defaultSize(), QImage::Format_RGBA8888);
QPainter painter(&image);
QBENCHMARK {
renderer.render(&painter);
}
}
QTEST_MAIN(tst_QSvgRenderer)
#include "tst_qsvgrenderer.moc"