[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:54:26 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:
Unless trivial (e.g. typo fix), "marked this conversation as resolved." should only be used by reviewers per suggestions on https://discourse.llvm.org/t/rfc-github-pr-resolve-conversation-button/73178
https://github.com/llvm/llvm-project/pull/146244
More information about the cfe-commits
mailing list