mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 04:00:07 +08:00
gas/
* config/tc-ppc.c (md_apply_fix): Handle defined after use toc symbols. gas/testsuite/ * gas/ppc/aix.exp: Run xcoff-toc-1 test. * gas/ppc/xcoff-toc-1.s, gas/ppc/xcoff-toc-1.d: New test.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2013-09-04 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
|
* config/tc-ppc.c (md_apply_fix): Handle defined after use toc
|
||||||
|
symbols.
|
||||||
|
|
||||||
2013-09-04 Roland McGrath <mcgrathr@google.com>
|
2013-09-04 Roland McGrath <mcgrathr@google.com>
|
||||||
|
|
||||||
PR gas/15914
|
PR gas/15914
|
||||||
|
@ -3146,6 +3146,7 @@ md_assemble (char *str)
|
|||||||
&& (operand->bitm & 0xfff0) == 0xfff0
|
&& (operand->bitm & 0xfff0) == 0xfff0
|
||||||
&& operand->shift == 0)
|
&& operand->shift == 0)
|
||||||
{
|
{
|
||||||
|
/* Note: the symbol may be not yet defined. */
|
||||||
if (ppc_is_toc_sym (ex.X_add_symbol))
|
if (ppc_is_toc_sym (ex.X_add_symbol))
|
||||||
{
|
{
|
||||||
reloc = BFD_RELOC_PPC_TOC16;
|
reloc = BFD_RELOC_PPC_TOC16;
|
||||||
@ -6363,6 +6364,15 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
|||||||
value = fixP->fx_offset;
|
value = fixP->fx_offset;
|
||||||
fixP->fx_done = 1;
|
fixP->fx_done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* During parsing of instructions, a TOC16 reloc is generated for
|
||||||
|
instructions such as 'lwz RT,SYM(RB)' if SYM is a symbol defined
|
||||||
|
in the toc. But at parse time, SYM may be not yet defined, so
|
||||||
|
check again here. */
|
||||||
|
if (fixP->fx_r_type == BFD_RELOC_16
|
||||||
|
&& fixP->fx_addsy != NULL
|
||||||
|
&& ppc_is_toc_sym (fixP->fx_addsy))
|
||||||
|
fixP->fx_r_type = BFD_RELOC_PPC_TOC16;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6873,6 +6883,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
|||||||
fixP->fx_addnumber =
|
fixP->fx_addnumber =
|
||||||
- bfd_get_section_vma (stdoutput, S_GET_SEGMENT (fixP->fx_addsy))
|
- bfd_get_section_vma (stdoutput, S_GET_SEGMENT (fixP->fx_addsy))
|
||||||
- S_GET_VALUE (ppc_toc_csect);
|
- S_GET_VALUE (ppc_toc_csect);
|
||||||
|
/* Set *valP to avoid errors. */
|
||||||
|
*valP = value;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2013-09-04 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
|
* gas/ppc/aix.exp: Run xcoff-toc-1 test.
|
||||||
|
* gas/ppc/xcoff-toc-1.s, gas/ppc/xcoff-toc-1.d: New test.
|
||||||
|
|
||||||
2013-09-04 Roland McGrath <mcgrathr@google.com>
|
2013-09-04 Roland McGrath <mcgrathr@google.com>
|
||||||
|
|
||||||
PR gas/15914
|
PR gas/15914
|
||||||
|
@ -67,6 +67,7 @@ if [istarget powerpc-ibm-aix*] then {
|
|||||||
run_dump_test "xcoff-branch-1-64"
|
run_dump_test "xcoff-branch-1-64"
|
||||||
run_dump_test "xcoff-br16-1"
|
run_dump_test "xcoff-br16-1"
|
||||||
run_dump_test "xcoff-br16-2"
|
run_dump_test "xcoff-br16-2"
|
||||||
|
run_dump_test "xcoff-toc-1"
|
||||||
|
|
||||||
run_list_test "xcoff-ref-1"
|
run_list_test "xcoff-ref-1"
|
||||||
|
|
||||||
|
12
gas/testsuite/gas/ppc/xcoff-toc-1.d
Normal file
12
gas/testsuite/gas/ppc/xcoff-toc-1.d
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#as: -a32
|
||||||
|
#source: xcoff-toc-1.s
|
||||||
|
#objdump: -dr
|
||||||
|
#name: XCOFF TOC reloc test 1
|
||||||
|
|
||||||
|
.*
|
||||||
|
Disassembly of section \.text:
|
||||||
|
|
||||||
|
00000000 <\.foo>:
|
||||||
|
0: 80 22 00 00 l r1,0\(r2\)
|
||||||
|
2: R_TOC data-0x10010
|
||||||
|
4: 4e 80 00 20 br
|
21
gas/testsuite/gas/ppc/xcoff-toc-1.s
Normal file
21
gas/testsuite/gas/ppc/xcoff-toc-1.s
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
.csect _rw_[RW],4
|
||||||
|
.toc
|
||||||
|
|
||||||
|
.csect .text[PR]
|
||||||
|
.align 2
|
||||||
|
.lglobl .foo
|
||||||
|
.csect foo[DS]
|
||||||
|
foo:
|
||||||
|
.long .foo, TOC[tc0], 0
|
||||||
|
.csect .text[PR]
|
||||||
|
.foo:
|
||||||
|
lwz 1,LC..72(2)
|
||||||
|
blr
|
||||||
|
.align 2
|
||||||
|
.toc
|
||||||
|
LC..72:
|
||||||
|
.tc data[TC],data
|
||||||
|
.csect _rw_[RW],4
|
||||||
|
.align 2
|
||||||
|
data:
|
||||||
|
.space 0x10000
|
Reference in New Issue
Block a user