Ich möchte einen Abbruch der Daten und einen Pre-Fetch-Abbruch erstellen, um zu testen, ob die Exception-Handler für denselben korrekt aufgerufen werden oder nicht. Nach meinem Verständnis kann das Dereferenzieren eines Nullzeigers einen Datenabbruch verursachen. Aber ich bekomme nicht, wie man einen Pre-Fetch-Abbruch zum Testen erstellt. Ich arbeite an armv7a. Ich benutze kein Betriebssystem und arbeite an dem Boot-Code.Wie zum Abbrechen von Daten und zum Abbrechen der Präfektur in Arm v7
Antwort
beide sind Busfehler, das Springen in unbekannten Code führt zu einer undefinierten Anweisung, die nicht vorzeitig abgebrochen wird. Ich würde auf unorientierte Zugriffe konzentrieren ein ldr mit Bit 1 setzen und tun ein bx mit Bit 1 gesetzt (aber Bit 0 nicht gesetzt) wäre, wo ich beginne. Wenn diese nicht funktionieren, ist es mit einer Testvorrichtung im Chip möglicherweise nicht möglich.
Es kann Teile des Adressraums geben, die nicht antworten, diese sollten den Prozessor einfach hängen, aber Sie können Glück haben und der Speichercontroller gibt einen Fehler zurück.
Wenn Sie parity oder ecc in Ihrem System haben, wäre dies der beste Weg, vorausgesetzt, Sie haben die Möglichkeit, einen Fehler in diese Speicher zu injizieren, um einen Paritäts- oder ECC-Fehler zu erzwingen Design (wenig bis keine Logik, die für Ihre Frage relevant ist, ist Teil des ARM-Prozessors) gibt einen Fehler bei einem Paritäts- oder ECC-Fehler zurück).
cortex-m könnte an einigen Adressräumen Fehler verursachen, da sie in gewissem Maße bestimmen, wohin Sie gehen sollen.
Wenn einer der neueren Kerne den mmus-Schutz verwenden kann und ich weiß nicht, ob das einen Daten/Prefetch-Fehler zurückgibt oder nicht, richten Sie das MMU so ein, dass etwas Speicherplatz auf einem anderen Zugriffslevel als dem Code ist um es zu treffen und zu sehen, welche Schuld Sie bekommen.
EDIT
hat für einen ARMv7 aber auf einem ARMv6 (pi 1 zum Beispiel) suchen, wenn ich Ausrichtung Überprüfung im Steuerregister zu aktivieren, und tut es ein Ausrichtungsfehler eine ldr der Adresse 0x1001 sagen, das ist dann gibt mir einen Datenabbruch.
eine Codezeile und die Verwendung Adresse 0x01 speichern
mrc p15, 0, r0, c1, c0, 0
orr r0,#2
mcr p15, 0, r0, c1, c0, 0
mov r0,#0x1
ldr r0,[r0]
in einen ungültigen Befehl Springen verursacht eine undefinierte keine Prefetch abbrechen, das Speichersystem den Abbruch zu behaupten hat, so dass Sie die MMU dafür verwenden können, wahrscheinlich die meisten,
undefinierte Ausnahme
.globl TEST
TEST:
.word 0xFFFFFFFF
bx lr
einfachste Weg, einen Prefetch Abort zu machen (wie in der ARM ARM angegeben).
.globl TEST
TEST:
bkpt
Für einen Datenabbruch können Sie versuchen, einen nicht zugeordneten oder nicht lesbaren Speicherbereich zu lesen. Versuchen Sie zum Beispiel, einen NULL-Zeiger zu lesen/schreiben. Für Prefetch Abbruch nur versuchen, in einigen unmapped, nicht lesbar oder nicht ausführbare Region in eine zufällige Adresse springen (Sie haben MMU in dieser Phase aktiviert?):
mov r0, #0xFFFFFFFF ; Some address that is satisfying the above
push r0 ; push it to the stack
pop pc ; jump to that address
Hinweis, die nur zu einem zufälligen Springen Die Adresse kann stattdessen zu einem nicht definierten Abbruch führen, da sie zwar ausführbar ist, aber eine unbekannte Anweisung enthält.
Wenn ausführbarer Code nicht enthalten ist, wird ein undefinierter Prefetch abgebrochen. –
@old_timer Wenn der Speicherbereich nicht ausführbar, nicht lesbar oder nicht zugeordnet ist, wird Prefetch ausgelöst.Wenn es einen unbekannten Befehl enthält, wird es undefined verursachen –
true, wenn Sie das MMU für das gesetzt haben, aber Verzweigung zu irgendeiner zufälligen Adresse ohne "ausführbaren" Code resultiert einfach in undefined, es sei denn die anderen Sachen, die Sie sagten, also gültig Code ist nicht relevant. –
- 1. Benutzereingabe zum Abbrechen der Endlosschleife?
- 2. Schaltflächen zum Senden und Abbrechen von Datenformularen
- 3. beenden, abbrechen, zum Debuggen schlafen?
- 4. Verwenden von UIAlertView zum Abbrechen einer Berührung
- 5. Slide zum Abbrechen Animation in Android
- 6. Abbrechen Suche mit UISearchController führt zum Absturz
- 7. Abbrechen eintreffende Daten von Observable
- 8. Probleme zum Abbrechen eines CountDownTimer Android Java
- 9. Daten abbrechen auf A20 SoC
- 10. Äquivalent von Strg c in Befehl zum Abbrechen eines Programms
- 11. Abbrechen der http.get-Anfrage und Zurücksetzen von Daten
- 12. SweetAlert2 - Bindet ein anderes Ereignis zum Abbrechen der Schaltfläche?
- 13. Wie Abbrechen AsyncTask beim Senden von Daten
- 14. Wie zum Anhalten/Fortsetzen/Abbrechen meiner Download-Anfrage in Alamofire
- 15. Abbrechen der aktuellen langen Geste zum Ziehen einer Ansicht?
- 16. Schaltfläche zum Abbrechen und Senden fehlt auf MFMailComposeViewController iOS
- 17. Wie abbrechen/Lesen einer Datei abbrechen - Filereader
- 18. So legen Sie die Aktion zum Abbrechen der Suche fest
- 19. Was ist das AFNetworking 2.0 Äquivalent zum Abbrechen von Operationen
- 20. Wie wget abbrechen?
- 21. Abbrechen von C# -Threads
- 22. Wie Abbrechen von Files.copy() in Java?
- 23. Nachrüsten von Observablen und Abbrechen
- 24. Wie zu stoppen/Abbrechen Abfrage abbrechen Schaltfläche von ASP.net Webformular
- 25. Abbrechen der AJAX-Anfrage
- 26. Abbrechen Ertrag von Host
- 27. Web Usability: Speichern und Abbrechen ... oder ... Abbrechen und Speichern?
- 28. Download abbrechen in Download
- 29. Wie Socket BeginReceive() abbrechen?
- 30. Abbrechen Tastendruck in jQuery
ahh Entschuldigung, dass Sie armv7 ... vielleicht habe ich eine Raspberry Pi herumliegen ... –
eine nicht ausgerichtete Adresse, Bx zu 0x1002 nicht Vorabruf noch nicht undefiniert Glück gehabt und es versucht zu laufen, normalerweise würde es schließlich ein undefined treffen, dachte es könnte einen Prefetch auslösen, aber es nicht. –
Lesen des Armv7 ARM es sagt auch BKPT kann verwendet werden, es sei denn, im Hyp-Modus erhalten Sie eine Hyp Trap anstelle eines Prefetch. Im Grunde lesen Sie einfach die Armdokumente. Wenn Sie wissen, dass diese Abbrüche vom Buscontroller kommen, sei es im Kern (mmu zum Beispiel) oder der Chipherstellerlogik, verursachen Daten selbst mit einem gültigen Zugriff keinen Abbruch, könnten aber bestenfalls zu undefinierten Ergebnissen führen ein holen. Sie müssen sich also ideal positionieren, um einen Abbruch der Buslogik zu verursachen, und das heißt, in der Regel die Dokumente des Anbieters zu sehen. BKPT und nicht ausgerichtete Ausnahmen ... –