1 //===- System.inc ---------------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #include <llvm/ADT/StringRef.h> 10 11 #include <fcntl.h> 12 #include <cstdlib> 13 #include <cstring> 14 #include <ctype.h> 15 #include <sys/types.h> 16 #include <sys/stat.h> 17 #include <sys/utsname.h> 18 #include <unistd.h> 19 20 namespace mcld { 21 namespace sys { 22 23 char* strerror(int errnum) { 24 return std::strerror(errnum); 25 } 26 27 static std::string getOSVersion() { 28 struct utsname info; 29 30 if (uname(&info)) 31 return ""; 32 33 return info.release; 34 } 35 36 std::string getDefaultTargetTriple() { 37 llvm::StringRef TargetTripleString(MCLD_DEFAULT_TARGET_TRIPLE); 38 std::pair<llvm::StringRef, llvm::StringRef> ArchSplit = 39 TargetTripleString.split('-'); 40 41 // Normalize the arch, since the target triple may not actually match the 42 // target. 43 std::string Arch = ArchSplit.first; 44 45 std::string Triple(Arch); 46 Triple += '-'; 47 Triple += ArchSplit.second; 48 49 // Force i<N>86 to i386. 50 if (Triple[0] == 'i' && isdigit(Triple[1]) && Triple[2] == '8' && 51 Triple[3] == '6') 52 Triple[1] = '3'; 53 54 // On darwin, we want to update the version to match that of the 55 // target. 56 std::string::size_type DarwinDashIdx = Triple.find("-darwin"); 57 if (DarwinDashIdx != std::string::npos) { 58 Triple.resize(DarwinDashIdx + strlen("-darwin")); 59 Triple += getOSVersion(); 60 } 61 62 return Triple; 63 } 64 65 int GetPageSize() { 66 return getpagesize(); 67 } 68 69 /// random - generate a random number. 70 long GetRandomNum() { 71 return ::random(); 72 } 73 74 /// srandom - set the initial seed value for future calls to random(). 75 void SetRandomSeed(unsigned pSeed) { 76 ::srandom(pSeed); 77 } 78 79 } // namespace sys 80 } // namespace mcld 81