summaryrefslogtreecommitdiff
path: root/linker/linker_globals.h
diff options
context:
space:
mode:
Diffstat (limited to 'linker/linker_globals.h')
-rw-r--r--linker/linker_globals.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/linker/linker_globals.h b/linker/linker_globals.h
index d8134afc4..11ccbd54a 100644
--- a/linker/linker_globals.h
+++ b/linker/linker_globals.h
@@ -32,6 +32,7 @@
#include <link.h>
#include <stddef.h>
+#include <string>
#include <unordered_map>
#include <async_safe/log.h>
@@ -39,7 +40,6 @@
#define DL_ERR(fmt, x...) \
do { \
async_safe_format_buffer(linker_get_error_buffer(), linker_get_error_buffer_size(), fmt, ##x); \
- /* If LD_DEBUG is set high enough, log every dlerror(3) message. */ \
} while (false)
#define DL_WARN(fmt, x...) \
@@ -75,4 +75,16 @@ extern std::unordered_map<uintptr_t, soinfo*> g_soinfo_handles_map;
char* linker_get_error_buffer();
size_t linker_get_error_buffer_size();
+class DlErrorRestorer {
+ public:
+ DlErrorRestorer() {
+ saved_error_msg_ = linker_get_error_buffer();
+ }
+ ~DlErrorRestorer() {
+ strlcpy(linker_get_error_buffer(), saved_error_msg_.c_str(), linker_get_error_buffer_size());
+ }
+ private:
+ std::string saved_error_msg_;
+};
+
#endif /* __LINKER_GLOBALS_H */