llvm/lib/Support
Rafael Espindola bb7c983c5a Drop an unnecessary use of writev.
It looks like the code this patch deletes is based on a misunderstanding of
what guarantees writev provides. In particular, writev with 1 iovec is
not "more atomic" than a write.

Testing on OS X shows that both write and writev from multiple processes
can be intermixed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255837 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-16 22:59:06 +00:00
..
Unix [SectionMemoryManager] Make better use of virtual memory 2015-12-16 11:13:23 +00:00
Windows [Windows] Partially revert r254363 until I can test the right fix. 2015-12-01 05:33:24 +00:00
Allocator.cpp
APFloat.cpp Add isInteger() to APFloat. 2015-11-16 21:52:48 +00:00
APInt.cpp
APSInt.cpp
ARMBuildAttrs.cpp
ARMWinEH.cpp
Atomic.cpp
BlockFrequency.cpp Add - and -= operators to BlockFrequency using saturating arithmetic. 2015-10-12 18:34:00 +00:00
BranchProbability.cpp Replace all weight-based interfaces in MBB with probability-based interfaces, and update all uses of old interfaces. 2015-12-01 05:29:22 +00:00
circular_raw_ostream.cpp
CMakeLists.txt Add a C++11 ThreadPool implementation in LLVM 2015-12-15 00:59:19 +00:00
COM.cpp
CommandLine.cpp StringRef-ify some Option APIs 2015-11-17 19:00:52 +00:00
Compression.cpp
ConvertUTF.c
ConvertUTFWrapper.cpp
COPYRIGHT.regex
CrashRecoveryContext.cpp Use array_lengthof. NFC 2015-10-18 05:15:38 +00:00
DAGDeltaAlgorithm.cpp
DataExtractor.cpp
DataStream.cpp
Debug.cpp
DeltaAlgorithm.cpp
Dwarf.cpp Macro debug info support in LLVM IR 2015-12-10 12:56:35 +00:00
DynamicLibrary.cpp
Errno.cpp
ErrorHandling.cpp
FileOutputBuffer.cpp
FileUtilities.cpp
FoldingSet.cpp
FormattedStream.cpp
GraphWriter.cpp
Hashing.cpp
Host.cpp [x86] adding PKU feature flag 2015-12-15 13:35:29 +00:00
IntEqClasses.cpp
IntervalMap.cpp
IntrusiveRefCntPtr.cpp
JamCRC.cpp
LEB128.cpp
LineIterator.cpp
LLVMBuild.txt
Locale.cpp
LockFileManager.cpp
Makefile
ManagedStatic.cpp
MathExtras.cpp
MD5.cpp
Memory.cpp
MemoryBuffer.cpp [llvm-pdbdump] Provide a mechanism to dump the raw contents of a PDB 2015-10-15 01:27:19 +00:00
MemoryObject.cpp
Mutex.cpp
Options.cpp
Path.cpp Moving FileManager::removeDotPaths to llvm::sys::path::remove_dots 2015-11-09 18:56:31 +00:00
PluginLoader.cpp
PrettyStackTrace.cpp
Process.cpp
Program.cpp
RandomNumberGenerator.cpp
raw_os_ostream.cpp
raw_ostream.cpp Drop an unnecessary use of writev. 2015-12-16 22:59:06 +00:00
README.txt.system
regcclass.h
regcname.h
regcomp.c
regengine.inc
regerror.c
regex2.h
regex_impl.h
Regex.cpp
regexec.c
regfree.c
regstrlcpy.c
regutils.h
RWMutex.cpp
ScaledNumber.cpp
SearchForAddressOfSpecialSymbol.cpp
Signals.cpp Appease hosts without HAVE_BACKTRACE nor ENABLE_BACKTRACES. 2015-11-08 09:45:06 +00:00
SmallPtrSet.cpp
SmallVector.cpp
SourceMgr.cpp
SpecialCaseList.cpp
Statistic.cpp Simplify memory management with std::unique_ptr. 2015-12-16 22:28:34 +00:00
StreamingMemoryObject.cpp
StringExtras.cpp
StringMap.cpp
StringPool.cpp
StringRef.cpp
StringSaver.cpp
SystemUtils.cpp
TargetParser.cpp Reordering fields to reduce padding in LLVM. NFC 2015-12-14 21:57:05 +00:00
TargetRegistry.cpp
Threading.cpp
ThreadLocal.cpp
ThreadPool.cpp Fix MSVC build with LLVM_ENABLE_THREADS=OFF 2015-12-15 05:53:41 +00:00
Timer.cpp Simplify memory management with std::unique_ptr. 2015-12-16 22:28:34 +00:00
TimeValue.cpp Fix some Clang-tidy modernize warnings, other minor fixes. 2015-11-04 22:32:32 +00:00
ToolOutputFile.cpp
Triple.cpp [ARM] Add ARMv8.2-A to TargetParser 2015-12-01 10:33:56 +00:00
Twine.cpp
Unicode.cpp
Valgrind.cpp Add a missing include of cstddef needed for size_t. 2015-10-15 19:41:54 +00:00
Watchdog.cpp
YAMLParser.cpp Support: Stop relying on iterator auto-conversion, NFC 2015-10-08 22:47:55 +00:00
YAMLTraits.cpp

Design Of lib/System
====================

The software in this directory is designed to completely shield LLVM from any
and all operating system specific functionality. It is not intended to be a
complete operating system wrapper (such as ACE), but only to provide the
functionality necessary to support LLVM.

The software located here, of necessity, has very specific and stringent design
rules. Violation of these rules means that cracks in the shield could form and
the primary goal of the library is defeated. By consistently using this library,
LLVM becomes more easily ported to new platforms since the only thing requiring
porting is this library.

Complete documentation for the library can be found in the file:
  llvm/docs/SystemLibrary.html
or at this URL:
  http://llvm.org/docs/SystemLibrary.html

While we recommend that you read the more detailed documentation, for the
impatient, here's a high level summary of the library's requirements.

 1. No system header files are to be exposed through the interface.
 2. Std C++ and Std C header files are okay to be exposed through the interface.
 3. No exposed system-specific functions.
 4. No exposed system-specific data.
 5. Data in lib/System classes must use only simple C++ intrinsic types.
 6. Errors are handled by returning "true" and setting an optional std::string
 7. Library must not throw any exceptions, period.
 8. Interface functions must not have throw() specifications.
 9. No duplicate function impementations are permitted within an operating
    system class.

To accomplish these requirements, the library has numerous design criteria that
must be satisfied. Here's a high level summary of the library's design criteria:

 1. No unused functionality (only what LLVM needs)
 2. High-Level Interfaces
 3. Use Opaque Classes
 4. Common Implementations
 5. Multiple Implementations
 6. Minimize Memory Allocation
 7. No Virtual Methods