diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2006-07-26 16:18:00 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2006-07-26 16:18:00 +0000 |
commit | 421475cd3ba5abaa5016a4b1071ab26f7722a7a3 (patch) | |
tree | 7a33db5128e43556c165a1563954983c5625165e | |
parent | No Need to live in the past. (diff) | |
download | llvm-project-421475cd3ba5abaa5016a4b1071ab26f7722a7a3.tar.gz llvm-project-421475cd3ba5abaa5016a4b1071ab26f7722a7a3.tar.bz2 llvm-project-421475cd3ba5abaa5016a4b1071ab26f7722a7a3.zip |
For PR780:
1. Move IncludeFile.h to System library
2. Move IncludeFile.cpp to System library
3. #1 and #2 required to prevent cyclic library dependencies for libSystem
4. Convert all existing uses of Support/IncludeFile.h to System/IncludeFile.h
5. Add IncludeFile support to various lib/System classes.
6. Add new lib/System classes to LinkAllVMCore.h
All this in an attempt to pull in lib/System to what's required for VMCore
llvm-svn: 29287
23 files changed, 64 insertions, 105 deletions
diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h index 2fff77420aeb..66f60ab547db 100644 --- a/llvm/include/llvm/Analysis/AliasAnalysis.h +++ b/llvm/include/llvm/Analysis/AliasAnalysis.h @@ -31,7 +31,7 @@ #define LLVM_ANALYSIS_ALIAS_ANALYSIS_H #include "llvm/Support/CallSite.h" -#include "llvm/Support/IncludeFile.h" +#include "llvm/System/IncludeFile.h" namespace llvm { diff --git a/llvm/include/llvm/InlineAsm.h b/llvm/include/llvm/InlineAsm.h index 6e7aab1cb03c..b9f707cf83cb 100644 --- a/llvm/include/llvm/InlineAsm.h +++ b/llvm/include/llvm/InlineAsm.h @@ -17,7 +17,7 @@ #define LLVM_INLINEASM_H #include "llvm/Value.h" -#include "llvm/Support/IncludeFile.h" +#include "llvm/System/IncludeFile.h" #include <vector> namespace llvm { diff --git a/llvm/include/llvm/IntrinsicInst.h b/llvm/include/llvm/IntrinsicInst.h index 5b784fc2b90f..996c83cb8ef3 100644 --- a/llvm/include/llvm/IntrinsicInst.h +++ b/llvm/include/llvm/IntrinsicInst.h @@ -28,7 +28,7 @@ #include "llvm/Function.h" #include "llvm/Instructions.h" #include "llvm/Intrinsics.h" -#include "llvm/Support/IncludeFile.h" +#include "llvm/System/IncludeFile.h" namespace llvm { /// IntrinsicInst - A useful wrapper class for inspecting calls to intrinsic diff --git a/llvm/include/llvm/LinkAllVMCore.h b/llvm/include/llvm/LinkAllVMCore.h index d0366ebe1e1a..fa46dbb1f119 100644 --- a/llvm/include/llvm/LinkAllVMCore.h +++ b/llvm/include/llvm/LinkAllVMCore.h @@ -16,13 +16,19 @@ #ifndef LLVM_LINKALLVMCORE_H #define LLVM_LINKALLVMCORE_H -#include "llvm/Support/IncludeFile.h" -#include "llvm/Support/Mangler.h" +#include "llvm/System/IncludeFile.h" + #include "llvm/Module.h" #include "llvm/Instructions.h" #include "llvm/IntrinsicInst.h" #include "llvm/InlineAsm.h" #include "llvm/Analysis/Verifier.h" +#include "llvm/System/Memory.h" +#include "llvm/System/Mutex.h" +#include "llvm/Support/Dwarf.h" +#include "llvm/Support/Mangler.h" +#include "llvm/Support/MathExtras.h" +#include "llvm/Support/SlowOperationInformer.h" namespace { struct ForceVMCoreLinking { diff --git a/llvm/include/llvm/PassSupport.h b/llvm/include/llvm/PassSupport.h index 57dcce795066..9350e284fcf8 100644 --- a/llvm/include/llvm/PassSupport.h +++ b/llvm/include/llvm/PassSupport.h @@ -21,7 +21,7 @@ #ifndef LLVM_PASS_SUPPORT_H #define LLVM_PASS_SUPPORT_H -#include "llvm/Support/IncludeFile.h" +#include "llvm/System/IncludeFile.h" // No need to include Pass.h, we are being included by it! namespace llvm { diff --git a/llvm/include/llvm/Support/Dwarf.h b/llvm/include/llvm/Support/Dwarf.h index 17622f451581..05260be2d7cb 100644 --- a/llvm/include/llvm/Support/Dwarf.h +++ b/llvm/include/llvm/Support/Dwarf.h @@ -16,6 +16,8 @@ #ifndef LLVM_SUPPORT_DWARF_H #define LLVM_SUPPORT_DWARF_H +#include "llvm/System/IncludeFile.h" + namespace llvm { namespace dwarf { @@ -546,4 +548,6 @@ const char *CallFrameString(unsigned Encoding); } // End of namespace llvm +FORCE_DEFINING_FILE_TO_BE_LINKED(SupportDwarf) + #endif diff --git a/llvm/include/llvm/Support/IncludeFile.h b/llvm/include/llvm/Support/IncludeFile.h deleted file mode 100644 index 798c6b454fc9..000000000000 --- a/llvm/include/llvm/Support/IncludeFile.h +++ /dev/null @@ -1,65 +0,0 @@ -//===- llvm/Support/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file was developed by Reid Spencer and is distributed under the -// University of Illinois Open Source License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines the FORCE_DEFINING_FILE_TO_BE_LINKED and DEFINE_FILE_FOR -// macros. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SUPPORT_INCLUDEFILE_H -#define LLVM_SUPPORT_INCLUDEFILE_H - -/// This macro is the public interface that IncludeFile.h exports. This gives -/// us the option to implement the "link the definition" capability in any -/// manner that we choose. All header files that depend on a specific .cpp -/// file being linked at run time should use this macro instead of the -/// IncludeFile class directly. -/// -/// For example, foo.h would use:<br/> -/// <tt>FORCE_DEFINING_FILE_TO_BE_LINKED(foo)</tt><br/> -/// -/// And, foo.cp would use:<br/> -/// <tt>DEFINING_FILE_FOR(foo)</tt><br/> -#define FORCE_DEFINING_FILE_TO_BE_LINKED(name) \ - namespace llvm { \ - extern char name ## LinkVar; \ - static IncludeFile name ## LinkObj ( &name ## LinkVar ); \ - } - -/// This macro is the counterpart to FORCE_DEFINING_FILE_TO_BE_LINKED. It should -/// be used in a .cpp file to define the name referenced in a header file that -/// will cause linkage of the .cpp file. It should only be used at extern level. -#define DEFINING_FILE_FOR(name) namespace llvm { char name ## LinkVar; } - -namespace llvm { - -/// This class is used in the implementation of FORCE_DEFINING_FILE_TO_BE_LINKED -/// macro to make sure that the implementation of a header file is included -/// into a tool that uses the header. This is solely -/// to overcome problems linking .a files and not getting the implementation -/// of compilation units we need. This is commonly an issue with the various -/// Passes but also occurs elsewhere in LLVM. We like to use .a files because -/// they link faster and provide the smallest executables. However, sometimes -/// those executables are too small, if the program doesn't reference something -/// that might be needed, especially by a loaded share object. This little class -/// helps to resolve that problem. The basic strategy is to use this class in -/// a header file and pass the address of a variable to the constructor. If the -/// variable is defined in the header file's corresponding .cpp file then all -/// tools/libraries that #include the header file will require the .cpp as well. -/// For example:<br/> -/// <tt>extern int LinkMyCodeStub;</tt><br/> -/// <tt>static IncludeFile LinkMyModule(&LinkMyCodeStub);</tt><br/> -/// @brief Class to ensure linking of corresponding object file. -struct IncludeFile { - IncludeFile(void *); -}; - -} - -#endif diff --git a/llvm/include/llvm/Support/Mangler.h b/llvm/include/llvm/Support/Mangler.h index 50e49ff8a55b..ac7deadf8bdc 100644 --- a/llvm/include/llvm/Support/Mangler.h +++ b/llvm/include/llvm/Support/Mangler.h @@ -14,7 +14,7 @@ #ifndef LLVM_SUPPORT_MANGLER_H #define LLVM_SUPPORT_MANGLER_H -#include "llvm/Support/IncludeFile.h" +#include "llvm/System/IncludeFile.h" #include <map> #include <set> #include <string> diff --git a/llvm/include/llvm/Support/MathExtras.h b/llvm/include/llvm/Support/MathExtras.h index 0f5961ff739e..228d35ceff52 100644 --- a/llvm/include/llvm/Support/MathExtras.h +++ b/llvm/include/llvm/Support/MathExtras.h @@ -15,6 +15,7 @@ #define LLVM_SUPPORT_MATHEXTRAS_H #include "llvm/Support/DataTypes.h" +#include "llvm/System/IncludeFile.h" namespace llvm { @@ -306,4 +307,7 @@ int IsInf (double d); } // End llvm namespace +FORCE_DEFINING_FILE_TO_BE_LINKED(SupportIsInf) +FORCE_DEFINING_FILE_TO_BE_LINKED(SupportIsNAN) + #endif diff --git a/llvm/include/llvm/Support/SlowOperationInformer.h b/llvm/include/llvm/Support/SlowOperationInformer.h index d05792672ac8..0be01960caf3 100644 --- a/llvm/include/llvm/Support/SlowOperationInformer.h +++ b/llvm/include/llvm/Support/SlowOperationInformer.h @@ -32,6 +32,7 @@ #include <string> #include <cassert> #include "llvm/Support/DataTypes.h" +#include "llvm/System/IncludeFile.h" namespace llvm { class SlowOperationInformer { @@ -63,3 +64,5 @@ namespace llvm { } // end namespace llvm #endif /* SLOW_OPERATION_INFORMER_H */ + +FORCE_DEFINING_FILE_TO_BE_LINKED(SupportSlowOperationInformer) diff --git a/llvm/include/llvm/System/IncludeFile.h b/llvm/include/llvm/System/IncludeFile.h index 798c6b454fc9..c9f388235977 100644 --- a/llvm/include/llvm/System/IncludeFile.h +++ b/llvm/include/llvm/System/IncludeFile.h @@ -1,4 +1,4 @@ -//===- llvm/Support/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===// +//===- llvm/System/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_SUPPORT_INCLUDEFILE_H -#define LLVM_SUPPORT_INCLUDEFILE_H +#ifndef LLVM_SYSTEM_INCLUDEFILE_H +#define LLVM_SYSTEM_INCLUDEFILE_H /// This macro is the public interface that IncludeFile.h exports. This gives /// us the option to implement the "link the definition" capability in any diff --git a/llvm/include/llvm/System/Memory.h b/llvm/include/llvm/System/Memory.h index 27d7c0cb5c04..c343177e1786 100644 --- a/llvm/include/llvm/System/Memory.h +++ b/llvm/include/llvm/System/Memory.h @@ -15,6 +15,7 @@ #define LLVM_SYSTEM_MEMORY_H #include <string> +#include "llvm/System/IncludeFile.h" namespace llvm { namespace sys { @@ -70,4 +71,6 @@ namespace sys { } } +FORCE_DEFINING_FILE_TO_BE_LINKED(SystemMemory) + #endif diff --git a/llvm/include/llvm/System/Mutex.h b/llvm/include/llvm/System/Mutex.h index 94dd8113781e..27bcea18d344 100644 --- a/llvm/include/llvm/System/Mutex.h +++ b/llvm/include/llvm/System/Mutex.h @@ -14,6 +14,8 @@ #ifndef LLVM_SYSTEM_MUTEX_H #define LLVM_SYSTEM_MUTEX_H +#include "llvm/System/IncludeFile.h" + namespace llvm { namespace sys @@ -81,4 +83,6 @@ namespace llvm } } +FORCE_DEFINING_FILE_TO_BE_LINKED(SystemMutex) + #endif diff --git a/llvm/lib/CodeGen/SelectionDAG/Makefile b/llvm/lib/CodeGen/SelectionDAG/Makefile index 306a6caad5d6..6c502886c5fd 100644 --- a/llvm/lib/CodeGen/SelectionDAG/Makefile +++ b/llvm/lib/CodeGen/SelectionDAG/Makefile @@ -10,5 +10,6 @@ LEVEL = ../../.. LIBRARYNAME = LLVMSelectionDAG PARALLEL_DIRS = BUILD_ARCHIVE = 1 +DONT_BUILD_RELINKED = 1 include $(LEVEL)/Makefile.common diff --git a/llvm/lib/Support/Dwarf.cpp b/llvm/lib/Support/Dwarf.cpp index 409eadd56074..35862e843929 100644 --- a/llvm/lib/Support/Dwarf.cpp +++ b/llvm/lib/Support/Dwarf.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/Dwarf.h" +#include "llvm/System/IncludeFile.h" #include <cassert> @@ -580,3 +581,5 @@ const char *CallFrameString(unsigned Encoding) { } // End of namespace dwarf. } // End of namespace llvm. + +DEFINING_FILE_FOR(SupportDwarf) diff --git a/llvm/lib/Support/IncludeFile.cpp b/llvm/lib/Support/IncludeFile.cpp deleted file mode 100644 index d4729176f417..000000000000 --- a/llvm/lib/Support/IncludeFile.cpp +++ /dev/null @@ -1,20 +0,0 @@ -//===- lib/Support/IncludeFile.cpp - Ensure Linking Of Implementation -----===// -// -// The LLVM Compiler Infrastructure -// -// This file was developed by Reid Spencer and is distributed under the -// University of Illinois Open Source License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the IncludeFile constructor. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Support/IncludeFile.h" - -using namespace llvm; - -// This constructor is used to ensure linking of other modules. See the -// llvm/Support/IncludeFile.h header for details. -IncludeFile::IncludeFile(void*) {} diff --git a/llvm/lib/Support/IsInf.cpp b/llvm/lib/Support/IsInf.cpp index 39c11cd7a666..9b0556fcb09f 100644 --- a/llvm/lib/Support/IsInf.cpp +++ b/llvm/lib/Support/IsInf.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" +#include "llvm/System/IncludeFile.h" #if HAVE_ISINF_IN_MATH_H # include <math.h> @@ -43,3 +44,5 @@ int IsInf (float f) { return isinf (f); } int IsInf (double d) { return isinf (d); } } // end namespace llvm; + +DEFINING_FILE_FOR(SupportIsInf) diff --git a/llvm/lib/Support/IsNAN.cpp b/llvm/lib/Support/IsNAN.cpp index 2ed2b284c7d1..5ed3971254bb 100644 --- a/llvm/lib/Support/IsNAN.cpp +++ b/llvm/lib/Support/IsNAN.cpp @@ -12,6 +12,8 @@ //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" +#include "llvm/System/IncludeFile.h" + #if HAVE_ISNAN_IN_MATH_H # include <math.h> #elif HAVE_ISNAN_IN_CMATH @@ -32,3 +34,5 @@ int IsNAN (float f) { return isnan (f); } int IsNAN (double d) { return isnan (d); } } // end namespace llvm; + +DEFINING_FILE_FOR(SupportIsNAN) diff --git a/llvm/lib/Support/SlowOperationInformer.cpp b/llvm/lib/Support/SlowOperationInformer.cpp index bfdfe8808f46..c5f271870118 100644 --- a/llvm/lib/Support/SlowOperationInformer.cpp +++ b/llvm/lib/Support/SlowOperationInformer.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/SlowOperationInformer.h" +#include "llvm/System/IncludeFile.h" #include "llvm/System/Alarm.h" #include <iostream> #include <sstream> @@ -64,3 +65,5 @@ bool SlowOperationInformer::progress(unsigned Amount) { std::cout << ToPrint+OS.str() << std::flush; return false; } + +DEFINING_FILE_FOR(SupportSlowOperationInformer) diff --git a/llvm/lib/System/IncludeFile.cpp b/llvm/lib/System/IncludeFile.cpp index d4729176f417..2ba9595ea18b 100644 --- a/llvm/lib/System/IncludeFile.cpp +++ b/llvm/lib/System/IncludeFile.cpp @@ -1,4 +1,4 @@ -//===- lib/Support/IncludeFile.cpp - Ensure Linking Of Implementation -----===// +//===- lib/System/IncludeFile.cpp - Ensure Linking Of Implementation -----===// // // The LLVM Compiler Infrastructure // @@ -11,10 +11,10 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Support/IncludeFile.h" +#include "llvm/System/IncludeFile.h" using namespace llvm; // This constructor is used to ensure linking of other modules. See the -// llvm/Support/IncludeFile.h header for details. +// llvm/System/IncludeFile.h header for details. IncludeFile::IncludeFile(void*) {} diff --git a/llvm/lib/System/Memory.cpp b/llvm/lib/System/Memory.cpp index e951e3c26a16..3788abef08af 100644 --- a/llvm/lib/System/Memory.cpp +++ b/llvm/lib/System/Memory.cpp @@ -14,6 +14,7 @@ #include "llvm/System/Memory.h" #include "llvm/Config/config.h" +#include "llvm/System/IncludeFile.h" namespace llvm { using namespace sys; @@ -33,3 +34,4 @@ using namespace sys; #include "Win32/Memory.inc" #endif +DEFINING_FILE_FOR(SystemMemory) diff --git a/llvm/lib/System/Mutex.cpp b/llvm/lib/System/Mutex.cpp index abcf77e67511..44e3332d1791 100644 --- a/llvm/lib/System/Mutex.cpp +++ b/llvm/lib/System/Mutex.cpp @@ -13,6 +13,7 @@ #include "llvm/Config/config.h" #include "llvm/System/Mutex.h" +#include "llvm/System/IncludeFile.h" //===----------------------------------------------------------------------===// //=== WARNING: Implementation here must contain only TRULY operating system @@ -157,3 +158,5 @@ Mutex::tryacquire() #warning Neither LLVM_ON_UNIX nor LLVM_ON_WIN32 was set in System/Mutex.cpp #endif #endif + +DEFINING_FILE_FOR(SystemMutex) diff --git a/llvm/lib/VMCore/Verifier.cpp b/llvm/lib/VMCore/Verifier.cpp index 635f5a25edf8..3dac3f1a74fa 100644 --- a/llvm/lib/VMCore/Verifier.cpp +++ b/llvm/lib/VMCore/Verifier.cpp @@ -105,7 +105,7 @@ namespace { // Anonymous namespace for class // returning back to the pass manager, or else the pass manager may try to // run other passes on the broken module. if (RealPass) - abortIfBroken(); + return abortIfBroken(); return false; } @@ -119,7 +119,7 @@ namespace { // Anonymous namespace for class // returning back to the pass manager, or else the pass manager may try to // run other passes on the broken module. if (RealPass) - abortIfBroken(); + return abortIfBroken(); return false; } @@ -138,8 +138,7 @@ namespace { // Anonymous namespace for class visitGlobalVariable(*I); // If the module is broken, abort at this time. - abortIfBroken(); - return false; + return abortIfBroken(); } virtual void getAnalysisUsage(AnalysisUsage &AU) const { @@ -151,7 +150,7 @@ namespace { // Anonymous namespace for class /// abortIfBroken - If the module is broken and we are supposed to abort on /// this condition, do so. /// - void abortIfBroken() { + bool abortIfBroken() { if (Broken) { msgs << "Broken module found, "; switch (action) { @@ -162,11 +161,13 @@ namespace { // Anonymous namespace for class case PrintMessageAction: msgs << "verification continues.\n"; std::cerr << msgs.str(); - break; + return false; case ReturnStatusAction: - break; + msgs << "compilation terminated.\n"; + return Broken; } } + return false; } |