Sorry for my poor English. I want to clearly understand the linking processes,especially detail string loading process. <br>In fact, I use objcopy to convert the u-boot.bin to u-boot.elf, then using objdump to process elf.<br>
(In my real enviroment, I only had the MIPS arch binary format, need to convert it first. )<br>&quot;u-boot.bin file is a raw binary dump of the result&quot;. Can you detail tell me the how to find the right string address when call puts(&quot;&quot;) in a func ? Now I know the string in the .got section, but how to calc the loading address ?<br>
there need some address convert from the binary file,<br>you see the string &quot;Call backtrace:&quot; address is 0x0002b280, func print_backtrace() address is 0x00003584(in objdump is 0xfff03564), module traps.o .got2&nbsp; address&nbsp; is 0xfff34024.<br>
What&#39;s the relationship among them ?<br><br>I update the dump info, please see it.<br><br>--------------------------------------------------------------------------------------------------------------<br>u-boot.map<br>
<br>.reloc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xfff34000&nbsp;&nbsp;&nbsp;&nbsp; 0x1578<br>&nbsp;*(.got)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xfff34000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _GOT2_TABLE_ = .<br>&nbsp;*(.got2)<br>&nbsp;.got2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xfff34000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x24 cpu/mpc8260/start.o<br>&nbsp;.got2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xfff34024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x4c cpu/mpc8260/libmpc8260.a(traps.o)<br>
&nbsp;------------------------------------------------------------------------------------------------------------------<br>fff03564 &lt;print_backtrace&gt;<br>fff03564:&nbsp;&nbsp;&nbsp; 94 21 ff d8 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stwu&nbsp;&nbsp;&nbsp; r1,-40(r1)<br>fff03568:&nbsp;&nbsp;&nbsp; 7c 08 02 a6 &nbsp;&nbsp;&nbsp; mflr&nbsp;&nbsp;&nbsp; r0<br>
fff0356c:&nbsp;&nbsp;&nbsp; 42 9f 00 05 &nbsp;&nbsp;&nbsp;&nbsp; bcl-&nbsp;&nbsp;&nbsp; 20,4*cr7+so,fff03570 &lt;print_backtrace+0xc&gt;&nbsp; <br>fff03570:&nbsp;&nbsp;&nbsp; bf 61 00 14 &nbsp;&nbsp;&nbsp;&nbsp; stmw&nbsp;&nbsp;&nbsp; r27,20(r1)<br>fff03574:&nbsp;&nbsp;&nbsp; 7f c8 02 a6 &nbsp;&nbsp;&nbsp;&nbsp; mflr&nbsp;&nbsp;&nbsp; r30<br>fff03578:&nbsp;&nbsp;&nbsp; 90 01 00 2c &nbsp;&nbsp;&nbsp; stw&nbsp;&nbsp;&nbsp;&nbsp; r0,44(r1)<br>
fff0357c:&nbsp;&nbsp;&nbsp; 80 1e ff f0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lwz&nbsp;&nbsp;&nbsp;&nbsp; r0,-16(r30)<br>fff03580:&nbsp;&nbsp;&nbsp; 7c 7c 1b 78 &nbsp;&nbsp;&nbsp; mr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r28,r3<br>fff03584:&nbsp;&nbsp;&nbsp; 3b e0 00 00 &nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r31,0<br>fff03588:&nbsp;&nbsp;&nbsp; 7f c0 f2 14 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp;&nbsp; r30,r0,r30<br>fff0358c:&nbsp;&nbsp;&nbsp; 80 7e 80 00 &nbsp;&nbsp;&nbsp; lwz&nbsp;&nbsp;&nbsp;&nbsp; r3,-32768(r30)<br>
fff03590:&nbsp;&nbsp;&nbsp; 48 01 1b ad &nbsp;&nbsp;&nbsp; bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fff1513c &lt;puts&gt;<br>fff03594:&nbsp;&nbsp;&nbsp; 2c 1c 00 00 &nbsp;&nbsp;&nbsp; cmpwi&nbsp;&nbsp; r28,0<br>fff03598:&nbsp;&nbsp;&nbsp; 41 82 00 70 &nbsp;&nbsp;&nbsp; beq-&nbsp;&nbsp;&nbsp; fff03608 &lt;print_backtrace+0xa4&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>fff0359c:&nbsp;&nbsp;&nbsp; 3c 00 02 00 &nbsp;&nbsp;&nbsp; lis&nbsp;&nbsp;&nbsp;&nbsp; r0,512<br>
fff035a0:&nbsp;&nbsp;&nbsp; 7c 1c 00 40 &nbsp;&nbsp;&nbsp; cmplw&nbsp;&nbsp; r28,r0<br>fff035a4:&nbsp;&nbsp;&nbsp; 3d 20 92 49 &nbsp;&nbsp;&nbsp; lis&nbsp;&nbsp;&nbsp;&nbsp; r9,-28087<br>fff035a8:&nbsp;&nbsp;&nbsp; 61 29 24 93 &nbsp;&nbsp;&nbsp; ori&nbsp;&nbsp;&nbsp;&nbsp; r9,r9,9363<br>fff035ac:&nbsp;&nbsp;&nbsp; 7f eb fe 70 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srawi&nbsp;&nbsp; r11,r31,31<br>fff035b0:&nbsp;&nbsp;&nbsp; 38 60 00 0a &nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r3,10<br>
fff035b4:&nbsp;&nbsp;&nbsp; 41 81 00 54 &nbsp;&nbsp;&nbsp; bgt-&nbsp;&nbsp;&nbsp; fff03608 &lt;print_backtrace+0xa4&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>fff035b8:&nbsp;&nbsp;&nbsp; 7c 1f 48 96 &nbsp;&nbsp;&nbsp;&nbsp; mulhw&nbsp;&nbsp; r0,r31,r9<br>fff035bc:&nbsp;&nbsp;&nbsp; 83 7c 00 04 &nbsp;&nbsp;&nbsp; lwz&nbsp;&nbsp;&nbsp;&nbsp; r27,4(r28)<br>fff035c0:&nbsp;&nbsp;&nbsp; 7c 00 fa 14 &nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp;&nbsp; r0,r0,r31<br>
fff035c4:&nbsp;&nbsp;&nbsp; 7c 00 16 70 &nbsp;&nbsp;&nbsp; srawi&nbsp;&nbsp; r0,r0,2<br>fff035c8:&nbsp;&nbsp;&nbsp; 7c 0b 00 50 &nbsp;&nbsp;&nbsp; subf&nbsp;&nbsp;&nbsp; r0,r11,r0<br>fff035cc:&nbsp;&nbsp;&nbsp; 1c 00 00 07 &nbsp;&nbsp;&nbsp; mulli&nbsp;&nbsp; r0,r0,7<br>fff035d0:&nbsp;&nbsp;&nbsp; 7c 00 f8 50 &nbsp;&nbsp;&nbsp;&nbsp; subf&nbsp;&nbsp;&nbsp; r0,r0,r31<br>fff035d4:&nbsp;&nbsp;&nbsp; 2c 00 00 00 &nbsp;&nbsp;&nbsp; cmpwi&nbsp;&nbsp; r0,0<br>
fff035d8:&nbsp;&nbsp;&nbsp; 3b ff 00 01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r31,r31,1<br>fff035dc:&nbsp;&nbsp;&nbsp; 40 a2 00 08 &nbsp;&nbsp;&nbsp; bne+&nbsp;&nbsp;&nbsp; fff035e4 &lt;print_backtrace+0x80&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>fff035e0:&nbsp;&nbsp;&nbsp; 48 01 1b 21 &nbsp;&nbsp;&nbsp; bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fff15100 &lt;putc&gt;<br>fff035e4:&nbsp;&nbsp;&nbsp; 80 7e 80 04 &nbsp;&nbsp;&nbsp; lwz&nbsp;&nbsp;&nbsp;&nbsp; r3,-32764(r30)<br>
fff035e8:&nbsp;&nbsp;&nbsp; 7f 64 db 78 &nbsp;&nbsp;&nbsp;&nbsp; mr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r4,r27<br>fff035ec:&nbsp;&nbsp;&nbsp; 4c c6 31 82 &nbsp;&nbsp;&nbsp; crclr&nbsp;&nbsp; 4*cr1+eq<br>fff035f0:&nbsp;&nbsp;&nbsp; 48 01 1b 89 &nbsp;&nbsp; &nbsp; bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fff15178 &lt;printf&gt;<br>fff035f4:&nbsp;&nbsp;&nbsp; 2c 1f 00 20 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmpwi&nbsp;&nbsp; r31,32<br>fff035f8:&nbsp;&nbsp;&nbsp; 41 81 00 10 &nbsp;&nbsp;&nbsp;&nbsp; bgt-&nbsp;&nbsp;&nbsp; fff03608 &lt;print_backtrace+0xa4&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
fff035fc:&nbsp;&nbsp;&nbsp; 83 9c 00 00 &nbsp;&nbsp;&nbsp;&nbsp; lwz&nbsp;&nbsp;&nbsp;&nbsp; r28,0(r28)<br>fff03600:&nbsp;&nbsp;&nbsp; 2c 1c 00 00 &nbsp;&nbsp;&nbsp; cmpwi&nbsp;&nbsp; r28,0<br>fff03604:&nbsp;&nbsp;&nbsp; 40 82 ff 98 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bne+&nbsp;&nbsp;&nbsp; fff0359c &lt;print_backtrace+0x38&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>fff03608:&nbsp;&nbsp;&nbsp; 38 60 00 0a &nbsp;&nbsp;&nbsp; li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r3,10<br>
fff0360c:&nbsp;&nbsp;&nbsp; 48 01 1a f5 &nbsp;&nbsp;&nbsp;&nbsp; bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fff15100 &lt;putc&gt;<br>fff03610:&nbsp;&nbsp;&nbsp; bb 61 00 14 &nbsp;&nbsp;&nbsp; lmw&nbsp;&nbsp;&nbsp;&nbsp; r27,20(r1)<br>fff03614:&nbsp;&nbsp;&nbsp; 80 01 00 2c &nbsp;&nbsp;&nbsp; lwz&nbsp;&nbsp;&nbsp;&nbsp; r0,44(r1)<br>fff03618:&nbsp;&nbsp;&nbsp; 38 21 00 28 &nbsp;&nbsp;&nbsp; addi&nbsp;&nbsp;&nbsp; r1,r1,40<br>fff0361c:&nbsp;&nbsp;&nbsp; 7c 08 03 a6 &nbsp;&nbsp;&nbsp; mtlr&nbsp;&nbsp;&nbsp; r0<br>
fff03620:&nbsp;&nbsp;&nbsp; 4e 80 00 20 &nbsp;&nbsp;&nbsp; blr<br>fff03624:&nbsp;&nbsp;&nbsp; 00 03 89 f0 &nbsp;&nbsp;&nbsp; .long 0x389f0<br>-------------------------------------------------------------------------------------------------------------------<br>u-boot.bin<br>0002b280h: 43 61 6C 6C 20 62 61 63 6B 74 72 61 63 65 3A 20 ; Call backtrace: <br>
<br>print_backtrace()<br>00003584h: 94 21 FF D8 7C 08 02 A6 42 9F 00 05 BF 61 00 14 ; ?貄..?.縜..<br>00003594h: 7F C8 02 A6 90 01 00 2C 80 1E FF F0 7C 7C 1B 78 ; ?..,€.饇|.x<br>000035a4h: 3B E0 00 00 7F C0 F2 14 80 7E 80 00 48 01 1B AD ; ;?.莉.€~€.H..?<br>
000035b4h: 2C 1C 00 00 41 82 00 70 3C 00 02 00 7C 1C 00 40 ; ,...A?p&lt;...|..@<br>000035c4h: 3D 20 92 49 61 29 24 93 7F EB FE 70 38 60 00 0A ; = 扞a)$?膻p8`..<br>000035d4h: 41 81 00 54 7C 1F 48 96 83 7C 00 04 7C 00 FA 14 ; A?T|.H杻|..|.?<br>
000035e4h: 7C 00 16 70 7C 0B 00 50 1C 00 00 07 7C 00 F8 50 ; |..p|..P....|.鳳<br>000035f4h: 2C 00 00 00 3B FF 00 01 40 A2 00 08 48 01 1B 21 ; ,...;..@?.H..!<br>00003604h: 80 7E 80 04 7F 64 DB 78 4C C6 31 82 48 01 1B 89 ; €~€.d踴L?侶..?<br>
00003614h: 2C 1F 00 20 41 81 00 10 83 9C 00 00 2C 1C 00 00 ; ,.. A?.儨..,...<br>00003624h: 40 82 FF 98 38 60 00 0A 48 01 1A F5 BB 61 00 14 ; @??`..H..趸a..<br>00003634h: 80 01 00 2C 38 21 00 28 7C 08 03 A6 4E 80 00 20 ; €..,8!.(|..€. <br>
00003644h: 00 03 89 F0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; ..夝<br><br>---------------------------------------------------------------------------------------------------------------------<br>cpu\mpc8260\traps.c<br>void&nbsp; print_backtrace(unsigned long *sp)<br>
{<br>&nbsp;&nbsp;&nbsp; int cnt = 0;<br>&nbsp;&nbsp;&nbsp; unsigned long i;<br><br>&nbsp;&nbsp;&nbsp; puts (&quot;Call backtrace: &quot;);<br>&nbsp;&nbsp;&nbsp; while (sp) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ((uint)sp &gt; END_OF_MEM)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; i = sp[1];<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (cnt++ % 7 == 0)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; putc (&#39;\n&#39;);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;%08lX &quot;, i);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (cnt &gt; 32) break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sp = (unsigned long *)*sp;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; putc (&#39;\n&#39;);<br>}<br><br><br><br><br><br><br>On Wed, Jun 4, 2008 at 8:49 PM, Jerry Van Baren &lt;<a href="mailto:gerald.vanbaren@ge.com">gerald.vanbaren@ge.com</a>&gt; wrote:<br>
&gt; wang baohua wrote:<br>&gt;&gt;<br>&gt;&gt; Dear all,<br>&gt;&gt; &nbsp;I study the U-boot.bin file using the objdump command, I don&#39;t know how<br>&gt;&gt; the CPU can find the right string address when puts() string.<br>
&gt;&gt; &nbsp;For example, In my binary file, the string &quot;Call backtrace: &quot; in func<br>&gt;&gt; &quot;print_backtrace()&quot; address is :0x0002b280, the func address is<br>&gt;&gt; &nbsp;0xfff03564, How the CPU can find the 0x0002b280 when call &nbsp;puts (&quot;Call<br>
&gt;&gt; backtrace: &quot;); ? &nbsp;I find the SMC serial driver<br>&gt;&gt; &nbsp;&quot;serial_putc()&quot; but cannot know how to find the char address in binary<br>&gt;&gt; file.<br>&gt;&gt; &nbsp;Below is the objdump result, can anyone explain to me ? thanks!<br>
&gt;<br>&gt; Please don&#39;t post HTML, use plain text.<br>&gt;<br>&gt; I don&#39;t understand your question, why are you asking it? &nbsp;Are you trying to<br>&gt; figure out a problem or are you just trying to understand the linking<br>
&gt; processes?<br>&gt;<br>&gt; Using objdump on u-boot.bin is not valid. &nbsp;U-boot.bin is a binary file,<br>&gt; objdump works on ELF (linker formatted) files.<br>&gt;<br>&gt; &lt;<a href="http://en.wikipedia.org/wiki/Executable_and_Linkable_Format">http://en.wikipedia.org/wiki/Executable_and_Linkable_Format</a>&gt;<br>
&gt;<br>&gt; When you link the ELF files, the linker fixes up all the addresses so the<br>&gt; linker sets the proper address in the instruction that the CPU ultimately<br>&gt; executes. &nbsp;The u-boot.bin file is a raw binary dump of the result.<br>
&gt;<br>&gt; Was that your question???<br>&gt;<br>&gt; Best regards,<br>&gt; gvb<br>&gt;<br><br>