[PATCH] D147106: [lld][ELF] Support relocations R_AVR_LO8_LDI_GS/R_AVR_HI8_LDI_GS
Ben Shi via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 28 20:58:58 PDT 2023
benshi001 created this revision.
benshi001 added reviewers: MaskRay, aykevl.
Herald added subscribers: Jim, arichardson, emaste, dylanmckay.
Herald added a project: All.
benshi001 requested review of this revision.
Herald added subscribers: llvm-commits, jacquesguan.
Herald added a project: LLVM.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D147106
Files:
lld/ELF/Arch/AVR.cpp
lld/test/ELF/avr-reloc.s
Index: lld/test/ELF/avr-reloc.s
===================================================================
--- lld/test/ELF/avr-reloc.s
+++ lld/test/ELF/avr-reloc.s
@@ -1,6 +1,6 @@
; REQUIRES: avr
; RUN: llvm-mc -filetype=obj -triple=avr -mcpu=atmega328p %s -o %t0.o
-; RUN: ld.lld %t0.o --defsym=a=0x12345678 --defsym=b=30 -o %t0
+; RUN: ld.lld %t0.o --defsym=a=0x12345678 --defsym=b=30 --defsym=c=0x15554 -o %t0
; RUN: llvm-objdump -d --print-imm-hex --mcpu=atmega328p %t0 | \
; RUN: FileCheck --check-prefixes=CHECK,AVR %s
; RUN: llvm-objdump -s --mcpu=atmega328p %t0 | \
@@ -20,7 +20,10 @@
; CHECK-NEXT: ldi r20, 0x3c
; CHECK-NEXT: ldi r20, 0x2b
; CHECK-NEXT: ldi r20, 0x1a
+; AVR: ldi r20, 0xaa
+; AVR-NEXT: ldi r20, 0xaa
; CHECK-NEXT: ldi r20, 0xff
+
ldi r20, lo8(a) ; R_AVR_LO8_LDI
ldi r20, hi8(a) ; R_AVR_HI8_LDI
ldi r20, hh8(a) ; R_AVR_HH8_LDI
@@ -30,6 +33,11 @@
ldi r20, pm_hi8(a) ; R_AVR_HI8_LDI_PM
ldi r20, pm_hh8(a) ; R_AVR_HH8_LDI_PM
+.ifndef TINY
+ldi r20, lo8_gs(c) ; R_AVR_LO8_LDI_GS
+ldi r20, hi8_gs(c) ; R_AVR_HI8_LDI_GS
+.endif
+
ldi r20, b+225
.section .LDI_NEG,"ax", at progbits
Index: lld/ELF/Arch/AVR.cpp
===================================================================
--- lld/ELF/Arch/AVR.cpp
+++ lld/ELF/Arch/AVR.cpp
@@ -71,8 +71,10 @@
case R_AVR_HH8_LDI:
case R_AVR_MS8_LDI_NEG:
case R_AVR_MS8_LDI:
+ case R_AVR_LO8_LDI_GS:
case R_AVR_LO8_LDI_PM:
case R_AVR_LO8_LDI_PM_NEG:
+ case R_AVR_HI8_LDI_GS:
case R_AVR_HI8_LDI_PM:
case R_AVR_HI8_LDI_PM_NEG:
case R_AVR_HH8_LDI_PM:
@@ -160,10 +162,20 @@
writeLDI(loc, (val >> 24) & 0xff);
break;
+ case R_AVR_LO8_LDI_GS:
+ // R_AVR_LO8_LDI_GS will fallback to R_AVR_LO8_LDI_PM if in range
+ // [0, 0x1fffe].
+ checkUInt(loc, val, 17, rel);
+ [[fallthrough]];
case R_AVR_LO8_LDI_PM:
checkAlignment(loc, val, 2, rel);
writeLDI(loc, (val >> 1) & 0xff);
break;
+ case R_AVR_HI8_LDI_GS:
+ // R_AVR_HI8_LDI_GS will fallback to R_AVR_HI8_LDI_PM if in range
+ // [0, 0x1fffe].
+ checkUInt(loc, val, 17, rel);
+ [[fallthrough]];
case R_AVR_HI8_LDI_PM:
checkAlignment(loc, val, 2, rel);
writeLDI(loc, (val >> 9) & 0xff);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147106.509203.patch
Type: text/x-patch
Size: 2246 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230329/b65cfddc/attachment.bin>
More information about the llvm-commits
mailing list