2016-09-20 2 views
2

Wie kann ich nicht ausgerichtete Speicherzugriffe auf Linux/aarch64 (Cortex-a57) protokollieren?Ungelernte Zugriffe auf Linux/aarch64 protokollieren und debuggen

Ich verstehe, gibt es zwei verschiedene Dinge hier beteiligt.

  1. Auswählen ein Interrupt von der CPU auf einem nicht ausgerichteten Zugriff erhöhen (dh unterbricht für nicht ausgerichtete Speicherzugriffe, die sonst durch die CPU auf einem unterstützt werden Leistungskosten)
  2. wie soll diese Interrupts in Linux zu handhaben (log sie/Feuer eine SIGBUS/soft unaligned Zugang zu emulieren)

Mein Problem ist, dass zuerst, ich weiß nicht, wie die Steuerregister der CPU verwalten von mein Programm (noch wenn ich sollte eigentlich tun es in meiner Userspace-Anwendung), und zweitens scheint die /proc/cpu/alignment Schnittstelle für die Verwaltung der nicht ausgerichteten Zugriffe in Linux (ich benutze einen Kernel 4.4.0), siehe Link unten.

nicht ausgerichtete Zugriffe aus dem Kernel verwalten: https://www.kernel.org/doc/Documentation/arm/mem_alignment (wahrscheinlich out-of-date)

Verwandte: diese Does AArch64 support unaligned access?

Antwort

1

Sie können nicht tun. Jedenfalls nicht mit Linux.

Ausrichtungsfehler für EL0 werden durch das Bit SCTLR_EL1.A bestimmt, aber das betrifft auch EL1. Selbst wenn Sie also ein Hacky-Kernel-Modul geschrieben haben, um es zu aktivieren (Sie können privilegierte Systemsteuerregister natürlich nicht direkt vom Benutzerbereich aus anfassen), ist es ziemlich sicher, dass der Kernel in Panik gerät, sobald das nächste Netzwerkpaket eintrifft. Der arm64-Kernel-Port beruht auf der von AArch64 bereitgestellten nicht ausgerichteten Zugriffsfunktion auf. Es hat nicht den Handler /proc/cpu/alignment des ARM-Ports, weil es nicht das Erbe von Pre-ARMv6-CPUs hat, die überhaupt keinen unausgerichteten Zugriff unterstützen (na ja, zumindest in irgendeiner brauchbaren Weise).

Was Sie können tun, obwohl, verwenden perf toolsmicroarchitectural PMU events 0x68 oder alle Cortex-A57 ist zu überwachen, 0x69 oder 0x6A, die unaligned-Access-bezogene Ereignisse zu zählen, die Ihr Programm auslöst. Es gibt keine Möglichkeit, einzelne Zugriffe zu blockieren oder zu debuggen, wie es bei dem stumpfen Instrument der Ausrichtungsfehler der Fall sein könnte, aber ansonsten ist es wohl nützlicher, da es Ereignisse zählt, die Ihrem Programm zuzuschreiben sind.

+0

So ist es nicht möglich für den Kernel eine andere Behandlung von Ausrichtungsfehlern für sich selbst und den Benutzerbereich einzustellen? Wie Sie bereits erwähnt haben, ist Profiling der Weg dorthin. Ich habe mich gefragt, ob man noch strengere Gedächtniskontrollen benötigt (wenn das Sinn macht) –

Verwandte Themen