http://sourceware.org/bugzilla/show_bug.cgi?id=14902
Bug #: 14902 Summary: h8300-elf linker relaxations: symbols skipped Product: binutils Version: 2.23 Status: NEW Severity: normal Priority: P2 Component: binutils AssignedTo: unassig...@sourceware.org ReportedBy: achille.fouilleul+binut...@gadz.org Classification: Unclassified Created attachment 6767 --> http://sourceware.org/bugzilla/attachment.cgi?id=6767 proposed fix (don't forget to remove the fprintfs) With binutils 2.23.1, configured with --target=h8300-elf When relaxations are applied, symbols located after the last instruction of a .text section do not get updated as they should. $ cat a.s .h8300s .text .globl _start .globl _a .globl _a_end _start: _a: sub r0,r0 jmp @_a sub r1,r1 jmp @_b sub r2,r2 _a_end: $ cat b.s .h8300s .text .globl _b _b: sub r0,r0 jmp @_a sub r1,r1 jmp @_b sub r2,r2 jmp @_a_end _b_end: $ cat Makefile AS = h8300-elf-as LD = h8300-elf-ld result.elf: a.o b.o $(LD) --relax -mh8300self $^ -o $@ .PHONY: clean clean: -rm -f *.o *.elf .s.o: $(AS) $< -o $@ Assemble and link the files above (Makefile provided for convenience), then run h8300-elf-objdump -dr result.elf: result.elf: file format elf32-h8300 Disassembly of section .text: 00000100 <_a>: 100: 19 00 sub.w r0,r0 102: 40 fc bra .-4 (0x100) 104: 19 11 sub.w r1,r1 106: 40 02 bra .+2 (0x10a) 108: 19 22 sub.w r2,r2 0000010a <_b>: 10a: 19 00 sub.w r0,r0 10c: 40 f2 bra .-14 (0x100) 0000010e <_a_end>: 10e: 19 11 sub.w r1,r1 110: 40 f8 bra .-8 (0x10a) 112: 19 22 sub.w r2,r2 114: 40 f8 bra .-8 (0x10e) The _a_end symbol has not been adjusted. One problem with this bug is that gcc often places labels at the end of .text sections; with midly complex programs and linker scripts, this has led to incorrect code being generated. I think the problem is in the elf32_h8_relax_delete_bytes() function (elf32-h8300.c); symbol values are always compared strictly with toaddr. I think the <= operator should be used instead. The attached patch seems to fix the issue: result.elf: file format elf32-h8300 Disassembly of section .text: 00000100 <_a>: 100: 19 00 sub.w r0,r0 102: 40 fc bra .-4 (0x100) 104: 19 11 sub.w r1,r1 106: 40 02 bra .+2 (0x10a) 108: 19 22 sub.w r2,r2 0000010a <_a_end>: 10a: 19 00 sub.w r0,r0 10c: 40 f2 bra .-14 (0x100) 10e: 19 11 sub.w r1,r1 110: 40 f8 bra .-8 (0x10a) 112: 19 22 sub.w r2,r2 114: 40 f4 bra .-12 (0x10a) -- Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils