Beispiel #1
0
// Returns a buffer pointing to a member file containing a given symbol.
// This function is thread-safe.
MemoryBufferRef ArchiveFile::getMember(const Archive::Symbol *Sym) {
  const Archive::Child &C =
      check(Sym->getMember(),
            "could not get the member for symbol " + Sym->getName());

  // Return an empty buffer if we have already returned the same buffer.
  if (Seen[C.getChildOffset()].test_and_set())
    return MemoryBufferRef();
  return check(C.getMemoryBufferRef(),
               "could not get the buffer for the member defining symbol " +
                   Sym->getName());
}
Beispiel #2
0
// Returns a buffer pointing to a member file containing a given symbol.
// This function is thread-safe.
MemoryBufferRef ArchiveFile::getMember(const Archive::Symbol *Sym) {
  auto COrErr = Sym->getMember();
  error(COrErr, Twine("Could not get the member for symbol ") + Sym->getName());
  const Archive::Child &C = *COrErr;

  // Return an empty buffer if we have already returned the same buffer.
  if (Seen[C.getChildOffset()].test_and_set())
    return MemoryBufferRef();
  ErrorOr<MemoryBufferRef> Ret = C.getMemoryBufferRef();
  error(Ret, Twine("Could not get the buffer for the member defining symbol ") +
                 Sym->getName());
  return *Ret;
}