//===- System.inc ---------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include #include #include #include #include #include #include #include #include namespace mcld { namespace sys { char* strerror(int errnum) { return std::strerror(errnum); } static std::string getOSVersion() { struct utsname info; if (uname(&info)) return ""; return info.release; } std::string getDefaultTargetTriple() { llvm::StringRef TargetTripleString(MCLD_DEFAULT_TARGET_TRIPLE); std::pair ArchSplit = TargetTripleString.split('-'); // Normalize the arch, since the target triple may not actually match the // target. std::string Arch = ArchSplit.first; std::string Triple(Arch); Triple += '-'; Triple += ArchSplit.second; // Force i86 to i386. if (Triple[0] == 'i' && isdigit(Triple[1]) && Triple[2] == '8' && Triple[3] == '6') Triple[1] = '3'; // On darwin, we want to update the version to match that of the // target. std::string::size_type DarwinDashIdx = Triple.find("-darwin"); if (DarwinDashIdx != std::string::npos) { Triple.resize(DarwinDashIdx + strlen("-darwin")); Triple += getOSVersion(); } return Triple; } int GetPageSize() { return getpagesize(); } /// random - generate a random number. long GetRandomNum() { return ::random(); } /// srandom - set the initial seed value for future calls to random(). void SetRandomSeed(unsigned pSeed) { ::srandom(pSeed); } } // namespace sys } // namespace mcld