https://sourceware.org/bugzilla/show_bug.cgi?id=24571
Bug ID: 24571 Summary: [avr] Relaxation does not shorten jmp or call to target at pc-relative range boundary Product: binutils Version: 2.31 Status: NEW Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: saaadhu at gcc dot gnu.org Target Milestone: --- For the following piece of code, linker relaxation does not transform the jmp to forward_target into an rjmp, even though the target label is within range of a pc-relative jump. $ cat relax-insn-at-range-boundary.s .section ".text", "ax",@progbits .global main main: backward_target: ; Exactly -4094 bytes from jmp .ds.b 4094, 0 jmp backward_target jmp forward_target .ds.b 4094, 0 forward_target: ; Exactly 4098 bytes before relax, 4096 bytes after relax nop $ avr-as -m avr51 relax-insn-at-range-boundary.s -o tmp.o $ avr-ld -m avr51 --relax tmp.o $ avr-objdump -d a.out a.out: file format elf32-avr Disassembly of section .text: 00000000 <__ctors_end>: ... ffc: 00 00 nop ffe: 00 c8 rjmp .-4096 ; 0x0 <__ctors_end> 1000: 0c 94 01 10 jmp 0x2002 ; 0x2002 <forward_target> ... 00002002 <forward_target>: ... The forward_target label is at a distance of 4098 bytes - if the jmp is relaxed to rjmp, the distance gets reduced to 4096, and with the implicit PC increment of 2, that address is reachable via rjmp .+4094 -- 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