theraven marked 2 inline comments as done.
theraven added inline comments.
================
Comment at: clang/lib/CodeGen/CGObjCGNU.cpp:188
+ StringRef SymbolPrefix() {
+ return CGM.getTriple().isOSBinFormatCOFF() ? "_" : "._";
----------------
DHowett-MSFT wrote:
> theraven wrote:
> > DHowett-MSFT wrote:
> > > Should this be `SymbolPrefix()` or something more like
> > > `MangleSymbol(StringRef sym)`? I know that right now we only need to
> > > prepend `_` or `._`, but is it more future-proof to make it generic?
> > I have refactored this, and then tried adding a $ instead of the . for
> > mangling. On further testing, the latest link.exe from VS 2017 no longer
> > complains about symbols starting with a dot, so I'm inclined to revert that
> > part of it entirely (lld-link.exe was always happy). I'd prefer to
> > minimise differences between COFF and ELF and this means that we have
> > different section names, but aside from needing the extra global
> > initialisation on COFF, everything else is the same.
> The issue I had with symbols starting with `.` was in `.DEF` files
> specifically.
>
> Linking a shared object containing:
> ```
> @.exp_with_dot = dllexport global i32 0, align 4
> ```
>
> without a def file, yields:
>
> ```
> ordinal hint RVA name
>
> 1 0 00012900 .exp_with_dot
> ```
>
> However, linking the same library with a definition file:
>
> ###test.def
> ```
> EXPORTS
> .exp_with_dot
> ```
>
> yields
>
> ###output
> ```
> test.def : fatal error LNK1242: '.exp_with_dot' is an invalid export symbol
> name
> ```
>
> This still reproduces with 15.9.8, sadly. LINK version 14.16.27027.1.
Does it work with a $ instead of a .?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D58724/new/
https://reviews.llvm.org/D58724
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits