diff options
author | Jan Beulich <jbeulich@suse.com> | 2023-07-28 12:34:30 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2023-07-28 12:38:30 +0200 |
commit | 79426d96ab2843dd87690d4423043074e451ea5c (patch) | |
tree | 7c3c0ce592df958563c7783568bc394ed7585dd8 | |
parent | RISC-V: Add actual 'Zvkt' extension support (diff) | |
download | binutils-gdb-79426d96ab2843dd87690d4423043074e451ea5c.tar.gz binutils-gdb-79426d96ab2843dd87690d4423043074e451ea5c.tar.bz2 binutils-gdb-79426d96ab2843dd87690d4423043074e451ea5c.zip |
gas: amend X_unsigned uses
PR gas/30688
X_unsigned being clear does not indicate a negative number; it merely
indicates a signed one (whose sign may still be clear). Amend two uses
by an actual value check.
-rw-r--r-- | gas/read.c | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common3.s | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common3a.d | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common3b.d | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/elf.exp | 12 |
5 files changed, 37 insertions, 4 deletions
diff --git a/gas/read.c b/gas/read.c index 0cceca8a802..826156db3fe 100644 --- a/gas/read.c +++ b/gas/read.c @@ -1751,7 +1751,7 @@ s_comm_internal (int param, ignore_rest_of_line (); goto out; } - else if (temp != size || !exp.X_unsigned) + else if (temp != size || (!exp.X_unsigned && exp.X_add_number < 0)) { as_warn (_("size (%ld) out of range, ignored"), (long) temp); ignore_rest_of_line (); @@ -2541,7 +2541,7 @@ parse_align (int align_bytes) if (exp.X_op == O_absent) goto no_align; - if (!exp.X_unsigned) + if (!exp.X_unsigned && exp.X_add_number < 0) { as_warn (_("alignment negative; 0 assumed")); align = 0; diff --git a/gas/testsuite/gas/elf/common3.s b/gas/testsuite/gas/elf/common3.s index f684da48c4f..c2cf88ee421 100644 --- a/gas/testsuite/gas/elf/common3.s +++ b/gas/testsuite/gas/elf/common3.s @@ -1 +1,8 @@ .comm foobar,30,4 + .comm buf1, 5-1, 8 + .comm buf2, 4, 9-1 + .ifndef lcomm_align + .lcomm lbuf, 9-1 + .else + .lcomm lbuf, 9-1, 8 + .endif diff --git a/gas/testsuite/gas/elf/common3a.d b/gas/testsuite/gas/elf/common3a.d index fa9d5ceb395..f177b231d41 100644 --- a/gas/testsuite/gas/elf/common3a.d +++ b/gas/testsuite/gas/elf/common3a.d @@ -1,7 +1,16 @@ #source: common3.s #as: --elf-stt-common=yes #readelf: -s -W +# MIPS'es IRIX emulation puts lbuf (STB_LOCAL) after the globals in the +# symbol table, and that mode is hard to check for (see irixemul in +# binutils/testsuite/binutils-all/mips/mips.exp) +#notarget: mips*-*-* #... + +[0-9]+: +0+ +8 +(OBJECT|NOTYPE) +LOCAL +DEFAULT +[1-9] +lbuf +#... +[0-9]+: +0+4 +30 +COMMON +GLOBAL +DEFAULT +COM +foobar +#... + +[0-9]+: +0+8 +4 +COMMON +GLOBAL +DEFAULT +COM +buf1 + +[0-9]+: +0+8 +4 +COMMON +GLOBAL +DEFAULT +COM +buf2 #pass diff --git a/gas/testsuite/gas/elf/common3b.d b/gas/testsuite/gas/elf/common3b.d index 9481d134274..c9000abc413 100644 --- a/gas/testsuite/gas/elf/common3b.d +++ b/gas/testsuite/gas/elf/common3b.d @@ -1,7 +1,16 @@ #source: common3.s #as: --elf-stt-common=no #readelf: -s -W +# MIPS'es IRIX emulation puts lbuf (STB_LOCAL) after the globals in the +# symbol table, and that mode is hard to check for (see irixemul in +# binutils/testsuite/binutils-all/mips/mips.exp) +#notarget: mips*-*-* #... + +[0-9]+: +0+ +8 +(OBJECT|NOTYPE) +LOCAL +DEFAULT +[1-9] +lbuf +#... +[0-9]+: +0+4 +30 +OBJECT +GLOBAL +DEFAULT +COM +foobar +#... + +[0-9]+: +0+8 +4 +OBJECT +GLOBAL +DEFAULT +COM +buf1 + +[0-9]+: +0+8 +4 +OBJECT +GLOBAL +DEFAULT +COM +buf2 #pass diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index 4890dd93420..9e389ff1859 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -345,8 +345,16 @@ if { [is_elf_format] } then { # hpux has a non-standard common directive. if { ![istarget "*-*-hpux*"] } then { - run_dump_test "common3a" - run_dump_test "common3b" + switch -glob $target_triplet { + ia64-*-* { + run_dump_test "common3a" { { as "--defsym lcomm_align=1" } } + run_dump_test "common3b" { { as "--defsym lcomm_align=1" } } + } + default { + run_dump_test "common3a" + run_dump_test "common3b" + } + } run_dump_test "common4a" run_dump_test "common4b" run_dump_test "common5a" |