Index: ELF/SymbolTable.cpp =================================================================== --- ELF/SymbolTable.cpp +++ ELF/SymbolTable.cpp @@ -192,8 +192,8 @@ } // Replace __real_sym with sym and sym with __wrap_sym. - W.Real->copyFrom(W.Sym); - W.Sym->copyFrom(W.Wrap); + memcpy(W.Real, W.Sym, sizeof(SymbolUnion)); + memcpy(W.Sym, W.Wrap, sizeof(SymbolUnion)); // We now have two copies of __wrap_sym. Drop one. W.Wrap->IsUsedInRegularObj = false; Index: ELF/Symbols.h =================================================================== --- ELF/Symbols.h +++ ELF/Symbols.h @@ -108,7 +108,6 @@ StringRef getName() const { return Name; } uint8_t getVisibility() const { return StOther & 0x3; } void parseSymbolVersion(); - void copyFrom(Symbol *Other); bool isInGot() const { return GotIndex != -1U; } bool isInPlt() const { return PltIndex != -1U; } Index: ELF/Symbols.cpp =================================================================== --- ELF/Symbols.cpp +++ ELF/Symbols.cpp @@ -134,21 +134,6 @@ return File; } -// Overwrites all attributes with Other's so that this symbol becomes -// an alias to Other. This is useful for handling some options such as -// --wrap. -void Symbol::copyFrom(Symbol *Other) { - Symbol Sym = *this; - memcpy(this, Other, sizeof(SymbolUnion)); - - VersionId = Sym.VersionId; - IsUsedInRegularObj = Sym.IsUsedInRegularObj; - ExportDynamic = Sym.ExportDynamic; - CanInline = Sym.CanInline; - Traced = Sym.Traced; - InVersionScript = Sym.InVersionScript; -} - uint64_t Symbol::getVA(int64_t Addend) const { uint64_t OutVA = getSymVA(*this, Addend); return OutVA + Addend;