[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