简体   繁体   中英

ARM assembly : .LANCHOR0

I am relatively inexperienced with ARM assembly, and need help understanding a few lines. I have used Godbolt to compile C++ 11 code with the ARM gcc 8.2 compiler and got these lines of assembly:

.L10:
        .word   .LANCHOR0

I read that .LANCHOR0 are section anchors, but what does that mean?

I understand that .word and .data can be used together to declare variables and assign values to memory spaces like this:

        .data           ! start a group of variable declarations
x:      .word   23      ! int x = 23;

But, what does

.L10:
        .word   .LANCHOR0

do? There is no label preceding .word here.

Secondly, what does it mean when a block of .word lines are proceeded by another block of assembly instructions like this?

.L7:
        .word   131586
        .word   .LANCHOR0
_GLOBAL__sub_I_unsigned int atlantic_line_ns::getSimInstAddr<atlantic_line_ns::Cr>():
        mov     r2, #0
        ldr     r3, .L10
        str     r2, [r3]
        str     r2, [r3, #4]
        bx      lr

Thanks in advance.

UPDATE

After reading the ARM documentation a bit more, I understand that

.L7:
        .word   131586
        .word   .LANCHOR0

Allocates 2 memory locations, storing values, 131586 and the value at .LANCHOR0, there. Are these memory locations next to each other? Also, what does .LANCHR0 mean?

The following line

.L10:
  .word   .LANCHOR0

instructs assembler to allocate 4 bytes to hold the address of code/data at .LANCHOR0 label. The address itself is located at label .L10 . Note that both .LANCHOR0 and .L10 are ordinary local labels (suffix simply denotes that compiler used them for different purposes).

As you noted, it's possible to intermix code and readonly data in assembly as eg in

.L7:
  .word   131586
  .word   .LANCHOR0
  mov     r2, #0
  ldr     r3, .L10

Compiler frequently does this to declare local function data (literal pool, static variables, etc.). Data from .word lines next to each other will also be consecutive in object code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM