[RFC][PATCH v5 6/6] Implement and document -z unique / -z nounique handling in gold
Vivek Das Mohapatra
vivek@collabora.com
Fri Jul 10 16:01:33 GMT 2020
---
gold/ChangeLog | 6 ++++++
gold/layout.cc | 6 ++++++
gold/options.h | 3 +++
3 files changed, 15 insertions(+)
diff --git a/gold/ChangeLog b/gold/ChangeLog
index f7520ba3cd..2a85fb78d1 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2020-07-10 Vivek Das Mohapatra <vivek@collabora.com>
+
+ Implement -z unique / -z nounique options.
+ * layout.cc (Layout::finish_dynamic_section): Set DF_GNU_1_UNIQUE.
+ * options.h (class General_options): Handle -z unique, -z nounique.
+
2020-07-08 Nick Clifton <nickc@redhat.com>
* testsuite/script_test_7.sh: Adjust expected address of the .bss
diff --git a/gold/layout.cc b/gold/layout.cc
index 13e533aaf2..9c4fc0d22d 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -5358,6 +5358,12 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
flags |= elfcpp::DF_1_PIE;
if (flags != 0)
odyn->add_constant(elfcpp::DT_FLAGS_1, flags);
+
+ flags = 0;
+ if (parameters->options().unique())
+ flags |= elfcpp::DF_GNU_1_UNIQUE;
+ if (flags != 0)
+ odyn->add_constant(elfcpp::DT_GNU_FLAGS_1, flags);
}
// Set the size of the _DYNAMIC symbol table to be the size of the
diff --git a/gold/options.h b/gold/options.h
index 3c8d25a662..8902b94a84 100644
--- a/gold/options.h
+++ b/gold/options.h
@@ -1463,6 +1463,9 @@ class General_options
DEFINE_bool(interpose, options::DASH_Z, '\0', false,
N_("Mark object to interpose all DSOs but executable"),
NULL);
+ DEFINE_bool(unique, options::DASH_Z, '\0', false,
+ N_("Mark DSO to be loaded at most once, and only in the main namespace"),
+ N_("Do not mark the DSO as one to be loaded only in the main namespace"));
DEFINE_bool_alias(lazy, now, options::DASH_Z, '\0',
N_("Mark object for lazy runtime binding"),
NULL, true);
--
2.11.0
More information about the Binutils
mailing list