Делает ли здесь директива .size что-нибудь? - PullRequest
0 голосов
/ 27 октября 2018

В настоящее время я пытаюсь кросс-компилировать musl 1.1.18 на хосте x86-64 для цели powerpc64le, используя LLVM 3.7.1.Невозможно скомпилировать файл / код, показанный ниже с error: unexpected token in '.end' directive. Это не мой вопрос.

От src / internal / powerpc64 / syscall.s :

    .global __syscall
    .hidden __syscall
    .type   __syscall,@function
__syscall:
    mr      0, 3                  # Save the system call number
    mr      3, 4                  # Shift the arguments: arg1
    mr      4, 5                  # arg2
    mr      5, 6                  # arg3
    mr      6, 7                  # arg4
    mr      7, 8                  # arg5
    mr      8, 9                  # arg6
    sc
    bnslr+       # return if not summary overflow
    neg     3, 3 # otherwise error: return negated value.
    blr
    .end    __syscall
    .size   __syscall, .-__syscall

Мой вопрос: действительно ли .size директива здесь делает что-нибудь ? Согласно документации по газу , директива .end означает конец файла, и больше ничего не будет обрабатываться.Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 27 октября 2018

Это, похоже, недокументированная особенность ассемблера GNU.Очевидно, он используется для передачи отладочной информации в формате ECOFF.См. gas / config / obj-ecoff.c: 259 и gas / ecoff.c: 2981

/* ECOFF specific debugging information.  */
{ "aent",     ecoff_directive_ent,    1 },
{ "begin",    ecoff_directive_begin,  0 },
{ "bend",     ecoff_directive_bend,   0 },
{ "end",      ecoff_directive_end,    0 },
...