================ @@ -263,11 +263,17 @@ bool AVRAsmPrinter::doFinalization(Module &M) { auto *Section = cast<MCSectionELF>(TLOF.SectionForGlobal(&GO, TM)); if (Section->getName().starts_with(".data")) NeedsCopyData = true; - else if (Section->getName().starts_with(".rodata") && SubTM->hasLPM()) + else if (Section->getName().starts_with(".rodata") && SubTM->hasLPM()) { // AVRs that have a separate program memory (that's most AVRs) store - // .rodata sections in RAM. - NeedsCopyData = true; - else if (Section->getName().starts_with(".bss")) + // .rodata sections in RAM, + // but XMEGA3 family maps all flash in the data space. + // Invoking __do_copy_data with 0 bytes to copy will crash, + // so we let the loader handle this for newer devices. + if (!(SubTM->hasFeatureSetFamilyXMEGA2() || + SubTM->hasFeatureSetFamilyXMEGA3() || + SubTM->hasFeatureSetFamilyXMEGA4())) + NeedsCopyData = true; ---------------- Patryk27 wrote:
Shouldn't we check the `rodata-in-ram` switch here? https://github.com/llvm/llvm-project/pull/146244 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits