/srv/irclogs.ubuntu.com/2011/11/23/#ubuntu-tw.txt

BlueT_01:18
rick__01:40
kyli01:43
HugoKuo__02:07
BlueT_沒想到有人回應 XD02:29
=== gasol is now known as gasol___
Kandurick__: 在 ld script SECTIONS 裡說明下就行    .rodata : { rodata_start = .; /*記錄開始地址*/ *(.rodata); . = rodata_start + 0x12340; /*在末尾設定下當前地址(同時也就指定大小了)*/ }02:39
=== gasol___ is now known as gasol__30km__
=== gasol__30km__ is now known as ronnywang
rick__Kandu, . = ALIGN(4);03:11
rick__        .rodata : { *(.rodata) }03:11
rick__        . = ALIGN(4);03:11
rick__        .data : { *(.data) }03:11
rick__        . = ALIGN(4);03:11
rick__        .got : { *(.got) }03:11
rick__我在 u-boot.lds 看到 這個 , 所 以是不是指我可以把  .rodata 那行的 格式換成 有 rodat_start的 格式?03:13
rick__會想改這個主要是有時 build 出來的 u-boot 開不了機 03:13
Kandurick__: 是啊03:14
rick__結果發 現rodata 的 最後一筆資料位址, 比 rodata 的 起始位址加上 length 還大03:14
rick__所 以我猜應該 是 rodata 節區爆了03:14
rick__那我改看看 :D 謝 謝 03:14
Kandurick__: 呃,那不行吧,這樣會出錯03:15
rick__另外請教 default 的長度定義是寫在哪啊 ?03:15
rick__BlueT_, 這証明這裡是有早鳥的 xdd03:16
Kandurick__: *(.rodata) 把所有 input file 的 rodata section 都置入 output 過大了,蠻力縮小 rodata section 應該會出錯03:16
rick__Kandu, 我希望能確保 rodata section 夠大, 03:19
rick__在載入kernel前, bootloader 可以用到所有的 記憶體..所以多用些應該沒關係03:20
Kandurick__: 哦,那倒是可以。那就在 (.rodata) /*這裡*/ } 寫上  . = . +  要擴大的 size03:21
rick__只是我不懂 為什麼我有時加太多 printf() 之後, build 出來的 u-boot 不能開機03:28
rick__我以為預設的 lds 應該是會依當時的section 大小去自動調整03:29
Kandurick__: 確實是自己調整,大概是你計算 length 的代碼有錯吧03:36
Kandu我一般的寫法是03:37
Kandu    .data :03:37
Kandu    {03:37
Kandu        PROVIDE(AddrBegin_data = .);03:37
Kandu        *(.data)03:37
Kandu        . = ALIGN(0x1000);03:37
KanduPROVIDE(AddrEnd_data = .);03:37
Kandu    }03:37
Kandurick__: 然後 宣告 extern void * AddrBegin_data; extern void * AddrEnd_data 然後用 &AddrEnd_data - &AddrBegin_data 這樣就是整個 section 的 size 了03:39
Kandurick__: 這樣不管匯入了多少 input file 的 data section 都能自動計算出真正的 size03:40
Kandurick__: 按剛說的「發 現rodata 的 最後一筆資料位址, 比 rodata 的 起始位址加上  length 還大」,應該是計算 length(size) 的代碼有問題了03:42
rick__請問 ALIGN 是?03:47
Kandurick__: 我是自己寫 MM,為了 MM 的 initialization 方便,所以用頁大小(0x1000)對齊,這個沒關係。主要就是在 section 最開頭 PROVIDE 一個 symbol, 最後一個 symbol 方便計算整個 section 的大小03:51
rick__Kandu, 所以指的是每個 section 起頭都是 0x1000的倍數嗎?03:54
Kandurick__: 嗯03:56
Kandurick__: 剛有個疏忽 &AddrEnd_data - & AddrBegin_data 要 cast 下 (unsigned int)&a - (unsigned int)&b 這樣  (我不熟 c 語言 :)03:57
rick__Kandu, 謝謝 :D 我再試看看, 這兩天要先搞 hardware ecc 跟 ubifs 的事...一直 ecc fail QQ04:01
Kandurick__: XD 若有空,讀下 ld manual 應會不錯 http://sourceware.org/binutils/docs/ld/04:04
=== ronnywang is now known as gasol
rick__Kandu, 感謝 :D04:54
=== aw is now known as Guest1699
Guest69438asd05:42
=== Daindese is now known as Dainese

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!