[clang] [llvm] [AVR] Handle flash RO data mapped to data space for newer devices (PR #146244)
Fangrui Song via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 2 09:55:09 PDT 2025
================
@@ -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() ||
----------------
MaskRay wrote:
(Sorry, didn't see that tomtor is the author :) )
https://github.com/llvm/llvm-project/pull/146244
More information about the cfe-commits
mailing list