Quick question about assembly output

I notice that when I assemble a .bc file into a .s (assembly) file, the symbol names that are generated are very different under different hosts OS’s.

For example, I have a symbol such as “main(tart.core.String)->int”. Under Darwin, the assembly output says “main(tart.core.String)->int” (with quotes), but when I generate the assembly file under Linux I get “main_28_tart.core.String_5B__5D__29__2D__3E_int”. It appears that something is translating all of the punctuation characters to escape sequences.

My question is, can this be controlled and/or disabled? Given that I’m using the same assembler (Gnu) in both cases, is it really necessary?

For example, I have a symbol such as "main(tart.core.String)->int". Under
Darwin, the assembly output says "main(tart.core.String)->int" (with
quotes), but when I generate the assembly file under Linux I get
"main_28_tart.core.String_5B__5D__29__2D__3E_int". It appears that something
is translating all of the punctuation characters to escape sequences.
My question is, can this be controlled and/or disabled? Given that I'm using
the same assembler (Gnu) in both cases, is it really necessary?

Different file formats / assemblers have different restrictions on
characters which can be used in symbol names.
LLVM pass the stuff through the mangler to ensure that the output
assemble properly. And this cannot be disabled
if you really want the output to be usable :slight_smile:

And also you're not using the same assembler - darwin assembler is
completely different from gnu.