[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
Wed Mar 29 05:15:13 PDT 2023


benshi001 updated this revision to Diff 509322.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147106/new/

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,12 +1,12 @@
 ; 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 | \
 ; RUN:     FileCheck --check-prefixes=HEX,AVRHEX %s
 ; RUN: llvm-mc -filetype=obj -triple=avr -mcpu=attiny10 %s --defsym=TINY=1 -o %t1.o
-; RUN: ld.lld %t1.o --defsym=a=0x12345678 --defsym=b=30 -o %t1
+; RUN: ld.lld %t1.o --defsym=a=0x12345678 --defsym=b=30 --defsym=c=0x15554 -o %t1
 ; RUN: llvm-objdump -d --print-imm-hex --mcpu=attiny10 %t1 | FileCheck %s
 ; RUN: llvm-objdump -s --mcpu=attiny10 %t1 | \
 ; RUN:     FileCheck --check-prefixes=HEX,TINYHEX %s
@@ -20,7 +20,10 @@
 ; CHECK-NEXT:  ldi     r20, 0x3c
 ; CHECK-NEXT:  ldi     r20, 0x2b
 ; CHECK-NEXT:  ldi     r20, 0x1a
+; CHECK-NEXT:  ldi     r20, 0xaa
+; CHECK-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,9 @@
 ldi r20, pm_hi8(a)  ; R_AVR_HI8_LDI_PM
 ldi r20, pm_hh8(a)  ; R_AVR_HH8_LDI_PM
 
+ldi r20, lo8_gs(c)  ; R_AVR_LO8_LDI_GS
+ldi r20, hi8_gs(c)  ; R_AVR_HI8_LDI_GS
+
 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,16 @@
     writeLDI(loc, (val >> 24) & 0xff);
     break;
 
+  case R_AVR_LO8_LDI_GS:
+    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:
+    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.509322.patch
Type: text/x-patch
Size: 2501 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230329/876acb40/attachment.bin>


More information about the llvm-commits mailing list