system.map是一個(gè)符號(hào)表,其中包括符號(hào)名、符號(hào)類型、符號(hào)值。符號(hào)(sysmbol):包括已定義的符號(hào)(對(duì)應(yīng)全局變量和static變量和定義的函數(shù)的名字)和未定義符號(hào)(未定義的函數(shù)的名字和引用但沒定義的符號(hào))信息。
符號(hào)值:每個(gè)符號(hào)對(duì)應(yīng)一個(gè)內(nèi)存地址, 即符號(hào)值。
符號(hào)類型:常見的有B(bss),D(data),T或t(text),當(dāng)然還有其他不常見類型,這里不一一列舉。
打開system.map文件:
87800000 T __image_copy_start
87800000 T _start 87800020 T _undefined_instruction 87800024 T _software_interrupt 87800028 T _prefetch_abort 8780002c T _data_abort 87800030 T _not_used 87800034 T_irq 87800038 T _fiq 87800040 T _IRQ_STACK_START_IN 87800060 t undefined _ instruction 878000c0 t software _ interrupt 87800120 t prefetch_abort 87800180 t data_abort 878001e0 t not_used 87800240 t irq 878002a0 t fiq 87800300 T reset 87800304 T save_boot_params_ret 87800340 T c _ runtime_cpu_setup |
可以看到該文件按照鏈接地址由低到高列出了所有符號(hào)在內(nèi)存中的地址,及類型,uboot的程序入口點(diǎn)為_start(和_image_copy_start是同一地址,_image_copy_start是uboot進(jìn)行自拷貝的地址),在內(nèi)存中的地址為0X87800000。也可以看出,以0X87800000為起始的第一個(gè)區(qū)域是上一節(jié)講過的text段區(qū)域,所以這個(gè)system.map是各段區(qū)域中的具體內(nèi)容在內(nèi)存中的布局情況。
u-boot.map中包含了鏈接過程中涉及到的目標(biāo)文件以及其所依賴的庫(kù)文件中的各個(gè)符號(hào)的地址信息,以及我們所涉及到的函數(shù)所在目錄信息,這里不再展開講,有興趣的同學(xué)可以自己查看研究。