[lld] Fix R_AVR_7_PCREL and R_AVR_13_PCREL range checking (PR #92695)
via llvm-commits
llvm-commits at lists.llvm.org
Sun May 19 06:03:55 PDT 2024
================
@@ -82,13 +82,25 @@ sbic b, 1 ; R_AVR_PORT5
; CHECK-NEXT: rjmp .-36
; CHECK-NEXT: breq .+26
; CHECK-NEXT: breq .-40
+; CHECK-NEXT: rjmp .-4096
+; CHECK-NEXT: rjmp .+4094
+; CHECK-NEXT: rjmp .+4094
+; CHECK-NEXT: rjmp .-4096
+; CHECK-NEXT: breq .-128
+; CHECK-NEXT: breq .+126
; HEX-LABEL: section .PCREL:
; HEX-NEXT: 0fc0eecf 69f061f3
foo:
rjmp foo + 32 ; R_AVR_13_PCREL
rjmp foo - 32 ; R_AVR_13_PCREL
breq foo + 32 ; R_AVR_7_PCREL
breq foo - 32 ; R_AVR_7_PCREL
+rjmp 1f - 4096 $ 1: ; R_AVR_13_PCREL
+rjmp 1f + 4094 $ 1: ; R_AVR_13_PCREL
+rjmp 1f - 4098 $ 1: ; R_AVR_13_PCREL (overflow)
+rjmp 1f + 4096 $ 1: ; R_AVR_13_PCREL (overflow)
+breq 1f - 128 $ 1: ; R_AVR_7_PCREL
+breq 1f + 126 $ 1: ; R_AVR_7_PCREL
----------------
aykevl wrote:
For those not familiar with this syntax, the `$` symbol works as a newline.
So this code:
```s
rjmp 1f - 4096 $ 1:
```
Is equivalent to the following:
```s
rjmp 1f - 4096
1:
```
(where `1f` refers to the next anonymous label numbered "1")
https://github.com/llvm/llvm-project/pull/92695
More information about the llvm-commits
mailing list