llvm-project/lld/test/ELF/avr-reloc.s

85 lines
2.5 KiB
ArmAsm

; REQUIRES: avr
; RUN: llvm-mc -filetype=obj -triple=avr -mcpu=atmega328p %s -o %t.o
; RUN: ld.lld %t.o --defsym=a=0x12345678 --defsym=b=30 -o %t
; RUN: llvm-objdump -d --print-imm-hex %t | FileCheck %s
; RUN: llvm-objdump -s %t | FileCheck --check-prefix=HEX %s
.section .LDI,"ax",@progbits
; CHECK-LABEL: section .LDI:
; CHECK: ldi r20, 0x78
; CHECK-NEXT: ldi r20, 0x56
; CHECK-NEXT: ldi r20, 0x34
; CHECK-NEXT: ldi r20, 0x12
; CHECK-NEXT: ldi r20, 0x3c
; CHECK-NEXT: ldi r20, 0x2b
; CHECK-NEXT: ldi r20, 0x1a
; 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
ldi r20, hhi8(a) ; R_AVR_MS8_LDI
ldi r20, pm_lo8(a) ; R_AVR_LO8_LDI_PM
ldi r20, pm_hi8(a) ; R_AVR_HI8_LDI_PM
ldi r20, pm_hh8(a) ; R_AVR_HH8_LDI_PM
ldi r20, b+225
.section .LDI_NEG,"ax",@progbits
; CHECK-LABEL: section .LDI_NEG:
; CHECK: ldi r20, 0x88
; CHECK-NEXT: ldi r20, 0xa9
; CHECK-NEXT: ldi r20, 0xcb
; CHECK-NEXT: ldi r20, 0xed
; CHECK-NEXT: ldi r20, 0xc4
; CHECK-NEXT: ldi r20, 0xd4
; CHECK-NEXT: ldi r20, 0xe5
ldi r20, lo8(-(a)) ; R_AVR_LO8_LDI_NEG
ldi r20, hi8(-(a)) ; R_AVR_HI8_LDI_NEG
ldi r20, hh8(-(a)) ; R_AVR_HH8_LDI_NEG
ldi r20, hhi8(-(a)) ; R_AVR_MS8_LDI_NEG
ldi r20, pm_lo8(-(a)) ; R_AVR_LO8_LDI_PM_NEG
ldi r20, pm_hi8(-(a)) ; R_AVR_HI8_LDI_PM_NEG
ldi r20, pm_hh8(-(a)) ; R_AVR_HH8_LDI_PM_NEG
;; The disassembler is not yet able to decode those opcodes
;; 9e 8e std Y+30, r9
;; 9e 8c ldd r9, Y+30
;; 4e 96 adiw r24, 0x1e
.section .SIX,"ax",@progbits
; HEX-LABEL: section .SIX:
; HEX-NEXT: 9e8e9e8c 4e96
std Y+b, r9 ; R_AVR_6
ldd r9, Y+b ; R_AVR_6
adiw r24, b ; R_AVR_6_ADIW
.section .PORT,"ax",@progbits
; CHECK-LABEL: section .PORT:
; CHECK: in r20, 0x1e
; CHECK-NEXT: sbic 0x1e, 0x1
in r20, b ; R_AVR_PORT6
sbic b, 1 ; R_AVR_PORT5
;; The disassembler is not yet able to decode those opcodes
;; 0f c0 rjmp .+30
;; ee cf rjmp .-36
;; 69 f0 breq .+26
;; 61 f3 breq .-40
.section .PCREL,"ax",@progbits
; 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
.section .DATA,"ax",@progbits
; HEX-LABEL: section .DATA:
; HEX-NEXT: {{.*}} 1e1e000f 00785634 12
.byte b ; R_AVR_8
.short b ; R_AVR_16
.short gs(b) ; R_AVR_16_PM
.long a ; R_AVR_32