xtensa: fix signedness of gas relocations

Change 1058c7532d "Use signed data type for R_XTENSA_DIFF* relocation
offsets." changed signedness of BFD_RELOC_XTENSA_DIFF* relocations
substituted for BFD_RELOC_*. This made it impossible to encode arbitrary
8-, 16- and 32-bit values, which broke e.g. debug info encoding by .loc
directive. Revert this part and add test.

gas/
2016-02-03  Max Filippov  <jcmvbkbc@gmail.com>
	* config/tc-xtensa.c (md_apply_fix): Mark BFD_RELOC_XTENSA_DIFF*
	substitutions for BFD_RELOC_* as unsigned.
	* gas/testsuite/gas/xtensa/all.exp: Add loc to list of xtensa
	tests.
	* gas/testsuite/gas/xtensa/loc.d: New file: loc test result
	patterns.
	* gas/testsuite/gas/xtensa/loc.s: New file: loc test.
This commit is contained in:
Max Filippov 2016-02-02 17:11:38 +03:00
parent 0cb4071ef9
commit ea173078d2
5 changed files with 31 additions and 3 deletions

View File

@ -1,3 +1,13 @@
2016-02-03 Max Filippov <jcmvbkbc@gmail.com>
* config/tc-xtensa.c (md_apply_fix): Mark BFD_RELOC_XTENSA_DIFF*
substitutions for BFD_RELOC_* as unsigned.
* gas/testsuite/gas/xtensa/all.exp: Add loc to list of xtensa
tests.
* gas/testsuite/gas/xtensa/loc.d: New file: loc test result
patterns.
* gas/testsuite/gas/xtensa/loc.s: New file: loc test.
2016-02-03 Kevin Buettner <kevinb@redhat.com>
* config/tc-msp430.h (DWARF2_ADDR_SIZE): Set to 4.

View File

@ -5961,15 +5961,15 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)
{
case BFD_RELOC_8:
fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF8;
fixP->fx_signed = 1;
fixP->fx_signed = 0;
break;
case BFD_RELOC_16:
fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF16;
fixP->fx_signed = 1;
fixP->fx_signed = 0;
break;
case BFD_RELOC_32:
fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF32;
fixP->fx_signed = 1;
fixP->fx_signed = 0;
break;
default:
break;

View File

@ -101,6 +101,7 @@ if [istarget xtensa*-*-*] then {
run_dump_test "trampoline"
run_dump_test "first_frag_align"
run_dump_test "auto-litpools"
run_dump_test "loc"
}
if [info exists errorInfo] then {

View File

@ -0,0 +1,10 @@
#as:
#objdump: -r
#name: .loc directive relocs
.*: +file format .*xtensa.*
RELOCATION RECORDS FOR \[\.debug_line\]:
#...
.*R_XTENSA_DIFF16.*\.text\+0x00009c42
#...

View File

@ -0,0 +1,7 @@
.text
.file 1 "loc.s"
.loc 1 3
nop
.space 40000
.loc 1 5
nop