Как сохранить имена функций без изменений? - PullRequest
0 голосов
/ 20 сентября 2019

Следующий файл сборки (для записи, сгенерированной из битового кода с использованием llc):

        .text
        .file   "mymod"
        .section        .text.asd,"",@
        .globl  asd                     # -- Begin function asd
        .type   asd,@function
asd:                                    # @asd
        .functype       asd (f32, f32) -> (f32)
# %bb.0:
        local.get       0
        local.get       1
        f32.add 
        f32.const       0x1p-1
        f32.mul 
                                        # fallthrough-return-value
        end_function
.Lfunc_end0:
        .size   asd, .Lfunc_end0-asd
                                        # -- End function

при компиляции со следующей командной строкой:

clang -c temp.s --target=wasm32

превращается в wasmмодуль со всем там, кроме того, что имя функции отсутствует!

(module
  (type (;0;) (func (param f32 f32) (result f32)))
  (import "env" "__linear_memory" (memory (;0;) 0))
  (import "env" "__indirect_function_table" (table (;0;) 0 funcref))
  (func (;0;) (type 0) (param f32 f32) (result f32)
    local.get 0
    local.get 1
    f32.add
    f32.const 0x1p-1 (;=0.5;)
    f32.mul))

Почему компилятор отбрасывает имя?Я что-то здесь неправильно понял?Как правило, компиляция с -c - это только половина дела, но если здесь отсутствует имя и функция не экспортирована, то волшебным образом не вернется позже.Итак, как я могу заставить LLVM сохранить имя и экспортировать функцию, как это должно быть?В идеале я хотел бы сделать это программно, используя C API.Кажется логичным, что другие люди делали это раньше, так как другие инструменты, использующие LLVM, делают это правильно.

...