diff options
author | Alan Modra <amodra@gmail.com> | 2023-12-31 14:09:10 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2024-01-05 13:00:11 +1030 |
commit | c217aed574216e6af34188ac8a9bf019539e415d (patch) | |
tree | 5a8868ab22ddea0b6427bf585f1041832370da3e /ld | |
parent | 6a95962e258f9ef06050f11c049771a865250c6f (diff) | |
download | gdb-c217aed574216e6af34188ac8a9bf019539e415d.zip gdb-c217aed574216e6af34188ac8a9bf019539e415d.tar.gz gdb-c217aed574216e6af34188ac8a9bf019539e415d.tar.bz2 |
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.l | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -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') |