2016-09-06 2 views
0

Bei dem Versuch, das qt5webkit-Paket auf einem iMX6-Gerät (Qt-Version 5.5.0 aus der 2015.11 Buildroot-Version) zu erhalten, sehe ich Laufzeit-Berechtigungen durch den Code generiert.Mögliche Probleme mit Buildroot qt5webkit-Paket

Sie manifestiert sich mit der Ausgabe:

ASSERTION FAILED: 
    isPointerTypeAlignmentOkay(reinterpret_cast<TypePtr>(ptr)) 
    ../WTF/wtf/StdLibExtras.h(102): 
    TypePtr reinterpret_cast_ptr(const void*) 
    [with TypePtr = const unsigned int*] 
Segmentation fault (core dumped) 

Der Code das Kontroll assert tun folgt, und man kann sehen, dass es tatsächlich die Ausrichtung überprüft es ist in Ordnung, um sicherzustellen:

template<typename Type> bool isPointerTypeAlignmentOkay(Type* ptr) 
{ 
    return !(reinterpret_cast<intptr_t>(ptr) % __alignof__(Type)); 
} 

template<typename TypePtr> TypePtr reinterpret_cast_ptr(const void* ptr) 
{ 
    ASSERT(isPointerTypeAlignmentOkay(reinterpret_cast<TypePtr>(ptr))); 
    return reinterpret_cast<TypePtr>(ptr); 
} 

Jetzt verstehe ich, warum dies wird getan. Von einem (zugegebenermaßen verblassten) Speicher würden frühe ARM-Chips einen Fehler verursachen, wenn Sie einen nicht ausgerichteten Zugriff versuchten, und selbst spätere, die nicht fehlerhaft waren, liefen immer noch langsamer.

Was ich nicht klar verstehe, warum Standardcode mit der Buildroot-Verteilung fehlschlägt. Ich bin mir ziemlich sicher, dass das Problem nicht in meinem eigenen Code liegt, da das Kompilieren und Ausführen der Beispiel-Browseranwendung (aus dem Buildroot-Paket qt5webkit-examples) das gleiche Problem aufweist.

Die Behauptung ist eindeutig in einem Abschnitt, der nur für ARM/MIPS unter GCC/CLANG kompiliert wird, so dass es sehr spezifisch für diese Plattformen ist. Das heißt, es ist durchaus möglich, dass es nie richtig getestet wurde.

Vorerst habe ich einen lokalen Patch als Behelfslösung hinzugefügt, speziell das Kontroll Ändern der Ausrichtung zu gewährleisten, ist irrelevant:

diff --git a/Source/WTF/wtf/StdLibExtras.h b/Source/WTF/wtf/StdLibExtras.h 
--- a/Source/WTF/wtf/StdLibExtras.h 2000-01-01 00:00:00.000000000 +0000 
+++ b/Source/WTF/wtf/StdLibExtras.h 2000-01-01 00:00:00.000000000 +0000 
@@ -86,5 +86,5 @@ 
template<typename Type> 
bool isPointerTypeAlignmentOkay(Type* ptr) 
{ 
- return !(reinterpret_cast<intptr_t>(ptr) % __alignof__(Type)); 
+ return true; 
} 

Allerdings habe ich ein paar Bedenken zu diesem. Der erste ist, ob dies tatsächlich sicher auf den ARM-Chips ist (speziell für die Cortex-A9-Varianten). Es erscheint, um in Ordnung zu laufen, aber ich bin mir nicht sicher, ob es subtile Randfälle gibt, mit denen ich mich befassen sollte. Ich bin noch nicht besorgt über die Möglichkeit, dass es langsamer laufen könnte, besonders wenn die Alternative ist, dass es überhaupt nicht läuft.

Die zweite Frage ist einfach zu fragen, ob jemand anderes es geschafft hat, das qt5webkit Paket auf ARM-Chips als Teil von Buildroot zu bekommen. Fehle ich etwas, das den Eingeweihten offensichtlich ist? Wenn es tatsächlich ein Fehler im Standard-Buildroot-Paket ist, werde ich wahrscheinlich einen Patch einreichen, aber ich möchte das nicht tun, bis ich es ein wenig besser verstehe.

In Bezug auf die Umgebung verwenden wir die Buildroot-interne Toolchain auf einer Ubuntu 14.04-Host-Box.

+0

* "jemand anderes hat es geschafft, die qt5webkit zu bekommen Paket, das auf ARM-Chips als Teil von Buildroot "* arbeitet - habe ich für Cortex-A5, Buildroot 2014.08 für Qt5webkit 5.3, Buildroot 2015.11.1 für Qt5webkit 5.5.0 und Buildroot 2016.05 für Qt5webkit 5.5.1. * "Vermisse ich etwas, das offensichtlich ist ...?" - Du nennst deine Host-Umgebung und Toolchain nie wieder; diese könnten dazu beitragen. Ich benutze eine ältere gcc 4.8.3 Toolchain, die mit crosstool-ng erstellt wurde. – sawdust

+0

@sawdust, die Host-Umgebung ist Ubuntu 14.04 und verwendet die Buildroot interne Toolchain.Ich werde die Frage aktualisieren. – paxdiablo

Antwort

0

Versuchen folgenden Zieloptionen in buildroot menuconfig:

  1. Select NEON SIMD-Erweiterung Unterstützung aktivieren
  2. Set Strategie Gleitpunkt auf VFPv3-D16
Verwandte Themen