+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>
PR 28629
if (avr_opt.have_gccisr)
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;
+}
#define tc_line_separator_chars 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 *);
# symbols on relocs.
setup_xfail "m68hc1*-*-*" "m6811-*-*" "m6812-*-*" "rl78-*-*"
setup_xfail "riscv*-*-*" "rx-*-*" "vax*-*-*" "xgate*-*-*" "z8k-*-*"
- setup_xfail "loongarch*-*-*"
+ setup_xfail "loongarch*-*-*" "avr-*-*"
run_dump_test redef2
setup_xfail "m68hc1*-*-*" "m6811-*-*" "m6812-*-*" "rl78-*-*"
setup_xfail "riscv*-*-*" "rx-*-*" "vax*-*-*" "xgate*-*-*" "z8k-*-*"
- setup_xfail "loongarch*-*-*"
+ setup_xfail "loongarch*-*-*" "avr-*-*"
# rs6000-aix disallows redefinition via .comm.
if [is_xcoff_format] {
setup_xfail *-*-*
RELOCATION RECORDS FOR \[.text\]:
OFFSET TYPE VALUE
-00000000 R_AVR_CALL .text
+00000000 R_AVR_CALL L1
RELOCATION RECORDS FOR \[.data\]:
OFFSET TYPE VALUE
-00000000 R_AVR_DIFF16 .text\+0x00000004
+00000000 R_AVR_DIFF16 L2
RELOCATION RECORDS FOR \[.debug_line\]:
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\]:
# against ordinary symbols into relocations against section symbols.
# This is usually revealed by the error message:
# 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 equ-reloc
}
+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>
* scripttempl/pru.sc (.pru_irq_map): Define output section.
00000000 <__ctors_end>:
0: 04 d0 rcall .+8 ; 0xa <foo>
2: 00 00 nop
- 4: 00 00 nop
+#...
6: 86 e0 ldi r24, 0x06 ; 6
- 8: f0 f7 brcc .-4 ; 0x6 <__ctors_end\+0x6>
+ 8: f0 f7 brcc .-4 ; 0x6 <.*>
#...
00000000 <__ctors_end>:
0: ff cf rjmp .-2 ; 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 <.*>
#...
#...
main:
call a
- 0: 02 d0 rcall .+4 ; 0x6 <_etext>
call b
- 2: 01 d0 rcall .+2 ; 0x6 <_etext>
+ 0: 02 d0 rcall .+4 ; 0x6 <_etext>
+#...
call c
+ 2: 01 d0 rcall .+2 ; 0x6 <_etext>
+#...
4: 00 d0 rcall .+0 ; 0x6 <_etext>
#...