| # REQUIRES: avr |
| |
| ## Test ld.lld supports OUTPUT_FORMAT/OUTPUT_ARCH for AVR output. |
| |
| # RUN: split-file %s %t |
| # RUN: llvm-mc -filetype=obj -triple=avr -mcpu=atmega328 %t/avr5.s -o %t/avr5.o |
| # RUN: ld.lld %t/avr5.o -T %t/avr5.lds -o %t/avr5a.out |
| # RUN: llvm-objdump --no-print-imm-hex --mcpu=atmega328 -d %t/avr5a.out | FileCheck %s --check-prefix=RELOC |
| # RUN: ld.lld %t/avr5.o -Ttext=0 -Tdata=0x800 -e _start -o %t/avr5b.out |
| # RUN: llvm-objdump --no-print-imm-hex --mcpu=atmega328 -d %t/avr5b.out | FileCheck %s --check-prefix=RELOC |
| |
| # RELOC: ldi r24, 2 |
| # RELOC-NEXT: ldi r25, 8 |
| |
| # RUN: llvm-readelf --headers %t/avr5a.out | FileCheck %s --check-prefix=HEAD |
| # RUN: llvm-readelf --headers %t/avr5b.out | FileCheck %s --check-prefix=HEAD |
| |
| # HEAD: Atmel AVR 8-bit microcontroller |
| # HEAD: 0x85, EF_AVR_ARCH_AVR5, relaxable |
| |
| # HEAD: Name Type Address Off Size |
| # HEAD-NEXT: NULL 00000000 000000 000000 |
| # HEAD-NEXT: .text PROGBITS 00000000 001000 000006 |
| # HEAD-NEXT: .data PROGBITS 00000800 001800 000004 |
| |
| #--- avr5.s |
| .text |
| .globl _start |
| .p2align 1 |
| _start: |
| ldi r24, lo8(def) ; Load lower byte of variable def 16-bit address to r24 |
| ldi r25, hi8(def) ; Load higher byte of variable def 16-bit address to r25 |
| rjmp _start |
| |
| .section .data |
| .type abc, @object |
| .type def, @object |
| .globl abc |
| .globl def |
| abc: |
| .short 100 |
| def: |
| .short 200 |
| |
| #--- avr5.lds |
| OUTPUT_FORMAT("elf32-avr", "elf32-avr", "elf32-avr") |
| OUTPUT_ARCH(avr:5) |
| ENTRY(_start) |
| SECTIONS { |
| .text 0x000: { *(.text*) } |
| .data 0x800: { *(.data*) } |
| } |