u-boot-2014.10移植第6天----深入分析代码(一)

时间:2021-07-31 17:16:32

硬件平台:tq2440

开发环境:Ubuntu-3.11

u-boot版本:2014.10

本文允许转载,请注明出处:http://blog.csdn.net/fulinus


前面我们看到了一个lds文件,我们这里深入的了解一下:

section.c:

/* * Copyright: (C) 2014 EAST fulinux <fulinux@sina.com>
*/
#include <stdio.h>
#include <stdlib.h>

int localmemory0 __attribute__((section("LOCALmem"))) = 0;
int localmemory1 __attribute__((section("LOCALmem"))) = 0;
int globalmemory __attribute__((section("GLOBALmem"))) = 0;

int main (int argc, char *argv[])
{
localmemory0 = 0x456;
localmemory1 = 0x123;

globalmemory = localmemory0 + localmemory1;

return 0;
}

$ gcc -c -o section.o section.c
$ objdump -d section.o 

section.o:     文件格式 elf64-x86-64Disassembly of section .text:0000000000000000 <main>:   0:   55                      push   %rbp   1:   48 89 e5                mov    %rsp,%rbp   4:   89 7d fc                mov    %edi,-0x4(%rbp)   7:   48 89 75 f0             mov    %rsi,-0x10(%rbp)   b:   c7 05 00 00 00 00 56    movl   $0x456,0x0(%rip)        # 15 <main+0x15>  12:   04 00 00   15:   c7 05 00 00 00 00 23    movl   $0x123,0x0(%rip)        # 1f <main+0x1f>  1c:   01 00 00   1f:   8b 15 00 00 00 00       mov    0x0(%rip),%edx        # 25 <main+0x25>  25:   8b 05 00 00 00 00       mov    0x0(%rip),%eax        # 2b <main+0x2b>  2b:   01 d0                   add    %edx,%eax  2d:   89 05 00 00 00 00       mov    %eax,0x0(%rip)        # 33 <main+0x33>  33:   b8 00 00 00 00          mov    $0x0,%eax  38:   5d                      pop    %rbp  39:   c3                      retq 

section.lds:

SECTIONS{    .text :    {        *(.text)    }    LOCALmem 0x1f0000 :    {        *(LOCALmem)    }    GLOBALmem 0xff0000 :    {        *(GLOBALmem)    }}

$ ld -o section.elf -T section.lds section.o

$ objdump -S section.elf 
section.elf:     文件格式 elf64-x86-64Disassembly of section .text:0000000000000000 <main>:   0:   55                      push   %rbp   1:   48 89 e5                mov    %rsp,%rbp   4:   89 7d fc                mov    %edi,-0x4(%rbp)   7:   48 89 75 f0             mov    %rsi,-0x10(%rbp)   b:   c7 05 eb ff 1e 00 56    movl   $0x456,0x1effeb(%rip)        # 1f0000 <localmemory0>  12:   04 00 00   15:   c7 05 e5 ff 1e 00 23    movl   $0x123,0x1effe5(%rip)        # 1f0004 <localmemory1>  1c:   01 00 00   1f:   8b 15 db ff 1e 00       mov    0x1effdb(%rip),%edx        # 1f0000 <localmemory0>  25:   8b 05 d9 ff 1e 00       mov    0x1effd9(%rip),%eax        # 1f0004 <localmemory1>  2b:   01 d0                   add    %edx,%eax  2d:   89 05 cd ff fe 00       mov    %eax,0xfeffcd(%rip)        # ff0000 <globalmemory>  33:   b8 00 00 00 00          mov    $0x0,%eax  38:   5d                      pop    %rbp  39:   c3                      retq   [fulinux@ubuntu jupiter]$