[llvm] r253343 - [llvm-rtdyld] Don't waste cycles invalidating instruction cache.
Duncan P. N. Exon Smith via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 17 10:09:11 PST 2015
> On 2015-Nov-17, at 08:37, Davide Italiano via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: davide
> Date: Tue Nov 17 10:37:52 2015
> New Revision: 253343
>
> URL: http://llvm.org/viewvc/llvm-project?rev=253343&view=rev
> Log:
> [llvm-rtdyld] Don't waste cycles invalidating instruction cache.
>
> Now that setExecutable() changed to do all the ground work to make
> memory executable on the host, we can remove all (redundant) calls
> to invalidate instruction cache here.
>
> As an added bonus, this makes invalidateInstructionCache() dead
> code, so it can be removed.
>
> Differential Revision: http://reviews.llvm.org/D13631
>
> Modified:
> llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp
>
> Modified: llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp?rev=253343&r1=253342&r2=253343&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp (original)
> +++ llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp Tue Nov 17 10:37:52 2015
> @@ -155,12 +155,6 @@ public:
>
> bool finalizeMemory(std::string *ErrMsg) override { return false; }
>
> - // Invalidate instruction cache for sections with execute permissions.
> - // Some platforms with separate data cache and instruction cache require
> - // explicit cache flush, otherwise JIT code manipulations (like resolved
> - // relocations) will get to the data cache but not to the instruction cache.
> - virtual void invalidateInstructionCache();
> -
> void addDummySymbol(const std::string &Name, uint64_t Addr) {
> DummyExterns[Name] = Addr;
> }
> @@ -244,14 +238,6 @@ uint8_t *TrivialMemoryManager::allocateD
> return (uint8_t*)MB.base();
> }
>
> -void TrivialMemoryManager::invalidateInstructionCache() {
> - for (auto &FM : FunctionMemory)
> - sys::Memory::InvalidateInstructionCache(FM.base(), FM.size());
> -
> - for (auto &DM : DataMemory)
> - sys::Memory::InvalidateInstructionCache(DM.base(), DM.size());
> -}
> -
> static const char *ProgramName;
>
> static void Message(const char *Type, const Twine &Msg) {
> @@ -424,12 +410,9 @@ static int executeInput() {
> }
> }
>
> - // Resolve all the relocations we can.
> - Dyld.resolveRelocations();
> - // Clear instruction cache before code will be executed.
> - MemMgr.invalidateInstructionCache();
> -
> + // Resove all the relocations we can.
> // FIXME: Error out if there are unresolved relocations.
> + Dyld.resolveRelocations();
>
> // Get the address of the entry point (_main by default).
> void *MainAddress = Dyld.getSymbolLocalAddress(EntryPoint);
> @@ -438,9 +421,10 @@ static int executeInput() {
>
> // Invalidate the instruction cache for each loaded function.
> for (auto &FM : MemMgr.FunctionMemory) {
> +
Spurious blank line?
> // Make sure the memory is executable.
> + // setExecutable will call InvalidateInstructionCache.
> std::string ErrorStr;
> - sys::Memory::InvalidateInstructionCache(FM.base(), FM.size());
> if (!sys::Memory::setExecutable(FM, &ErrorStr))
> return Error("unable to mark function executable: '" + ErrorStr + "'");
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list