[clang] [llvm] [AVR] Handle flash RO data mapped to data space for newer devices (PR #146244)
Patryk Wychowaniec via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 1 06:47:05 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() ||
----------------
Patryk27 wrote:
Could we check for `FeatureFLMAP` in here instead?
Feels like that's what it is supposed to do eventually, but we use family as a proxy for the actual flag we're interested in.
https://github.com/llvm/llvm-project/pull/146244
More information about the llvm-commits
mailing list