[lld] [LLD][COFF] Initial support for ARM64EC importlibs. (PR #107164)
Martin Storsjö via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 4 01:40:59 PDT 2024
================
@@ -1019,9 +1020,16 @@ void ImportFile::parse() {
// Read names and create an __imp_ symbol.
StringRef buf = mb.getBuffer().substr(sizeof(*hdr));
- StringRef name = saver().save(buf.split('\0').first);
+ StringRef nameBuf = buf.split('\0').first, name;
+ if (isArm64EC(hdr->Machine)) {
+ if (std::optional<std::string> demangledName =
+ getArm64ECDemangledFunctionName(nameBuf))
+ name = saver().save(*demangledName);
+ }
+ if (name.empty())
+ name = saver().save(nameBuf);
StringRef impName = saver().save("__imp_" + name);
- buf = buf.substr(name.size() + 1);
+ buf = buf.substr(nameBuf.size() + 1);
----------------
mstorsjo wrote:
Hm, this seems to be a preexisting issue, but the rename of `name` to `nameBuf` and the newly added code inbetween highlights a logical stumbling block here.
Instead of doing a `buf.substr()` here at this point, what if we'd do this upfront at the top:
```
auto split = buf.split('\0');
StringRef nameBuf = split.first;
buf = split.second;
```
Then we don't need to do the `substr()` at a later point, where the index feels much less clearly related to the split.
https://github.com/llvm/llvm-project/pull/107164
More information about the llvm-commits
mailing list