Fix AVR assembler so that it creates relocs that will work with linker relaxation.
PR 28686 gas * config/tc-avr.h (tc_fix_adjustable): Define. * config/tc-avr.c (avr_fix_adjustable): New function. * testsuite/gas/all/gas.exp: Skip tests that need adjustable fixups. * testsuite/gas/elf/elf.exp: Likewise. * testsuite/gas/avr/diffreloc_withrelax.d: Adjust expected output. * testsuite/gas/avr/pc-relative-reloc.d: Adjust expected output. ld * testsuite/ld-avr/avr-prop-7.d: Adjust expected output. * testsuite/ld-avr/avr-prop-8.d: Likewise. * testsuite/ld-avr/pr13402.d: Likewise.
This commit is contained in:
parent
61ab1364c7
commit
f3be70df1b
@ -1,3 +1,13 @@
|
|||||||
|
2021-12-16 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR 28686
|
||||||
|
* config/tc-avr.h (tc_fix_adjustable): Define.
|
||||||
|
* config/tc-avr.c (avr_fix_adjustable): New function.
|
||||||
|
* testsuite/gas/all/gas.exp: Skip tests that need adjustable fixups.
|
||||||
|
* testsuite/gas/elf/elf.exp: Likewise.
|
||||||
|
* testsuite/gas/avr/diffreloc_withrelax.d: Adjust expected output.
|
||||||
|
* testsuite/gas/avr/pc-relative-reloc.d: Adjust expected output.
|
||||||
|
|
||||||
2021-11-26 Tom de Vries <tdevries@suse.de>
|
2021-11-26 Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
PR 28629
|
PR 28629
|
||||||
|
@ -2820,3 +2820,29 @@ avr_pre_output_hook (void)
|
|||||||
if (avr_opt.have_gccisr)
|
if (avr_opt.have_gccisr)
|
||||||
bfd_map_over_sections (stdoutput, avr_check_gccisr_done, NULL);
|
bfd_map_over_sections (stdoutput, avr_check_gccisr_done, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return false if the fixup in fixp should be left alone and not
|
||||||
|
adjusted. */
|
||||||
|
|
||||||
|
bool
|
||||||
|
avr_fix_adjustable (struct fix *fixp)
|
||||||
|
{
|
||||||
|
if (! linkrelax || fixp->fx_addsy == NULL)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
/* Do not adjust relocations involving symbols in code sections,
|
||||||
|
because it breaks linker relaxations. This could be fixed in the
|
||||||
|
linker, but this fix is simpler, and it pretty much only affects
|
||||||
|
object size a little bit. */
|
||||||
|
if (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_CODE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* Likewise, do not adjust symbols that won't be merged, or debug
|
||||||
|
symbols, because they too break relaxation. We do want to adjust
|
||||||
|
other mergeable symbols, like .rodata, because code relaxations
|
||||||
|
need section-relative symbols to properly relax them. */
|
||||||
|
if (! (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -247,3 +247,6 @@ extern void avr_frag_init (fragS *);
|
|||||||
|
|
||||||
#define tc_line_separator_chars avr_line_separator_chars
|
#define tc_line_separator_chars avr_line_separator_chars
|
||||||
extern const char *avr_line_separator_chars;
|
extern const char *avr_line_separator_chars;
|
||||||
|
|
||||||
|
#define tc_fix_adjustable(FIX) avr_fix_adjustable (FIX)
|
||||||
|
extern bool avr_fix_adjustable (struct fix *);
|
||||||
|
@ -166,11 +166,11 @@ switch -glob $target_triplet {
|
|||||||
# symbols on relocs.
|
# symbols on relocs.
|
||||||
setup_xfail "m68hc1*-*-*" "m6811-*-*" "m6812-*-*" "rl78-*-*"
|
setup_xfail "m68hc1*-*-*" "m6811-*-*" "m6812-*-*" "rl78-*-*"
|
||||||
setup_xfail "riscv*-*-*" "rx-*-*" "vax*-*-*" "xgate*-*-*" "z8k-*-*"
|
setup_xfail "riscv*-*-*" "rx-*-*" "vax*-*-*" "xgate*-*-*" "z8k-*-*"
|
||||||
setup_xfail "loongarch*-*-*"
|
setup_xfail "loongarch*-*-*" "avr-*-*"
|
||||||
run_dump_test redef2
|
run_dump_test redef2
|
||||||
setup_xfail "m68hc1*-*-*" "m6811-*-*" "m6812-*-*" "rl78-*-*"
|
setup_xfail "m68hc1*-*-*" "m6811-*-*" "m6812-*-*" "rl78-*-*"
|
||||||
setup_xfail "riscv*-*-*" "rx-*-*" "vax*-*-*" "xgate*-*-*" "z8k-*-*"
|
setup_xfail "riscv*-*-*" "rx-*-*" "vax*-*-*" "xgate*-*-*" "z8k-*-*"
|
||||||
setup_xfail "loongarch*-*-*"
|
setup_xfail "loongarch*-*-*" "avr-*-*"
|
||||||
# rs6000-aix disallows redefinition via .comm.
|
# rs6000-aix disallows redefinition via .comm.
|
||||||
if [is_xcoff_format] {
|
if [is_xcoff_format] {
|
||||||
setup_xfail *-*-*
|
setup_xfail *-*-*
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
|
|
||||||
RELOCATION RECORDS FOR \[.text\]:
|
RELOCATION RECORDS FOR \[.text\]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
00000000 R_AVR_CALL .text
|
00000000 R_AVR_CALL L1
|
||||||
|
|
||||||
|
|
||||||
RELOCATION RECORDS FOR \[.data\]:
|
RELOCATION RECORDS FOR \[.data\]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
00000000 R_AVR_DIFF16 .text\+0x00000004
|
00000000 R_AVR_DIFF16 L2
|
||||||
|
@ -12,7 +12,7 @@ RELOCATION RECORDS FOR \[.text.main\]:
|
|||||||
|
|
||||||
RELOCATION RECORDS FOR \[.debug_line\]:
|
RELOCATION RECORDS FOR \[.debug_line\]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
00000000 R_AVR_32_PCREL .debug_line_end-0x00000004
|
00000000 R_AVR_32_PCREL .Ldebug_line_end-0x00000004
|
||||||
|
|
||||||
|
|
||||||
RELOCATION RECORDS FOR \[.debug_line.text.main\]:
|
RELOCATION RECORDS FOR \[.debug_line.text.main\]:
|
||||||
|
@ -184,7 +184,7 @@ if { [is_elf_format] } then {
|
|||||||
# against ordinary symbols into relocations against section symbols.
|
# against ordinary symbols into relocations against section symbols.
|
||||||
# This is usually revealed by the error message:
|
# This is usually revealed by the error message:
|
||||||
# symbol `sym' required but not present
|
# symbol `sym' required but not present
|
||||||
setup_xfail "m681*-*-*" "m68hc*-*-*" "xgate-*-*" "vax-*-*"
|
setup_xfail "m681*-*-*" "m68hc*-*-*" "xgate-*-*" "vax-*-*" "avr-*-*"
|
||||||
run_dump_test redef
|
run_dump_test redef
|
||||||
run_dump_test equ-reloc
|
run_dump_test equ-reloc
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2021-12-16 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR 28686
|
||||||
|
* testsuite/ld-avr/avr-prop-7.d: Adjust expected output.
|
||||||
|
* testsuite/ld-avr/avr-prop-8.d: Likewise.
|
||||||
|
* testsuite/ld-avr/pr13402.d: Likewise.
|
||||||
|
|
||||||
2021-11-30 Nick Clifton <nickc@redhat.com>
|
2021-11-30 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* scripttempl/pru.sc (.pru_irq_map): Define output section.
|
* scripttempl/pru.sc (.pru_irq_map): Define output section.
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
00000000 <__ctors_end>:
|
00000000 <__ctors_end>:
|
||||||
0: 04 d0 rcall .+8 ; 0xa <foo>
|
0: 04 d0 rcall .+8 ; 0xa <foo>
|
||||||
2: 00 00 nop
|
2: 00 00 nop
|
||||||
4: 00 00 nop
|
#...
|
||||||
6: 86 e0 ldi r24, 0x06 ; 6
|
6: 86 e0 ldi r24, 0x06 ; 6
|
||||||
8: f0 f7 brcc .-4 ; 0x6 <__ctors_end\+0x6>
|
8: f0 f7 brcc .-4 ; 0x6 <.*>
|
||||||
#...
|
#...
|
||||||
|
@ -9,5 +9,6 @@
|
|||||||
00000000 <__ctors_end>:
|
00000000 <__ctors_end>:
|
||||||
0: ff cf rjmp .-2 ; 0x0 <__ctors_end>
|
0: ff cf rjmp .-2 ; 0x0 <__ctors_end>
|
||||||
2: fe df rcall .-4 ; 0x0 <__ctors_end>
|
2: fe df rcall .-4 ; 0x0 <__ctors_end>
|
||||||
4: f8 f7 brcc .-2 ; 0x4 <__ctors_end\+0x4>
|
#...
|
||||||
|
4: f8 f7 brcc .-2 ; 0x4 <.*>
|
||||||
#...
|
#...
|
||||||
|
@ -8,9 +8,11 @@
|
|||||||
#...
|
#...
|
||||||
main:
|
main:
|
||||||
call a
|
call a
|
||||||
0: 02 d0 rcall .+4 ; 0x6 <_etext>
|
|
||||||
call b
|
call b
|
||||||
2: 01 d0 rcall .+2 ; 0x6 <_etext>
|
0: 02 d0 rcall .+4 ; 0x6 <_etext>
|
||||||
|
#...
|
||||||
call c
|
call c
|
||||||
|
2: 01 d0 rcall .+2 ; 0x6 <_etext>
|
||||||
|
#...
|
||||||
4: 00 d0 rcall .+0 ; 0x6 <_etext>
|
4: 00 d0 rcall .+0 ; 0x6 <_etext>
|
||||||
#...
|
#...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user