問題タブ [illegal-instruction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
394 参照

x86 - システムは AVX2 がサポートされていると主張していますが、整数レジスタのブロードキャストは実装されていません

cat /proc/cpuinfoavx2 フラグが設定されていることを報告します。

ただし、AVX2 命令 vpbroadcastb を実行すると、不正な命令例外が発生します。

アセンブラとして x86_64 Linux と nasm を使用しています。私のシステムでは、これを再現するのは簡単です

NASMを使用。

これについて何か知っている人はいますか?これは、私が使用している AMD A12-9700P RADEON R7 APU です。

0 投票する
1 に答える
666 参照

module - 不正な命令 - カーネル モジュール

私はこれらの指示に従おうとしています:

https://developer.arm.com/products/system-design/cycle-models/knowledge-articles/system-performance-analysis-and-the-arm-performance-monitor-unit

ここでの私の目標は、PMU のユーザー空間アクセスを有効にすることです。これらは、私が使用しているモジュールの命令の一部です。

出力 (dmesg):


2 番目のモジュールが続きます。今回は、レジスタから値を読み取るだけです。

モジュール (レジスタに値を保持するかどうかのテスト):

出力 (dmesg):


簡単なプログラムを使用してユーザー空間で機能をテストすると、次のようになります。

注:おそらく PMCR_EL0 の最初のビットが 0 であり、PMUSERENR が f でないことが原因であることがわかっています。モジュールがレジスタからの値を元に戻さないようにする方法がわかりません...


デバッグに役立つ便利なコマンド:

juno:/ # cat /proc/modules

read_arm_pmu 16384 0 - ライブ 0x0000000000000000 (PO)

enable_arm_pmu 16384 0 - ライブ 0x0000000000000000 (PO)

ジュノ:/ # 猫 /proc/devices

キャラクターデバイス: 1 mem 5 /dev/tty 5 /dev/console 5 /dev/ptmx 10 misc 13 input 14 sound 29 fb 90 mtd 108 ppp 116 alsa 128 ptm 136 pts 180 usb 189 usb_device 204 ttyAMA 226 drm 249 roccat 250 hidraw 251 bsg 252 ティー 253 rtc 254 gpiochip

ブロックデバイス: 1 つの ramdisk 259 blkext 7 loop 8 sd 31 mtdblock 65 sd 66 sd 67 sd 68 sd 69 sd 70 sd 71 sd 128 sd 129 sd 130 sd 131 sd 132 sd 133 sd 134 sd マップ 1235 mm デバイスあたり 4 sd-map 1235 s仮想ブロック

cat /proc/sys/kernel/tainted

4097

juno:/ # cat /proc/interrupts

CPU0 CPU1 CPU2 CPU3 CPU4 CPU5

2: 1844410 1197983 1353732 16779 3199 5419 GIC v2 92 レベル arch_mem_timer

3: 0 0 0 0 0 0 GIC v2 29 レベル arch_timer

4: 894927 272142 288023 18616 39333 15390 GIC v2 30 レベル arch_timer

7: 0 0 0 0 0 0 GIC v2 198 レベルタイマー

14: 419017 0 0 0 0 0 GIC v2 68 レベル mhu_link

15: 0 0 0 0 0 0 GIC v2 67 レベル mhu_link

16: 0 0 0 0 0 0 GIC v2 120 レベル 7ff00000.dma

17: 0 0 0 0 0 0 GIC v2 121 レベル 7ff00000.dma

18: 0 0 0 0 0 0 GIC v2 122 レベル 7ff00000.dma

19: 0 0 0 0 0 0 GIC v2 123 レベル 7ff00000.dma

20: 0 0 0 0 0 0 GIC v2 124 レベル 7ff00000.dma

21: 0 0 0 0 0 0 GIC v2 140 レベル 7ff00000.dma

22: 0 0 0 0 0 0 GIC v2 141 レベル 7ff00000.dma

23: 0 0 0 0 0 0 GIC v2 142 レベル 7ff00000.dma

24: 0 0 0 0 0 0 GIC v2 143 レベル 7ff00000.dma

25: 0 0 0 0 0 0 GIC v2 125 レベル hdlcd

26: 0 0 0 0 0 0 GIC v2 117 レベル hdlcd

27: 6336 0 0 0 0 0 GIC v2 115 レベル uart-pl011

28: 53666 0 0 0 0 0 GIC v2 136 レベル 7ffa0000.i2c

30: 47345 0 0 0 0 0 GIC v2 149 レベル ehci_hcd:usb1

33: 14370 0 0 0 0 0 GIC v2 65 レベル 2d000000.gpu

34: 0 0 0 0 0 0 GIC v2 66 レベル 2d000000.gpu

35: 39222 0 0 0 0 0 GIC v2 64 レベル 2d000000.gpu

37: 52 0 0 0 0 0 GIC v2 194 レベル mmci-pl18x (コマンド)

40: 0 0 0 0 0 0 GIC v2 100 レベル rtc-pl031

43: 0 0 0 0 0 0 GIC v2 169 レベル sata_sil24[0000:03:00.0]

45: 0 0 0 0 0 0 M SI 0 エッジ PCIe PME、aerdrv

52: 1049234 0 0 0 0 0 M SI 4194304 エッジ eth0

IPI0: 62569 1835646 1888285 43688 29194 29798 割り込みの再スケジュール

IPI1: 315 1276 725 386 307 207 関数呼び出し割り込み

IPI2: 0 0 0 0 0 0 C PU停止割り込み

IPI3: 829962 24938 62500 1274 498 1029 タイマーブロードキャスト割り込み

IPI4: 800250 925302 1266671 10821 9264 7192 I RQ 作業割り込み

IPI5: 0 0 0 0 0 0 C PU ウェイクアップ割り込み

エラー: 0

皆さんが私を助けてくれることを願っています.単純なことで多くの時間を無駄にしているように感じます.

TLDR - カーネル モジュールはユーザー空間アクセスを有効にする必要がありますが、機能していません。理由を知るためのヘルプを探しています。

ありがとう、ルイス


編集:フォーマットして、私の問題をより明確にします。

0 投票する
1 に答える
1289 参照

assembly - RISC-Vで関数呼び出し実行時の不正命令

おはようございます、

RISC-V アーキテクチャのアセンブリで単純なプログラムを作成しようとしています。このプログラムには、何もせずに呼び出し元に戻る関数呼び出しを実行する単純なメイン (_start) があります。

私が書いたコードは次のとおりです。

このプログラムを実行するには、次を実行します。

出力として私は得る:

この場合、a6 レジスタに 2 があるため、最後の命令が正しく実行されているため、プログラムの制御は呼び出し元に正しく返されていると思いますが、「不正な命令が実行されました!」というエラーが表示されます。この問題を解決するためのヒントを教えてください。

ありがとうございました

0 投票する
2 に答える
6318 参照

assembly - RISC-V アセンブリの .data セグメントのアドレスにバイトを書き込みます

単語 (レジスタに保存) を .data セグメントに格納する必要がある RISC-V アセンブリ プログラムを作成しています。

しかし、プログラムが到達sw a1, numすると、「不正なオペランド `sw a1,num'」というエラーが表示されます。.data セグメント内のメモリ位置にデータを保存するにはどうすればよいですか? ヒントを教えていただけますか?