Frage

Ich suche nach Informationen in Bezug auf in einer Kernel-Modul bestimmte CPU-Erweiterungen zu implementieren. Ich habe etwas im Zusammenhang gefunden: http: / /www.mirrors.docunext.com/lxr/http/source/arch/mips/kernel/unaligned.c in der Tat ist es der einzige Code Quelle, dass ich das einmal in der Nähe finden kann.

Im Grunde habe ich eine binäre nur gemeinsam genutztes Objekt gebaut mit bestimmten CPU-Erweiterungen, die ich brauche auf einem etwas älteren CPU ausgeführt werden, die den größten Teil der Befehlssatz hat, aber nicht die Phantasie neue Sachen. Ja, ich weiß, es ist ziemlich langsam sein wird, aber es ist besser als mit SIGILLs abstürzt.

War es hilfreich?

Lösung 4

Nun, nachdem die Kernel-Quelle zu lesen, wie es scheint, gibt es bereits kleine Unterstützung für diese. Ich kann wirklich nicht sehen, wie viel es tatsächlich verwendet wird, aber es gibt eine verknüpfte Liste, die verschiedenen emulierten Anweisungen zu speichern. Wenn ich in der Lage bin eigentlich diese in Gang zu bringen, werde ich es wahrscheinlich an den Kernel-Header geliefert Baum ändern.

Wenn ich Verständnis Kernel-Module richtig, es sieht nicht so gäbe es ein Problem sein, steckbare Emulation zu unterstützen.

Andere Tipps

Ich glaube, Sie dies in Userland tun. Installieren Sie einen Handler für SIGILL mit sigaction() und geben SA_SIGINFO. Das Feld si_code im siginfo_t kann zwischen mehreren Ursachen von SIGILL unterscheiden. Zum Beispiel versuchen, einen Befehl zu emulieren, wenn das Signal von kill() kam nicht sinnvoll. Das dritte Argument für die Behandlungsroutine zeigt auf eine Struktur, die die CPU-Kontext zu dem Zeitpunkt des Fehlers (siehe Dokumentation) enthält. Sie können dies wahrscheinlich ändern und von den Signal-Handler zurückgeben, die Änderungen wirksam nehmen; wenn das nicht funktioniert, versuchen setcontext().

Natürlich wird es ein bisschen weniger effizient sein, als es in der Kernel zu tun, aber saubere und sicherer zu machen.

Sie können dies tun, aber es ist etwas schmerzhaft. Die ungültigen Opcodes müssen abgefangen werden, so dass Sie entweder Notwendigkeit, den bestehenden illegalen Befehl Handler, oder wickeln Sie den Handler, der schmutzig zu ändern ist und kompliziert.

Wenn Sie Kernel-Mods vermeiden wollen, aber nicht als reinen Kern, der umwickelte-Ausnahme Ansatz ist wahrscheinlich der einzige Weg, es zu tun. Wenn Sie den Kernel ändern können, die gepatchten Handler ist besser.

Ich glaube nicht, dass Sie dieses Problem mit einem Kernel-Modul beheben. Ich glaube, Sie müssen entweder diese in einer VM laufen, die die fehlenden Anweisungen ermöglicht (Ich würde versuchen, XEN verwenden) oder das Objekt neu kompilieren, so dass sie sie nicht verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top