summaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2023-12-31 14:09:10 +1030
committerAlan Modra <amodra@gmail.com>2024-01-05 13:00:11 +1030
commitc217aed574216e6af34188ac8a9bf019539e415d (patch)
tree5a8868ab22ddea0b6427bf585f1041832370da3e /ld
parent6a95962e258f9ef06050f11c049771a865250c6f (diff)
PR31120, ld-scripts/fill2 fails when bfd_vma is 32 bits
The ld lexer converts strings to integers without overflow checking, so I don't think there is any problem in truncating an integer that exceeds the size of a bfd_vma rather than using (bfd_vma) -1. PR 31120 * ldlex.l: Don't use bfd_scan_vma for integer conversion, use strtoull.
Diffstat (limited to 'ld')
-rw-r--r--ld/ldlex.l7
1 files changed, 3 insertions, 4 deletions
diff --git a/ld/ldlex.l b/ld/ldlex.l
index 5a771b481cc..e113c90812b 100644
--- a/ld/ldlex.l
+++ b/ld/ldlex.l
@@ -133,7 +133,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
comment (); }
<MRI,EXPRESSION>"$"([0-9A-Fa-f])+ {
- yylval.integer = bfd_scan_vma (yytext + 1, 0, 16);
+ yylval.integer = strtoull (yytext + 1, 0, 16);
yylval.bigint.str = NULL;
return INT;
}
@@ -158,8 +158,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
default:
ibase = 10;
}
- yylval.integer = bfd_scan_vma (yytext, 0,
- ibase);
+ yylval.integer = strtoull (yytext, 0, ibase);
yylval.bigint.str = NULL;
return INT;
}
@@ -172,7 +171,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
++s;
ibase = 16;
}
- yylval.integer = bfd_scan_vma (s, 0, ibase);
+ yylval.integer = strtoull (s, 0, ibase);
yylval.bigint.str = NULL;
if (yytext[yyleng - 1] == 'M'
|| yytext[yyleng - 1] == 'm')