https://sourceware.org/bugzilla/show_bug.cgi?id=27865
Bug ID: 27865
Summary: Unsupported name-unmangling for C++20 modules?
Product: binutils
Version: 2.37 (HEAD)
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: binutils
Assignee: unassigned at sourceware dot org
Reporter: andrew.jones at vector dot com
Target Milestone: ---
# tl;dr:
When working with binutils with HEAD at 75f03fa7743, it seems that demangling
of C++20 module symbols doesn't work.
For example:
```
g F .text 000b _ZW3mooE3moov
```
does not appear to have a demangling, while all other examples of "private"
entities (see below) do have a demangling.
These files have all been compiled with:
```
g++-11 --version
g++-11 (SUSE Linux) 11.0.0 20210208 (experimental) [revision
efcd941e86b507d77e90a1b13f621e036eacdb45]
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```
# Examples:
## static.cpp
```
static int moo() { return 10; }
```
### Unfiltered
```
l F .text 000b _ZL3moov
```
### Filtered
```
l F .text 000b moo()
```
Correct!
## anon_ns.cpp
```
namespace {
int moo() { return 10; }
}
```
### Unfiltered
```
l F .text 000b _ZN12_GLOBAL__N_13mooEv
```
### Filtered
```
l F .text 000b (anonymous namespace)::moo()
```
Correct!
## namespace.cpp
```
namespace moo {
int moo() { return 10; }
} // namespace moo
```
### Unfiltered
```
g F .text 000b _ZN3moo3mooEv
```
### Filtered
```
g F .text 000b moo::moo()
```
Correct!
## module_with_export.cpp
```
export module moo;
export int moo() { return 10; }
```
### Unfiltered
```
l O .bss 0001 _ZZ11_ZGIW3mooEvE9__in_chrg
g F .text 000b _Z3moov
000b g F .text 0018 _ZGIW3mooEv
```
### Filtered
```
l O .bss 0001 _ZGIW3mooEv::__in_chrg
g F .text 000b moo()
000b g F .text 0018 _ZGIW3mooEv
```
Looks good, exported symbol appears like it is a global symbol.
## module_without_export.cpp
```
export module moo;
int moo() { return 10; }
```
### Unfiltered
```
l O .bss 0001 _ZZ11_ZGIW3mooEvE9__in_chrg
g F .text 000b _ZW3mooE3moov
000b g F .text 0018 _ZGIW3mooEv
```
### Filtered
```
l O .bss 0001 _ZGIW3mooEv::__in_chrg
g F .text 000b _ZW3mooE3moov
000b g F .text 0018 _ZGIW3mooEv
```
Hmm, so what's happening here? `_ZW3mooE3moov` appears to have no demangling. I
don't actually know what the demangling should be, but the fact that all of the
other examples of "private-esque" functions do have demanglings, suggests that
binutils should support a demangling of non-exported module functions.
GCC's ABI for modules appears at least partially documented here:
https://gcc.gnu.org/wiki/cxx-modules?action=AttachFile&do=view&target=module-abi-2017-09-01.pdf
--
You are receiving this mail because:
You are on the CC list for the bug.