[lld] [NFC][LLD] Refactor some copy-paste into the Common library (PR #67598)
Matheus Izvekov via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 27 13:06:34 PDT 2023
https://github.com/mizvekov created https://github.com/llvm/llvm-project/pull/67598
None
>From 59be136d716280bddb68d91cf0b92973b8849cc7 Mon Sep 17 00:00:00 2001
From: Matheus Izvekov <mizvekov at gmail.com>
Date: Thu, 21 Sep 2023 17:13:50 +0200
Subject: [PATCH] [NFC][LLD] Refactor some copy-paste into the Common library
---
lld/COFF/LTO.cpp | 13 +------------
lld/Common/Filesystem.cpp | 26 ++++++++++++++++++++++++++
lld/ELF/LTO.cpp | 27 +--------------------------
lld/MachO/LTO.cpp | 14 +-------------
lld/include/lld/Common/Filesystem.h | 4 ++++
5 files changed, 33 insertions(+), 51 deletions(-)
diff --git a/lld/COFF/LTO.cpp b/lld/COFF/LTO.cpp
index c185da5370fa3dd..6ca000b466a1264 100644
--- a/lld/COFF/LTO.cpp
+++ b/lld/COFF/LTO.cpp
@@ -13,6 +13,7 @@
#include "Symbols.h"
#include "lld/Common/Args.h"
#include "lld/Common/CommonLinkerContext.h"
+#include "lld/Common/Filesystem.h"
#include "lld/Common/Strings.h"
#include "lld/Common/TargetOptionsCommandFlags.h"
#include "llvm/ADT/STLExtras.h"
@@ -42,18 +43,6 @@ using namespace llvm::object;
using namespace lld;
using namespace lld::coff;
-// Creates an empty file to and returns a raw_fd_ostream to write to it.
-static std::unique_ptr<raw_fd_ostream> openFile(StringRef file) {
- std::error_code ec;
- auto ret =
- std::make_unique<raw_fd_ostream>(file, ec, sys::fs::OpenFlags::OF_None);
- if (ec) {
- error("cannot open " + file + ": " + ec.message());
- return nullptr;
- }
- return ret;
-}
-
std::string BitcodeCompiler::getThinLTOOutputFile(StringRef path) {
return lto::getThinLTOOutputFile(path, ctx.config.thinLTOPrefixReplaceOld,
ctx.config.thinLTOPrefixReplaceNew);
diff --git a/lld/Common/Filesystem.cpp b/lld/Common/Filesystem.cpp
index c93353f2d292ce2..1fc19ef02788603 100644
--- a/lld/Common/Filesystem.cpp
+++ b/lld/Common/Filesystem.cpp
@@ -11,6 +11,7 @@
//===----------------------------------------------------------------------===//
#include "lld/Common/Filesystem.h"
+#include "lld/Common/ErrorHandler.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/Support/FileOutputBuffer.h"
#include "llvm/Support/FileSystem.h"
@@ -127,3 +128,28 @@ std::error_code lld::tryCreateFile(StringRef path) {
return std::error_code();
return errorToErrorCode(FileOutputBuffer::create(path, 1).takeError());
}
+
+// Creates an empty file to and returns a raw_fd_ostream to write to it.
+std::unique_ptr<raw_fd_ostream> lld::openFile(StringRef file) {
+ std::error_code ec;
+ auto ret =
+ std::make_unique<raw_fd_ostream>(file, ec, sys::fs::OpenFlags::OF_None);
+ if (ec) {
+ error("cannot open " + file + ": " + ec.message());
+ return nullptr;
+ }
+ return ret;
+}
+
+// The merged bitcode after LTO is large. Try opening a file stream that
+// supports reading, seeking and writing. Such a file allows BitcodeWriter to
+// flush buffered data to reduce memory consumption. If this fails, open a file
+// stream that supports only write.
+std::unique_ptr<raw_fd_ostream> lld::openLTOOutputFile(StringRef file) {
+ std::error_code ec;
+ std::unique_ptr<raw_fd_ostream> fs =
+ std::make_unique<raw_fd_stream>(file, ec);
+ if (!ec)
+ return fs;
+ return openFile(file);
+}
diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp
index eb8f8d7f829a6f0..504c12aac6c5696 100644
--- a/lld/ELF/LTO.cpp
+++ b/lld/ELF/LTO.cpp
@@ -13,6 +13,7 @@
#include "Symbols.h"
#include "lld/Common/Args.h"
#include "lld/Common/ErrorHandler.h"
+#include "lld/Common/Filesystem.h"
#include "lld/Common/Strings.h"
#include "lld/Common/TargetOptionsCommandFlags.h"
#include "llvm/ADT/SmallString.h"
@@ -40,32 +41,6 @@ using namespace llvm::ELF;
using namespace lld;
using namespace lld::elf;
-// Creates an empty file to store a list of object files for final
-// linking of distributed ThinLTO.
-static std::unique_ptr<raw_fd_ostream> openFile(StringRef file) {
- std::error_code ec;
- auto ret =
- std::make_unique<raw_fd_ostream>(file, ec, sys::fs::OpenFlags::OF_None);
- if (ec) {
- error("cannot open " + file + ": " + ec.message());
- return nullptr;
- }
- return ret;
-}
-
-// The merged bitcode after LTO is large. Try opening a file stream that
-// supports reading, seeking and writing. Such a file allows BitcodeWriter to
-// flush buffered data to reduce memory consumption. If this fails, open a file
-// stream that supports only write.
-static std::unique_ptr<raw_fd_ostream> openLTOOutputFile(StringRef file) {
- std::error_code ec;
- std::unique_ptr<raw_fd_ostream> fs =
- std::make_unique<raw_fd_stream>(file, ec);
- if (!ec)
- return fs;
- return openFile(file);
-}
-
static std::string getThinLTOOutputFile(StringRef modulePath) {
return lto::getThinLTOOutputFile(modulePath, config->thinLTOPrefixReplaceOld,
config->thinLTOPrefixReplaceNew);
diff --git a/lld/MachO/LTO.cpp b/lld/MachO/LTO.cpp
index a5b0f4d3d2a746d..7a9a9223a03227f 100644
--- a/lld/MachO/LTO.cpp
+++ b/lld/MachO/LTO.cpp
@@ -15,6 +15,7 @@
#include "lld/Common/Args.h"
#include "lld/Common/CommonLinkerContext.h"
+#include "lld/Common/Filesystem.h"
#include "lld/Common/Strings.h"
#include "lld/Common/TargetOptionsCommandFlags.h"
#include "llvm/Bitcode/BitcodeWriter.h"
@@ -32,19 +33,6 @@ using namespace llvm;
using namespace llvm::MachO;
using namespace llvm::sys;
-// Creates an empty file to store a list of object files for final
-// linking of distributed ThinLTO.
-static std::unique_ptr<raw_fd_ostream> openFile(StringRef file) {
- std::error_code ec;
- auto ret =
- std::make_unique<raw_fd_ostream>(file, ec, sys::fs::OpenFlags::OF_None);
- if (ec) {
- error("cannot open " + file + ": " + ec.message());
- return nullptr;
- }
- return ret;
-}
-
static std::string getThinLTOOutputFile(StringRef modulePath) {
return lto::getThinLTOOutputFile(modulePath, config->thinLTOPrefixReplaceOld,
config->thinLTOPrefixReplaceNew);
diff --git a/lld/include/lld/Common/Filesystem.h b/lld/include/lld/Common/Filesystem.h
index 63a0f554a06c57f..61b32eec2ee7d7d 100644
--- a/lld/include/lld/Common/Filesystem.h
+++ b/lld/include/lld/Common/Filesystem.h
@@ -10,11 +10,15 @@
#define LLD_FILESYSTEM_H
#include "lld/Common/LLVM.h"
+#include "llvm/Support/raw_ostream.h"
+#include <memory>
#include <system_error>
namespace lld {
void unlinkAsync(StringRef path);
std::error_code tryCreateFile(StringRef path);
+std::unique_ptr<llvm::raw_fd_ostream> openFile(StringRef file);
+std::unique_ptr<llvm::raw_fd_ostream> openLTOOutputFile(StringRef file);
} // namespace lld
#endif
More information about the llvm-commits
mailing list