[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