第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 解釋 gdb SIGILL,非法指令

Golang 解釋 gdb SIGILL,非法指令

Go
幕布斯6054654 2023-06-19 13:46:51
我編寫了一個在 MIPS 32 位路由器上運(yùn)行的小型 go 程序。我能夠使用 go build 工具鏈在路由器上運(yùn)行一個基本的 hello world 程序。env GOOS=linux GOARCH=mips GOMIPS=softfloat go build -a我嘗試編譯的程序使用 go-ethereum 庫,并在我嘗試構(gòu)建時拋出以下錯誤go build github.com/ethereum/go-ethereum/crypto/secp256k1: build constraints exclude all Go files in ~/go/src/github.com/ethereum/go-ethereum/crypto/secp256k1我找到了 go 交叉編譯工具 xgo,并成功地使用該工具構(gòu)建了一個二進(jìn)制文件 ( https://github.com/karalabe/xgo )。當(dāng)我嘗試運(yùn)行二進(jìn)制文件時,雖然我得到以下“程序終止信號 SIGILL,非法指令”。我能夠從文件中獲取核心轉(zhuǎn)儲,但我對 GDB 沒有太多經(jīng)驗。Program terminated with signal SIGILL, Illegal instruction.#0  0x008274a8 in __sigsetjmp_aux () 運(yùn)行布局 asm 我得到以下信息:    0x8274a4 <__sigsetjmp_aux+4>    addiu  gp,gp,-19312                                                                                                                          │  >│0x8274a8 <__sigsetjmp_aux+8>    sdc1   $f20,56(a0)                                                                                                                           │   │0x8274ac <__sigsetjmp_aux+12>   sdc1   $f22,64(a0)   我不確定如何解釋這一點任何幫助將不勝感激。這是 cat /proc/cpuinfo 的輸出:system type     : Qualcomm Atheros QCA9533 ver 2 rev 0machine         : GL.iNet GL-AR750processor       : 0cpu model       : MIPS 24Kc V7.4BogoMIPS        : 432.53wait instruction    : yesmicrosecond timers  : yestlb_entries     : 16extra interrupt vector  : yeshardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]isa         : mips1 mips2 mips32r1 mips32r2ASEs implemented    : mips16shadow register sets    : 1kscratch registers  : 0package         : 0core            : 0VCED exceptions     : not availableVCEI exceptions     : not available以及二進(jìn)制文件 util 的輸出:ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1, statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=83c74323a279af9cba50869671ef03d5ad497db8, not stripped我花了很多時間試圖讓這個程序運(yùn)行,甚至分叉 xgo 工具以便它可以接受 softfloat 參數(shù)。對此問題的任何幫助或指導(dǎo)將不勝感激,謝謝。
查看完整描述

1 回答

?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗 獲得超4個贊

我不確定如何解釋這個

Google 搜索“MIPS sdc1”表明這是一條浮點“Store Doubleword from Coprocessor-1”指令。

一個猜測:你的嵌入式系統(tǒng)沒有浮點協(xié)處理器?

您可能需要添加-msoft-float到您的xgo命令并重建。

更新:

它在同一個調(diào)用中崩潰sdc1,寄存器是相同的$f20,56(a0)

是的,但是是在同一個函數(shù) ( __sigsetjmp_aux) 中,還是在一些不同的函數(shù)中?

這是我用 xgo 構(gòu)建的調(diào)用:xgo --go=1.12 --targets=linux/mips --ldflags '-extldflags "-static -msoft-float"' ~/path/to/project

看起來例程__sigsetjmp_aux來自 GLIBC,它不是xgo.

并且您正在使用的 GLIBC 版本是在沒有構(gòu)建的情況下構(gòu)建的-msoft-float,因此您仍在鏈接需要硬件浮點的代碼,而您的系統(tǒng)卻沒有。

第 1 步:驗證__sigsetjmp_aux來源。為此,您需要傳遞-y __sigsetjmp_aux給鏈接器。也許--ldflags '-extldflags "-static -msoft-float -Wl,-y,__sigsetjmp_aux"'會那樣做。

你應(yīng)該看到類似這樣的東西:

gcc t.o -Wl,-y,setjmp -static
t.o: reference to setjmp
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libc.a(bsd-setjmp.o): definition of setjmp

假設(shè)您__sigsetjmp_aux對 does 的定義來自libc.a,您需要使用-msoft-floatin重建它CFLAGS。

注意:傳遞-msoft-float給鏈接器是錯誤的,不會有任何效果——它是一個編譯器標(biāo)志。


查看完整回答
反對 回復(fù) 2023-06-19
  • 1 回答
  • 0 關(guān)注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號