[PATCH v2 1/6] ld:TIMESTAMP: ldlex.l

binutils@emagii.com binutils@emagii.com
Tue Oct 14 16:49:43 GMT 2025


From: Ulf Samuelsson <ulf@emagii.com>

Add TIMESTAMP to linker.

The TIMESTAMP keyword returns a QUAD-word entry with the current time.
The value is the number of seconds since the Epoch,
1970-01-01 00:00:00 +0000 (UTC)

Signed-off-by: Ulf Samuelsson <ulf@emagii.com>
---
 ld/ldlex.l | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/ld/ldlex.l b/ld/ldlex.l
index a7bf4917642..36d06eaa069 100644
--- a/ld/ldlex.l
+++ b/ld/ldlex.l
@@ -73,7 +73,7 @@ static int vers_node_nesting = 0;
 static int yy_input (char *, int);
 static void comment (void);
 static void lex_warn_invalid (char *where, char *what);
-
+static bfd_vma timestamp = 0;
 /* STATES
 	EXPRESSION	in an expression
 	SCRIPT		in a script
@@ -139,6 +139,15 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
 				return INT;
 			}
 
+<MRI,EXPRESSION>"TIMESTAMP" {
+				if(timestamp == 0) {
+				  timestamp = (bfd_vma) bfd_get_current_time (0);
+				}
+				yylval.integer = timestamp;
+				yylval.bigint.str = NULL;
+				return TIMESTAMP;
+			}
+
 <MRI,EXPRESSION>((([0-9A-Fa-f])+(H|h|X|x))|(([0-1])+(B|b))|(([0-7])+(O|o))|(([0-9])+(D|d))) {
 				   int ibase ;
 				   switch (yytext[yyleng - 1]) {
@@ -276,6 +285,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
 <SCRIPT,EXPRESSION>"MAX"		{ RTOKEN(MAX_K); }
 <SCRIPT,EXPRESSION>"MIN"		{ RTOKEN(MIN_K); }
 <SCRIPT,EXPRESSION>"LOG2CEIL"		{ RTOKEN(LOG2CEIL); }
+<SCRIPT,EXPRESSION>"TIMESTAMP"		{ RTOKEN(TIMESTAMP); }
 <SCRIPT,EXPRESSION,WILD>"ASSERT"	{ RTOKEN(ASSERT_K); }
 <SCRIPT>"ENTRY"				{ RTOKEN(ENTRY); }
 <SCRIPT,MRI>"EXTERN"			{ RTOKEN(EXTERN); }
-- 
2.17.1



More information about the Binutils mailing list