rustc_target/spec/base/
avr_gnu.rs

1use object::elf;
2
3use crate::spec::{Cc, LinkerFlavor, Lld, RelocModel, Target, TargetOptions};
4
5/// A base target for AVR devices using the GNU toolchain.
6///
7/// Requires GNU avr-gcc and avr-binutils on the host system.
8/// FIXME: Remove the second parameter when const string concatenation is possible.
9pub(crate) fn target(target_cpu: &'static str, mmcu: &'static str) -> Target {
10    Target {
11        arch: "avr".into(),
12        metadata: crate::spec::TargetMetadata {
13            description: None,
14            tier: None,
15            host_tools: None,
16            std: None,
17        },
18        data_layout: "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8".into(),
19        llvm_target: "avr-unknown-unknown".into(),
20        pointer_width: 16,
21        options: TargetOptions {
22            env: "gnu".into(),
23
24            c_int_width: "16".into(),
25            cpu: target_cpu.into(),
26            exe_suffix: ".elf".into(),
27
28            linker: Some("avr-gcc".into()),
29            eh_frame_header: false,
30            pre_link_args: TargetOptions::link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &[mmcu]),
31            late_link_args: TargetOptions::link_args(
32                LinkerFlavor::Gnu(Cc::Yes, Lld::No),
33                &["-lgcc"],
34            ),
35            max_atomic_width: Some(16),
36            atomic_cas: false,
37            relocation_model: RelocModel::Static,
38            ..TargetOptions::default()
39        },
40    }
41}
42
43/// Resolve the value of the EF_AVR_ARCH field for AVR ELF files, given the
44/// name of the target CPU / MCU.
45///
46/// In ELF files using the AVR architecture, the lower 7 bits of the e_flags
47/// field is a code that identifies the "ISA revision" of the object code.
48///
49/// This flag is generally set by AVR compilers in their output ELF files,
50/// and linkers like avr-ld check this flag in all of their input files to
51/// make sure they are compiled with the same ISA revision.
52pub fn ef_avr_arch(target_cpu: &str) -> u32 {
53    // Adapted from llvm-project/llvm/lib/target/AVR/AVRDevices.td
54    match target_cpu {
55        // Generic MCUs
56        "avr1" => elf::EF_AVR_ARCH_AVR1,
57        "avr2" => elf::EF_AVR_ARCH_AVR2,
58        "avr25" => elf::EF_AVR_ARCH_AVR25,
59        "avr3" => elf::EF_AVR_ARCH_AVR3,
60        "avr31" => elf::EF_AVR_ARCH_AVR31,
61        "avr35" => elf::EF_AVR_ARCH_AVR35,
62        "avr4" => elf::EF_AVR_ARCH_AVR4,
63        "avr5" => elf::EF_AVR_ARCH_AVR5,
64        "avr51" => elf::EF_AVR_ARCH_AVR51,
65        "avr6" => elf::EF_AVR_ARCH_AVR6,
66        "avrxmega1" => elf::EF_AVR_ARCH_XMEGA1,
67        "avrxmega2" => elf::EF_AVR_ARCH_XMEGA2,
68        "avrxmega3" => elf::EF_AVR_ARCH_XMEGA3,
69        "avrxmega4" => elf::EF_AVR_ARCH_XMEGA4,
70        "avrxmega5" => elf::EF_AVR_ARCH_XMEGA5,
71        "avrxmega6" => elf::EF_AVR_ARCH_XMEGA6,
72        "avrxmega7" => elf::EF_AVR_ARCH_XMEGA7,
73        "avrtiny" => elf::EF_AVR_ARCH_AVRTINY,
74
75        // Specific MCUs
76        "at90s1200" => elf::EF_AVR_ARCH_AVR1,
77        "attiny11" => elf::EF_AVR_ARCH_AVR1,
78        "attiny12" => elf::EF_AVR_ARCH_AVR1,
79        "attiny15" => elf::EF_AVR_ARCH_AVR1,
80        "attiny28" => elf::EF_AVR_ARCH_AVR1,
81        "at90s2313" => elf::EF_AVR_ARCH_AVR2,
82        "at90s2323" => elf::EF_AVR_ARCH_AVR2,
83        "at90s2333" => elf::EF_AVR_ARCH_AVR2,
84        "at90s2343" => elf::EF_AVR_ARCH_AVR2,
85        "attiny22" => elf::EF_AVR_ARCH_AVR2,
86        "attiny26" => elf::EF_AVR_ARCH_AVR2,
87        "at86rf401" => elf::EF_AVR_ARCH_AVR25,
88        "at90s4414" => elf::EF_AVR_ARCH_AVR2,
89        "at90s4433" => elf::EF_AVR_ARCH_AVR2,
90        "at90s4434" => elf::EF_AVR_ARCH_AVR2,
91        "at90s8515" => elf::EF_AVR_ARCH_AVR2,
92        "at90c8534" => elf::EF_AVR_ARCH_AVR2,
93        "at90s8535" => elf::EF_AVR_ARCH_AVR2,
94        "ata5272" => elf::EF_AVR_ARCH_AVR25,
95        "ata6616c" => elf::EF_AVR_ARCH_AVR25,
96        "attiny13" => elf::EF_AVR_ARCH_AVR25,
97        "attiny13a" => elf::EF_AVR_ARCH_AVR25,
98        "attiny2313" => elf::EF_AVR_ARCH_AVR25,
99        "attiny2313a" => elf::EF_AVR_ARCH_AVR25,
100        "attiny24" => elf::EF_AVR_ARCH_AVR25,
101        "attiny24a" => elf::EF_AVR_ARCH_AVR25,
102        "attiny4313" => elf::EF_AVR_ARCH_AVR25,
103        "attiny44" => elf::EF_AVR_ARCH_AVR25,
104        "attiny44a" => elf::EF_AVR_ARCH_AVR25,
105        "attiny84" => elf::EF_AVR_ARCH_AVR25,
106        "attiny84a" => elf::EF_AVR_ARCH_AVR25,
107        "attiny25" => elf::EF_AVR_ARCH_AVR25,
108        "attiny45" => elf::EF_AVR_ARCH_AVR25,
109        "attiny85" => elf::EF_AVR_ARCH_AVR25,
110        "attiny261" => elf::EF_AVR_ARCH_AVR25,
111        "attiny261a" => elf::EF_AVR_ARCH_AVR25,
112        "attiny441" => elf::EF_AVR_ARCH_AVR25,
113        "attiny461" => elf::EF_AVR_ARCH_AVR25,
114        "attiny461a" => elf::EF_AVR_ARCH_AVR25,
115        "attiny841" => elf::EF_AVR_ARCH_AVR25,
116        "attiny861" => elf::EF_AVR_ARCH_AVR25,
117        "attiny861a" => elf::EF_AVR_ARCH_AVR25,
118        "attiny87" => elf::EF_AVR_ARCH_AVR25,
119        "attiny43u" => elf::EF_AVR_ARCH_AVR25,
120        "attiny48" => elf::EF_AVR_ARCH_AVR25,
121        "attiny88" => elf::EF_AVR_ARCH_AVR25,
122        "attiny828" => elf::EF_AVR_ARCH_AVR25,
123        "at43usb355" => elf::EF_AVR_ARCH_AVR3,
124        "at76c711" => elf::EF_AVR_ARCH_AVR3,
125        "atmega103" => elf::EF_AVR_ARCH_AVR31,
126        "at43usb320" => elf::EF_AVR_ARCH_AVR31,
127        "attiny167" => elf::EF_AVR_ARCH_AVR35,
128        "at90usb82" => elf::EF_AVR_ARCH_AVR35,
129        "at90usb162" => elf::EF_AVR_ARCH_AVR35,
130        "ata5505" => elf::EF_AVR_ARCH_AVR35,
131        "ata6617c" => elf::EF_AVR_ARCH_AVR35,
132        "ata664251" => elf::EF_AVR_ARCH_AVR35,
133        "atmega8u2" => elf::EF_AVR_ARCH_AVR35,
134        "atmega16u2" => elf::EF_AVR_ARCH_AVR35,
135        "atmega32u2" => elf::EF_AVR_ARCH_AVR35,
136        "attiny1634" => elf::EF_AVR_ARCH_AVR35,
137        "atmega8" => elf::EF_AVR_ARCH_AVR4,
138        "ata6289" => elf::EF_AVR_ARCH_AVR4,
139        "atmega8a" => elf::EF_AVR_ARCH_AVR4,
140        "ata6285" => elf::EF_AVR_ARCH_AVR4,
141        "ata6286" => elf::EF_AVR_ARCH_AVR4,
142        "ata6612c" => elf::EF_AVR_ARCH_AVR4,
143        "atmega48" => elf::EF_AVR_ARCH_AVR4,
144        "atmega48a" => elf::EF_AVR_ARCH_AVR4,
145        "atmega48pa" => elf::EF_AVR_ARCH_AVR4,
146        "atmega48pb" => elf::EF_AVR_ARCH_AVR4,
147        "atmega48p" => elf::EF_AVR_ARCH_AVR4,
148        "atmega88" => elf::EF_AVR_ARCH_AVR4,
149        "atmega88a" => elf::EF_AVR_ARCH_AVR4,
150        "atmega88p" => elf::EF_AVR_ARCH_AVR4,
151        "atmega88pa" => elf::EF_AVR_ARCH_AVR4,
152        "atmega88pb" => elf::EF_AVR_ARCH_AVR4,
153        "atmega8515" => elf::EF_AVR_ARCH_AVR4,
154        "atmega8535" => elf::EF_AVR_ARCH_AVR4,
155        "atmega8hva" => elf::EF_AVR_ARCH_AVR4,
156        "at90pwm1" => elf::EF_AVR_ARCH_AVR4,
157        "at90pwm2" => elf::EF_AVR_ARCH_AVR4,
158        "at90pwm2b" => elf::EF_AVR_ARCH_AVR4,
159        "at90pwm3" => elf::EF_AVR_ARCH_AVR4,
160        "at90pwm3b" => elf::EF_AVR_ARCH_AVR4,
161        "at90pwm81" => elf::EF_AVR_ARCH_AVR4,
162        "ata5702m322" => elf::EF_AVR_ARCH_AVR5,
163        "ata5782" => elf::EF_AVR_ARCH_AVR5,
164        "ata5790" => elf::EF_AVR_ARCH_AVR5,
165        "ata5790n" => elf::EF_AVR_ARCH_AVR5,
166        "ata5791" => elf::EF_AVR_ARCH_AVR5,
167        "ata5795" => elf::EF_AVR_ARCH_AVR5,
168        "ata5831" => elf::EF_AVR_ARCH_AVR5,
169        "ata6613c" => elf::EF_AVR_ARCH_AVR5,
170        "ata6614q" => elf::EF_AVR_ARCH_AVR5,
171        "ata8210" => elf::EF_AVR_ARCH_AVR5,
172        "ata8510" => elf::EF_AVR_ARCH_AVR5,
173        "atmega16" => elf::EF_AVR_ARCH_AVR5,
174        "atmega16a" => elf::EF_AVR_ARCH_AVR5,
175        "atmega161" => elf::EF_AVR_ARCH_AVR5,
176        "atmega162" => elf::EF_AVR_ARCH_AVR5,
177        "atmega163" => elf::EF_AVR_ARCH_AVR5,
178        "atmega164a" => elf::EF_AVR_ARCH_AVR5,
179        "atmega164p" => elf::EF_AVR_ARCH_AVR5,
180        "atmega164pa" => elf::EF_AVR_ARCH_AVR5,
181        "atmega165" => elf::EF_AVR_ARCH_AVR5,
182        "atmega165a" => elf::EF_AVR_ARCH_AVR5,
183        "atmega165p" => elf::EF_AVR_ARCH_AVR5,
184        "atmega165pa" => elf::EF_AVR_ARCH_AVR5,
185        "atmega168" => elf::EF_AVR_ARCH_AVR5,
186        "atmega168a" => elf::EF_AVR_ARCH_AVR5,
187        "atmega168p" => elf::EF_AVR_ARCH_AVR5,
188        "atmega168pa" => elf::EF_AVR_ARCH_AVR5,
189        "atmega168pb" => elf::EF_AVR_ARCH_AVR5,
190        "atmega169" => elf::EF_AVR_ARCH_AVR5,
191        "atmega169a" => elf::EF_AVR_ARCH_AVR5,
192        "atmega169p" => elf::EF_AVR_ARCH_AVR5,
193        "atmega169pa" => elf::EF_AVR_ARCH_AVR5,
194        "atmega32" => elf::EF_AVR_ARCH_AVR5,
195        "atmega32a" => elf::EF_AVR_ARCH_AVR5,
196        "atmega323" => elf::EF_AVR_ARCH_AVR5,
197        "atmega324a" => elf::EF_AVR_ARCH_AVR5,
198        "atmega324p" => elf::EF_AVR_ARCH_AVR5,
199        "atmega324pa" => elf::EF_AVR_ARCH_AVR5,
200        "atmega324pb" => elf::EF_AVR_ARCH_AVR5,
201        "atmega325" => elf::EF_AVR_ARCH_AVR5,
202        "atmega325a" => elf::EF_AVR_ARCH_AVR5,
203        "atmega325p" => elf::EF_AVR_ARCH_AVR5,
204        "atmega325pa" => elf::EF_AVR_ARCH_AVR5,
205        "atmega3250" => elf::EF_AVR_ARCH_AVR5,
206        "atmega3250a" => elf::EF_AVR_ARCH_AVR5,
207        "atmega3250p" => elf::EF_AVR_ARCH_AVR5,
208        "atmega3250pa" => elf::EF_AVR_ARCH_AVR5,
209        "atmega328" => elf::EF_AVR_ARCH_AVR5,
210        "atmega328p" => elf::EF_AVR_ARCH_AVR5,
211        "atmega328pb" => elf::EF_AVR_ARCH_AVR5,
212        "atmega329" => elf::EF_AVR_ARCH_AVR5,
213        "atmega329a" => elf::EF_AVR_ARCH_AVR5,
214        "atmega329p" => elf::EF_AVR_ARCH_AVR5,
215        "atmega329pa" => elf::EF_AVR_ARCH_AVR5,
216        "atmega3290" => elf::EF_AVR_ARCH_AVR5,
217        "atmega3290a" => elf::EF_AVR_ARCH_AVR5,
218        "atmega3290p" => elf::EF_AVR_ARCH_AVR5,
219        "atmega3290pa" => elf::EF_AVR_ARCH_AVR5,
220        "atmega406" => elf::EF_AVR_ARCH_AVR5,
221        "atmega64" => elf::EF_AVR_ARCH_AVR5,
222        "atmega64a" => elf::EF_AVR_ARCH_AVR5,
223        "atmega640" => elf::EF_AVR_ARCH_AVR5,
224        "atmega644" => elf::EF_AVR_ARCH_AVR5,
225        "atmega644a" => elf::EF_AVR_ARCH_AVR5,
226        "atmega644p" => elf::EF_AVR_ARCH_AVR5,
227        "atmega644pa" => elf::EF_AVR_ARCH_AVR5,
228        "atmega645" => elf::EF_AVR_ARCH_AVR5,
229        "atmega645a" => elf::EF_AVR_ARCH_AVR5,
230        "atmega645p" => elf::EF_AVR_ARCH_AVR5,
231        "atmega649" => elf::EF_AVR_ARCH_AVR5,
232        "atmega649a" => elf::EF_AVR_ARCH_AVR5,
233        "atmega649p" => elf::EF_AVR_ARCH_AVR5,
234        "atmega6450" => elf::EF_AVR_ARCH_AVR5,
235        "atmega6450a" => elf::EF_AVR_ARCH_AVR5,
236        "atmega6450p" => elf::EF_AVR_ARCH_AVR5,
237        "atmega6490" => elf::EF_AVR_ARCH_AVR5,
238        "atmega6490a" => elf::EF_AVR_ARCH_AVR5,
239        "atmega6490p" => elf::EF_AVR_ARCH_AVR5,
240        "atmega64rfr2" => elf::EF_AVR_ARCH_AVR5,
241        "atmega644rfr2" => elf::EF_AVR_ARCH_AVR5,
242        "atmega16hva" => elf::EF_AVR_ARCH_AVR5,
243        "atmega16hva2" => elf::EF_AVR_ARCH_AVR5,
244        "atmega16hvb" => elf::EF_AVR_ARCH_AVR5,
245        "atmega16hvbrevb" => elf::EF_AVR_ARCH_AVR5,
246        "atmega32hvb" => elf::EF_AVR_ARCH_AVR5,
247        "atmega32hvbrevb" => elf::EF_AVR_ARCH_AVR5,
248        "atmega64hve" => elf::EF_AVR_ARCH_AVR5,
249        "atmega64hve2" => elf::EF_AVR_ARCH_AVR5,
250        "at90can32" => elf::EF_AVR_ARCH_AVR5,
251        "at90can64" => elf::EF_AVR_ARCH_AVR5,
252        "at90pwm161" => elf::EF_AVR_ARCH_AVR5,
253        "at90pwm216" => elf::EF_AVR_ARCH_AVR5,
254        "at90pwm316" => elf::EF_AVR_ARCH_AVR5,
255        "atmega32c1" => elf::EF_AVR_ARCH_AVR5,
256        "atmega64c1" => elf::EF_AVR_ARCH_AVR5,
257        "atmega16m1" => elf::EF_AVR_ARCH_AVR5,
258        "atmega32m1" => elf::EF_AVR_ARCH_AVR5,
259        "atmega64m1" => elf::EF_AVR_ARCH_AVR5,
260        "atmega16u4" => elf::EF_AVR_ARCH_AVR5,
261        "atmega32u4" => elf::EF_AVR_ARCH_AVR5,
262        "atmega32u6" => elf::EF_AVR_ARCH_AVR5,
263        "at90usb646" => elf::EF_AVR_ARCH_AVR5,
264        "at90usb647" => elf::EF_AVR_ARCH_AVR5,
265        "at90scr100" => elf::EF_AVR_ARCH_AVR5,
266        "at94k" => elf::EF_AVR_ARCH_AVR5,
267        "m3000" => elf::EF_AVR_ARCH_AVR5,
268        "atmega128" => elf::EF_AVR_ARCH_AVR51,
269        "atmega128a" => elf::EF_AVR_ARCH_AVR51,
270        "atmega1280" => elf::EF_AVR_ARCH_AVR51,
271        "atmega1281" => elf::EF_AVR_ARCH_AVR51,
272        "atmega1284" => elf::EF_AVR_ARCH_AVR51,
273        "atmega1284p" => elf::EF_AVR_ARCH_AVR51,
274        "atmega128rfa1" => elf::EF_AVR_ARCH_AVR51,
275        "atmega128rfr2" => elf::EF_AVR_ARCH_AVR51,
276        "atmega1284rfr2" => elf::EF_AVR_ARCH_AVR51,
277        "at90can128" => elf::EF_AVR_ARCH_AVR51,
278        "at90usb1286" => elf::EF_AVR_ARCH_AVR51,
279        "at90usb1287" => elf::EF_AVR_ARCH_AVR51,
280        "atmega2560" => elf::EF_AVR_ARCH_AVR6,
281        "atmega2561" => elf::EF_AVR_ARCH_AVR6,
282        "atmega256rfr2" => elf::EF_AVR_ARCH_AVR6,
283        "atmega2564rfr2" => elf::EF_AVR_ARCH_AVR6,
284        "atxmega16a4" => elf::EF_AVR_ARCH_XMEGA2,
285        "atxmega16a4u" => elf::EF_AVR_ARCH_XMEGA2,
286        "atxmega16c4" => elf::EF_AVR_ARCH_XMEGA2,
287        "atxmega16d4" => elf::EF_AVR_ARCH_XMEGA2,
288        "atxmega32a4" => elf::EF_AVR_ARCH_XMEGA2,
289        "atxmega32a4u" => elf::EF_AVR_ARCH_XMEGA2,
290        "atxmega32c3" => elf::EF_AVR_ARCH_XMEGA2,
291        "atxmega32c4" => elf::EF_AVR_ARCH_XMEGA2,
292        "atxmega32d3" => elf::EF_AVR_ARCH_XMEGA2,
293        "atxmega32d4" => elf::EF_AVR_ARCH_XMEGA2,
294        "atxmega32e5" => elf::EF_AVR_ARCH_XMEGA2,
295        "atxmega16e5" => elf::EF_AVR_ARCH_XMEGA2,
296        "atxmega8e5" => elf::EF_AVR_ARCH_XMEGA2,
297        "atxmega64a3" => elf::EF_AVR_ARCH_XMEGA4,
298        "atxmega64a3u" => elf::EF_AVR_ARCH_XMEGA4,
299        "atxmega64a4u" => elf::EF_AVR_ARCH_XMEGA4,
300        "atxmega64b1" => elf::EF_AVR_ARCH_XMEGA4,
301        "atxmega64b3" => elf::EF_AVR_ARCH_XMEGA4,
302        "atxmega64c3" => elf::EF_AVR_ARCH_XMEGA4,
303        "atxmega64d3" => elf::EF_AVR_ARCH_XMEGA4,
304        "atxmega64d4" => elf::EF_AVR_ARCH_XMEGA4,
305        "atxmega64a1" => elf::EF_AVR_ARCH_XMEGA5,
306        "atxmega64a1u" => elf::EF_AVR_ARCH_XMEGA5,
307        "atxmega128a3" => elf::EF_AVR_ARCH_XMEGA6,
308        "atxmega128a3u" => elf::EF_AVR_ARCH_XMEGA6,
309        "atxmega128b1" => elf::EF_AVR_ARCH_XMEGA6,
310        "atxmega128b3" => elf::EF_AVR_ARCH_XMEGA6,
311        "atxmega128c3" => elf::EF_AVR_ARCH_XMEGA6,
312        "atxmega128d3" => elf::EF_AVR_ARCH_XMEGA6,
313        "atxmega128d4" => elf::EF_AVR_ARCH_XMEGA6,
314        "atxmega192a3" => elf::EF_AVR_ARCH_XMEGA6,
315        "atxmega192a3u" => elf::EF_AVR_ARCH_XMEGA6,
316        "atxmega192c3" => elf::EF_AVR_ARCH_XMEGA6,
317        "atxmega192d3" => elf::EF_AVR_ARCH_XMEGA6,
318        "atxmega256a3" => elf::EF_AVR_ARCH_XMEGA6,
319        "atxmega256a3u" => elf::EF_AVR_ARCH_XMEGA6,
320        "atxmega256a3b" => elf::EF_AVR_ARCH_XMEGA6,
321        "atxmega256a3bu" => elf::EF_AVR_ARCH_XMEGA6,
322        "atxmega256c3" => elf::EF_AVR_ARCH_XMEGA6,
323        "atxmega256d3" => elf::EF_AVR_ARCH_XMEGA6,
324        "atxmega384c3" => elf::EF_AVR_ARCH_XMEGA6,
325        "atxmega384d3" => elf::EF_AVR_ARCH_XMEGA6,
326        "atxmega128a1" => elf::EF_AVR_ARCH_XMEGA7,
327        "atxmega128a1u" => elf::EF_AVR_ARCH_XMEGA7,
328        "atxmega128a4u" => elf::EF_AVR_ARCH_XMEGA7,
329        "attiny4" => elf::EF_AVR_ARCH_AVRTINY,
330        "attiny5" => elf::EF_AVR_ARCH_AVRTINY,
331        "attiny9" => elf::EF_AVR_ARCH_AVRTINY,
332        "attiny10" => elf::EF_AVR_ARCH_AVRTINY,
333        "attiny20" => elf::EF_AVR_ARCH_AVRTINY,
334        "attiny40" => elf::EF_AVR_ARCH_AVRTINY,
335        "attiny102" => elf::EF_AVR_ARCH_AVRTINY,
336        "attiny104" => elf::EF_AVR_ARCH_AVRTINY,
337        "attiny202" => elf::EF_AVR_ARCH_XMEGA3,
338        "attiny402" => elf::EF_AVR_ARCH_XMEGA3,
339        "attiny204" => elf::EF_AVR_ARCH_XMEGA3,
340        "attiny404" => elf::EF_AVR_ARCH_XMEGA3,
341        "attiny804" => elf::EF_AVR_ARCH_XMEGA3,
342        "attiny1604" => elf::EF_AVR_ARCH_XMEGA3,
343        "attiny406" => elf::EF_AVR_ARCH_XMEGA3,
344        "attiny806" => elf::EF_AVR_ARCH_XMEGA3,
345        "attiny1606" => elf::EF_AVR_ARCH_XMEGA3,
346        "attiny807" => elf::EF_AVR_ARCH_XMEGA3,
347        "attiny1607" => elf::EF_AVR_ARCH_XMEGA3,
348        "attiny212" => elf::EF_AVR_ARCH_XMEGA3,
349        "attiny412" => elf::EF_AVR_ARCH_XMEGA3,
350        "attiny214" => elf::EF_AVR_ARCH_XMEGA3,
351        "attiny414" => elf::EF_AVR_ARCH_XMEGA3,
352        "attiny814" => elf::EF_AVR_ARCH_XMEGA3,
353        "attiny1614" => elf::EF_AVR_ARCH_XMEGA3,
354        "attiny416" => elf::EF_AVR_ARCH_XMEGA3,
355        "attiny816" => elf::EF_AVR_ARCH_XMEGA3,
356        "attiny1616" => elf::EF_AVR_ARCH_XMEGA3,
357        "attiny3216" => elf::EF_AVR_ARCH_XMEGA3,
358        "attiny417" => elf::EF_AVR_ARCH_XMEGA3,
359        "attiny817" => elf::EF_AVR_ARCH_XMEGA3,
360        "attiny1617" => elf::EF_AVR_ARCH_XMEGA3,
361        "attiny3217" => elf::EF_AVR_ARCH_XMEGA3,
362        "attiny1624" => elf::EF_AVR_ARCH_XMEGA3,
363        "attiny1626" => elf::EF_AVR_ARCH_XMEGA3,
364        "attiny1627" => elf::EF_AVR_ARCH_XMEGA3,
365        "atmega808" => elf::EF_AVR_ARCH_XMEGA3,
366        "atmega809" => elf::EF_AVR_ARCH_XMEGA3,
367        "atmega1608" => elf::EF_AVR_ARCH_XMEGA3,
368        "atmega1609" => elf::EF_AVR_ARCH_XMEGA3,
369        "atmega3208" => elf::EF_AVR_ARCH_XMEGA3,
370        "atmega3209" => elf::EF_AVR_ARCH_XMEGA3,
371        "atmega4808" => elf::EF_AVR_ARCH_XMEGA3,
372        "atmega4809" => elf::EF_AVR_ARCH_XMEGA3,
373
374        // Unknown target CPU => Unspecified/generic code
375        _ => 0,
376    }
377}