問題タブ [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.
x86 - システムは AVX2 がサポートされていると主張していますが、整数レジスタのブロードキャストは実装されていません
cat /proc/cpuinfo
avx2 フラグが設定されていることを報告します。
ただし、AVX2 命令 vpbroadcastb を実行すると、不正な命令例外が発生します。
アセンブラとして x86_64 Linux と nasm を使用しています。私のシステムでは、これを再現するのは簡単です
NASMを使用。
これについて何か知っている人はいますか?これは、私が使用している AMD A12-9700P RADEON R7 APU です。
module - 不正な命令 - カーネル モジュール
私はこれらの指示に従おうとしています:
ここでの私の目標は、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 - カーネル モジュールはユーザー空間アクセスを有効にする必要がありますが、機能していません。理由を知るためのヘルプを探しています。
ありがとう、ルイス
編集:フォーマットして、私の問題をより明確にします。
assembly - RISC-Vで関数呼び出し実行時の不正命令
おはようございます、
RISC-V アーキテクチャのアセンブリで単純なプログラムを作成しようとしています。このプログラムには、何もせずに呼び出し元に戻る関数呼び出しを実行する単純なメイン (_start) があります。
私が書いたコードは次のとおりです。
このプログラムを実行するには、次を実行します。
出力として私は得る:
この場合、a6 レジスタに 2 があるため、最後の命令が正しく実行されているため、プログラムの制御は呼び出し元に正しく返されていると思いますが、「不正な命令が実行されました!」というエラーが表示されます。この問題を解決するためのヒントを教えてください。
ありがとうございました
assembly - RISC-V アセンブリの .data セグメントのアドレスにバイトを書き込みます
単語 (レジスタに保存) を .data セグメントに格納する必要がある RISC-V アセンブリ プログラムを作成しています。
しかし、プログラムが到達sw a1, num
すると、「不正なオペランド `sw a1,num'」というエラーが表示されます。.data セグメント内のメモリ位置にデータを保存するにはどうすればよいですか? ヒントを教えていただけますか?