mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 03:29:47 +08:00
x86-64: have value properly checked when resolving fixup
Constants not known at the time an individual insn gets assembled and going into a sign-extended field still shouldn't be silently truncated at the time the respective fixup gets resolved.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2021-04-26 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
* config/tc-i386.c (md_apply_fix): Mark BFD_RELOC_X86_64_32S as
|
||||||
|
signed.
|
||||||
|
* testsuite/gas/i386/x86-64-addr32-bad.s,
|
||||||
|
testsuite/gas/i386/x86-64-addr32-bad.l: New.
|
||||||
|
* testsuite/gas/i386/i386.exp: Run new test.
|
||||||
|
|
||||||
2021-04-23 Eric Botcazou<ebotcazou@adacore.com>
|
2021-04-23 Eric Botcazou<ebotcazou@adacore.com>
|
||||||
|
|
||||||
* testsuite/gas/elf/section25.d: Run it everywhere.
|
* testsuite/gas/elf/section25.d: Run it everywhere.
|
||||||
|
@ -12576,7 +12576,18 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
/* Are we finished with this relocation now? */
|
/* Are we finished with this relocation now? */
|
||||||
if (fixP->fx_addsy == NULL)
|
if (fixP->fx_addsy == NULL)
|
||||||
fixP->fx_done = 1;
|
{
|
||||||
|
fixP->fx_done = 1;
|
||||||
|
switch (fixP->fx_r_type)
|
||||||
|
{
|
||||||
|
case BFD_RELOC_X86_64_32S:
|
||||||
|
fixP->fx_signed = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
#if defined (OBJ_COFF) && defined (TE_PE)
|
#if defined (OBJ_COFF) && defined (TE_PE)
|
||||||
else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
|
else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
|
||||||
{
|
{
|
||||||
|
@ -750,6 +750,7 @@ if [gas_64_check] then {
|
|||||||
run_dump_test "x86_64-intel"
|
run_dump_test "x86_64-intel"
|
||||||
run_dump_test "x86-64-addr32"
|
run_dump_test "x86-64-addr32"
|
||||||
run_dump_test "x86-64-addr32-intel"
|
run_dump_test "x86-64-addr32-intel"
|
||||||
|
run_list_test "x86-64-addr32-bad" "-al"
|
||||||
run_dump_test "x86-64-opcode"
|
run_dump_test "x86-64-opcode"
|
||||||
run_dump_test "x86-64-intel64"
|
run_dump_test "x86-64-intel64"
|
||||||
if { ! [istarget "*-*-*cygwin*"] && ![istarget "*-*-mingw*"] } then {
|
if { ! [istarget "*-*-*cygwin*"] && ![istarget "*-*-mingw*"] } then {
|
||||||
|
29
gas/testsuite/gas/i386/x86-64-addr32-bad.l
Normal file
29
gas/testsuite/gas/i386/x86-64-addr32-bad.l
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*:3: Error:.* [0x]*88888888 .*
|
||||||
|
.*:7: Error:.* [0x]*99999999 .*
|
||||||
|
.*:11: Error:.* [0x]*99999999 .*
|
||||||
|
GAS LISTING .*
|
||||||
|
|
||||||
|
|
||||||
|
[ ]*[0-9]+[ ]+\.text
|
||||||
|
[ ]*[0-9]+[ ]+addr32:
|
||||||
|
[ ]*[0-9]+[ ]+lea 0x88888888\(%rax\), %rax
|
||||||
|
[ ]*[0-9]+[ ]+\?\?\?\? 8D808888[ ]+lea 0x88888888\(%rax\), %eax
|
||||||
|
[ ]*[0-9]+[ ]+8888
|
||||||
|
[ ]*[0-9]+[ ]+\?\?\?\? 67488D80[ ]+lea 0x88888888\(%eax\), %rax
|
||||||
|
[ ]*[0-9]+[ ]+88888888 *
|
||||||
|
[ ]*[0-9]+[ ]*
|
||||||
|
[ ]*[0-9]+[ ]+\?\?\?\? 488D8099[ ]+lea value\(%rax\), %rax
|
||||||
|
[ ]*[0-9]+[ ]+999999
|
||||||
|
[ ]*[0-9]+[ ]+\?\?\?\? 8D809999[ ]+lea value\(%rax\), %eax
|
||||||
|
[ ]*[0-9]+[ ]+9999
|
||||||
|
[ ]*[0-9]+[ ]+\?\?\?\? 67488D80[ ]+lea value\(%eax\), %rax
|
||||||
|
[ ]*[0-9]+[ ]+99999999 *
|
||||||
|
[ ]*[0-9]+[ ]*
|
||||||
|
[ ]*[0-9]+[ ]+\?\?\?\? 48C7C099[ ]+mov \$value, %rax
|
||||||
|
[ ]*[0-9]+[ ]+999999
|
||||||
|
[ ]*[0-9]+[ ]+\?\?\?\? B8999999[ ]+mov \$value, %eax
|
||||||
|
[ ]*[0-9]+[ ]+99
|
||||||
|
[ ]*[0-9]+[ ]*
|
||||||
|
[ ]*[0-9]+[ ]+\.equ value, 0x99999999
|
||||||
|
#pass
|
15
gas/testsuite/gas/i386/x86-64-addr32-bad.s
Normal file
15
gas/testsuite/gas/i386/x86-64-addr32-bad.s
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
.text
|
||||||
|
addr32:
|
||||||
|
lea 0x88888888(%rax), %rax
|
||||||
|
lea 0x88888888(%rax), %eax
|
||||||
|
lea 0x88888888(%eax), %rax
|
||||||
|
|
||||||
|
lea value(%rax), %rax
|
||||||
|
lea value(%rax), %eax
|
||||||
|
lea value(%eax), %rax
|
||||||
|
|
||||||
|
mov $value, %rax
|
||||||
|
mov $value, %eax
|
||||||
|
|
||||||
|
.equ value, 0x99999999
|
||||||
|
.end
|
Reference in New Issue
Block a user