Re: A Qn on GCC generated ARM asm code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Binesh <bbinesh@xxxxxxxxx> writes:

> I have a question on the contents of a library compiled using gcc (V
> 3.4.3) for an ARM11 target.
> When I disassemble code in the .text section of a library a.so, I find
> some data beyond what appears to be the end of the a function's
> assembly code.
> 
> for eg  a function abc (prelinked & stripped) seems to have the
> following assembly:
> 
> 414afb68:   e92d4420    stmdb   sp!, {r5, sl, lr}
> 414afb6c:   e59fa03c    ldr sl, [pc, #60]   ; 414afbb0
> 414afb70:   e59f303c    ldr r3, [pc, #60]   ; 414afbb4
> 414afb74:   e08fa00a    add sl, pc, sl
> 414afb78:   e79a2003    ldr r2, [sl, r3]
> 414afb7c:   e1a03001    mov r3, r1
> 414afb80:   e1a05000    mov r5, r0
> 414afb84:   e592c000    ldr ip, [r2]
> 414afb88:   e59f2028    ldr r2, [pc, #40]   ; 414afbb8
> 414afb8c:   e24dd00c    sub sp, sp, #12 ; 0xc
> 414afb90:   e1a0100c    mov r1, ip
> 414afb94:   e08a2002    add r2, sl, r2
> 414afb98:   e3a0c000    mov ip, #0  ; 0x0
> 414afb9c:   e58dc000    str ip, [sp]
> 414afba0:   ebfff6bb    bl  414ad694
> 414afba4:   e1a00005    mov r0, r5
> 414afba8:   e28dd00c    add sp, sp, #12 ; 0xc
> 414afbac:   e8bd8420    ldmia   sp!, {r5, sl, pc}
> 414afbb0:   002b3574    eoreq   r3, fp, r4, ror r5
> 414afbb4:   00004ab8    streqh  r4, [r0], -r8
> 414afbb8:   fff77f18    swinv   0x00f77f18
> 
> The function appears to have ended at address 0x414afbac. However the
> next function starts only at 0x414afbbc. The bytes at 0x414afbb0
> through 0x414afbb8 seem to represent some data (the unstripped elf
> tags them with a $d) and the function code seems to make a reference
> to these addresses. What exactly are these data parameters? As none of
> these data values are present in the C-code of the function abc, it
> appears to have been inserted by the compiler.
> It would be of great help if someone could help me locate the
> source/logic behind these extra bytes.

I'm not completely sure, but this looks to me like code compiler with
-fpic which is using sl as the PIC register.  The constants are the
offset from the code to the start of the GOT, and the offsets into the
GOT.

(When using -fpic, all global variables are referenced through the
Global Offset Table (GOT).  The offsets into the GOT are determined by
the linker.)

Ian

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux