2016-11-28 345 views
2

問題場景: 簡而言之,我們是否有Trace32命令從ELF文件讀取符號(及其內容)我們有這種特殊情況,ELF文件的應用程序特定調試符號是ELF中'.noload'部分的一部分,這意味着符號/內容是ELF文件的一部分(使用readelf -a xxxx讀取時可用。 elf_file_name),但不是生成的最終二進制圖像的一部分,即ELF文件中的'.noload'部分在生成閃存到目標內存的xxx.bin時被剝離。Trace32命令從ELF文件中讀取符號內容

  • '.noload'部分中的調試符號是靜態指定的值,這些值在運行時不會更改。
  • 當我嘗試讀取'.noload'部分的調試符號部分(編譯成二進制文件並加載到Trace32後)時,我看到trace32彈出窗口上標記爲'MMU失敗',這意味着trace32正在嘗試讀取符號內容從內存中,但不可訪問,因爲'.noload'部分的符號部分根本沒有加載,雖然他們有地址映射。

任何輸入
- 我需要可以直接讀取不是從目標存儲器ELF文件符號內容的TRACE32命令幫助。
- 還不確定我是否可以在練習腳本中使用'readelf'?如果我們沒有針對上述查詢的解決方案,在這個方向上有什麼幫助?

回答

3

使用命令

Data.LOAD.Elf myfile.elf [<optional address offset>] /NoCODE 

選項/的NoCode指示TRACE32只能從您的ELF加載debgug符號,但不加載任何代碼到目標。你可以用命令sYmbol.Browse來爭奪符號。

但是,如果您使用TRACE32將應用程序加載到目標,則不必先從ELF創建二進制文件。使用TRACE32,您還可以將ELF的PROGBITS部分直接加載到目標。 在這種情況下,您只需使用Data.LOAD.Elf命令,而不使用/ NoCODE選項(啓用閃存編程後)。

由於您正在使用MMU,因此您可能需要使用命令SYStem.Option.MMUSPACES ON激活邏輯存儲器空間ID。然後加載您的符號

Data.LOAD.Elf myfile.elf <space-ID>:<offset> /NoCODE 

其中'space-ID'與您的MMU用於Task的空間ID相匹配,'offset'通常爲零。

如果您正在嵌入式Linux上調試您的應用程序,那麼您應該使用Linux的TRACE32操作系統感知和Linux符號自動加載程序將符號加載到正確的地址。

我不認爲你有什麼理由在TRACE32中使用'readelf'。無論如何,您可以使用命令OS.AreaOS.Command調用任何命令行程序。