1//===-- AVRTargetStreamer.cpp - AVR Target Streamer Methods ---------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file provides AVR specific target streamer methods.
10//
11//===----------------------------------------------------------------------===//
12
13#include "AVRTargetStreamer.h"
14
15#include "llvm/MC/MCContext.h"
16
17namespace llvm {
18
19AVRTargetStreamer::AVRTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
20
21AVRTargetAsmStreamer::AVRTargetAsmStreamer(MCStreamer &S)
22    : AVRTargetStreamer(S) {}
23
24void AVRTargetStreamer::finish() {
25  MCStreamer &OS = getStreamer();
26  MCContext &Context = OS.getContext();
27
28  MCSymbol *DoCopyData = Context.getOrCreateSymbol("__do_copy_data");
29  MCSymbol *DoClearBss = Context.getOrCreateSymbol("__do_clear_bss");
30
31  // FIXME: We can disable __do_copy_data if there are no static RAM variables.
32
33  OS.emitRawComment(" Declaring this symbol tells the CRT that it should");
34  OS.emitRawComment("copy all variables from program memory to RAM on startup");
35  OS.EmitSymbolAttribute(DoCopyData, MCSA_Global);
36
37  OS.emitRawComment(" Declaring this symbol tells the CRT that it should");
38  OS.emitRawComment("clear the zeroed data section on startup");
39  OS.EmitSymbolAttribute(DoClearBss, MCSA_Global);
40}
41
42} // end namespace llvm
43
44