[PATCH v1 1/1] bfd: add a mean to programatically detect a release version
Matthieu Longo
matthieu.longo@arm.com
Thu Aug 14 15:16:29 GMT 2025
In a recent discussion around Object Attributes v2, it appeared that we
needed a way to detect whether a tool was built as a release version,
or development version.
A previous patch (7b40f4c6587c) introduced this detection in gas.
This patch reuses the same principle but moved the code into a utility
function in bsd, so that gas, ld, and others can rely on it. It also
adds a Tcl function 'is_release' that can be used with a '#target: '
directive to disable some tests relying on development-only features.
---
bfd/bfd-in.h | 2 ++
bfd/bfd-in2.h | 2 ++
bfd/bfd.c | 9 +++++++++
binutils/testsuite/lib/binutils-common.exp | 13 +++++++++++++
gas/as.c | 2 +-
5 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index df5568e9639..ad126644845 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -159,3 +159,5 @@ startswith (const char *str, const char *prefix)
return strncmp (str, prefix, strlen (prefix)) == 0;
}
+extern bool
+is_release_version (void);
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 12512a3962c..3ce4bad278d 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -166,6 +166,8 @@ startswith (const char *str, const char *prefix)
return strncmp (str, prefix, strlen (prefix)) == 0;
}
+extern bool
+is_release_version (void);
/* Extracted from libbfd.c. */
void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
diff --git a/bfd/bfd.c b/bfd/bfd.c
index 4aded6809bb..aaa04cdeba9 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -3103,3 +3103,12 @@ bfd_group_signature (asection *group, asymbol **isympp)
}
return NULL;
}
+
+/* Return True if the current tool artifact is a development version or a
+ release version. */
+
+bool
+is_release_version ()
+{
+ return strstr (BFD_VERSION_STRING, "." XSTRING (BFD_VERSION_DATE)) == NULL;
+}
diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp
index 2ee859aa3eb..435d2108378 100644
--- a/binutils/testsuite/lib/binutils-common.exp
+++ b/binutils/testsuite/lib/binutils-common.exp
@@ -17,6 +17,19 @@
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
+# True if the current tool is a release version.
+#
+proc is_release {} {
+ global AS
+ catch "exec $AS --version | head -1" exec_output
+ if [regexp {\d+\.\d+\.\d+(\.\d+)} $exec_output matched sub1] then {
+ if {$sub1 eq ""} {
+ return 1
+ }
+ }
+ return 0
+}
+
# True if the object format is known to be ELF.
#
proc is_elf_format {} {
diff --git a/gas/as.c b/gas/as.c
index 58ed0a59e21..4e8f6a4aa02 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -1243,7 +1243,7 @@ perform_an_assembly_pass (int argc, char ** argv)
#endif
predefine_symbol ("version", BFD_VERSION);
- if (strstr (BFD_VERSION_STRING, "." XSTRING (BFD_VERSION_DATE)) != NULL)
+ if (!is_release_version ())
predefine_symbol ("date", BFD_VERSION_DATE);
/* This may add symbol table entries, which requires having an open BFD,
--
2.50.1
More information about the Binutils
mailing list