From: Alan Modra Date: Sun, 31 Dec 2023 03:39:10 +0000 (+1030) Subject: PR31120, ld-scripts/fill2 fails when bfd_vma is 32 bits X-Git-Tag: binutils-2_42~252 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c217aed574216e6af34188ac8a9bf019539e415d;p=thirdparty%2Fbinutils-gdb.git 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. --- 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 (); } "$"([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')