[LLVMdev] misc. patches

Chris Lattner sabre at nondot.org
Mon Dec 13 20:37:50 PST 2004


On Mon, 13 Dec 2004, Reid Spencer wrote:

> Morten,
>
> The leaks.patch file introduced a static destructor ordering problem
> which lead to garbled output. The comment above those lines of code
> indicates why it needs to be the way it is. My bad for committing it in
> the first place. Please be careful in the future.

More specifically, the lib/Support/Timer.cpp change was the problem, and 
was reverted:
http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20041213/022289.html

-Chris

> On Mon, 2004-12-13 at 05:30, Morten Ofstad wrote:
>> Hi,
>>
>> here are some minor patches that for various reasons I've not submitted
>> yet - I'm just trying to clear my list of differences before christmas...
>>
>> First of all the clear.patch file contains a patch that enables the JIT
>> to drop all global mappings. I need this because when I have N threads I
>> compile N different versions of my functions using different memory
>> areas for global variables - it's also useful in other dynamic
>> recompilation scenarios.
>>
>> Next the warnings.patch file contains some minor modification to make
>> Visual Studio shut up (and possibly to make LLVM more 64bit friendly). I
>> chose to typedef a size_type on the LLVM containers that try to mimic
>> the std:: containers, while in the other case I just made a simple cast.
>>
>> Finally the leaks.patch file contains a destructor for the
>> JITMemoryManager that frees system memory and a minor modification to
>> how one particular singleton object gets instantiated in CommandLine.cpp
>> to stop the VS leak detector complaining.
>>
>> m.
>>
>> ______________________________________________________________________
>> Index: lib/ExecutionEngine/JIT/JITEmitter.cpp
>> ===================================================================
>> RCS file: /var/cvs/llvm/llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp,v
>> retrieving revision 1.59
>> diff -u -r1.59 JITEmitter.cpp
>> --- lib/ExecutionEngine/JIT/JITEmitter.cpp	5 Dec 2004 07:19:16 -0000	1.59
>> +++ lib/ExecutionEngine/JIT/JITEmitter.cpp	6 Dec 2004 10:34:21 -0000
>> @@ -51,6 +51,7 @@
>>      unsigned char *CurStubPtr, *CurFunctionPtr;
>>    public:
>>      JITMemoryManager();
>> +    ~JITMemoryManager();
>>
>>      inline unsigned char *allocateStub(unsigned StubSize);
>>      inline unsigned char *startFunctionBody();
>> @@ -69,6 +70,10 @@
>>    CurStubPtr = CurFunctionPtr = FunctionBase;
>>  }
>>
>> +JITMemoryManager::~JITMemoryManager() {
>> +  sys::Memory::ReleaseRWX(MemBlock);
>> +}
>> +
>>  unsigned char *JITMemoryManager::allocateStub(unsigned StubSize) {
>>    CurStubPtr -= StubSize;
>>    if (CurStubPtr < MemBase) {
>> Index: lib/Support/Timer.cpp
>> ===================================================================
>> RCS file: /var/cvs/llvm/llvm/lib/Support/Timer.cpp,v
>> retrieving revision 1.33
>> diff -u -r1.33 Timer.cpp
>> --- lib/Support/Timer.cpp	19 Nov 2004 04:59:07 -0000	1.33
>> +++ lib/Support/Timer.cpp	3 Dec 2004 14:30:24 -0000
>> @@ -33,12 +33,10 @@
>>  // problem is that a Statistic<> object gets destroyed, which ends up calling
>>  // 'GetLibSupportInfoOutputFile()' (below), which calls this function.
>>  // LibSupportInfoOutputFilename used to be a global variable, but sometimes it
>> -// would get destroyed before the Statistic, causing havoc to ensue.  We "fix"
>> -// this by creating the string the first time it is needed and never destroying
>> -// it.
>> +// would get destroyed before the Statistic, causing havoc to ensue.
>>  static std::string &getLibSupportInfoOutputFilename() {
>> -  static std::string *LibSupportInfoOutputFilename = new std::string();
>> -  return *LibSupportInfoOutputFilename;
>> +  static std::string LibSupportInfoOutputFilename;
>> +  return LibSupportInfoOutputFilename;
>>  }
>>
>>  namespace {
>>
>> ______________________________________________________________________
>> Index: include/llvm/Type.h
>> ===================================================================
>> RCS file: /var/cvs/llvm/llvm/include/llvm/Type.h,v
>> retrieving revision 1.67
>> diff -u -r1.67 Type.h
>> --- include/llvm/Type.h	19 Nov 2004 16:39:04 -0000	1.67
>> +++ include/llvm/Type.h	13 Dec 2004 13:11:57 -0000
>> @@ -246,7 +246,8 @@
>>
>>    /// getNumContainedTypes - Return the number of types in the derived type.
>>    ///
>> -  unsigned getNumContainedTypes() const { return ContainedTys.size(); }
>> +  typedef std::vector<PATypeHandle>::size_type size_type;
>> +  size_type getNumContainedTypes() const { return ContainedTys.size(); }
>>
>>    //===--------------------------------------------------------------------===//
>>    // Static members exported by the Type class itself.  Useful for getting
>> Index: include/llvm/Value.h
>> ===================================================================
>> RCS file: /var/cvs/llvm/llvm/include/llvm/Value.h,v
>> retrieving revision 1.66
>> diff -u -r1.66 Value.h
>> --- include/llvm/Value.h	27 Oct 2004 16:14:47 -0000	1.66
>> +++ include/llvm/Value.h	6 Dec 2004 11:24:02 -0000
>> @@ -89,8 +89,9 @@
>>    //
>>    typedef UseListIteratorWrapper      use_iterator;
>>    typedef UseListConstIteratorWrapper use_const_iterator;
>> +  typedef iplist<Use>::size_type      size_type;
>>
>> -  unsigned           use_size()  const { return Uses.size();  }
>> +  size_type          use_size()  const { return Uses.size();  }
>>    bool               use_empty() const { return Uses.empty(); }
>>    use_iterator       use_begin()       { return Uses.begin(); }
>>    use_const_iterator use_begin() const { return Uses.begin(); }
>> Index: include/llvm/Support/CommandLine.h
>> ===================================================================
>> RCS file: /var/cvs/llvm/llvm/include/llvm/Support/CommandLine.h,v
>> retrieving revision 1.40
>> diff -u -r1.40 CommandLine.h
>> --- include/llvm/Support/CommandLine.h	5 Dec 2004 05:17:34 -0000	1.40
>> +++ include/llvm/Support/CommandLine.h	6 Dec 2004 10:08:04 -0000
>> @@ -435,7 +435,7 @@
>>    typedef DataType parser_data_type;
>>
>>    // Implement virtual functions needed by generic_parser_base
>> -  unsigned getNumOptions() const { return Values.size(); }
>> +  unsigned getNumOptions() const { return (unsigned)Values.size(); }
>>    const char *getOption(unsigned N) const { return Values[N].first; }
>>    const char *getDescription(unsigned N) const {
>>      return Values[N].second.second;
>>
>> ______________________________________________________________________
>> Index: include/llvm/ExecutionEngine/ExecutionEngine.h
>> ===================================================================
>> RCS file: /var/cvs/llvm/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h,v
>> retrieving revision 1.30
>> diff -u -r1.30 ExecutionEngine.h
>> --- include/llvm/ExecutionEngine/ExecutionEngine.h	22 Nov 2004 16:54:54 -0000	1.30
>> +++ include/llvm/ExecutionEngine/ExecutionEngine.h	3 Dec 2004 13:50:59 -0000
>> @@ -93,6 +93,13 @@
>>      }
>>    }
>>
>> +  /// clearAllGlobalMappings - Clear all global mappings and start over again
>> +  /// use in dynamic compilation scenarios when you want to move globals
>> +  void clearAllGlobalMappings() {
>> +    GlobalAddressMap.clear();
>> +    GlobalAddressReverseMap.clear();
>> +  }
>> +
>>    /// updateGlobalMapping - Replace an existing mapping for GV with a new
>>    /// address.  This updates both maps as required.
>>    void updateGlobalMapping(const GlobalValue *GV, void *Addr) {
>>
>> ______________________________________________________________________
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.cs.uiuc.edu/




More information about the llvm-dev mailing list