mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
Also enables '__do_clear_bss'. These functions are automaticalled called by the CRT if they are declared. We need these to be called otherwise RAM will start completely uninitialised, even though we need to copy RAM variables from progmem to RAM. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312905 91177308-0d34-0410-b5e6-96231b3b80d8
45 lines
1.5 KiB
C++
45 lines
1.5 KiB
C++
//===-- AVRTargetStreamer.cpp - AVR Target Streamer Methods ---------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file provides AVR specific target streamer methods.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "AVRTargetStreamer.h"
|
|
|
|
#include "llvm/MC/MCContext.h"
|
|
|
|
namespace llvm {
|
|
|
|
AVRTargetStreamer::AVRTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
|
|
|
|
AVRTargetAsmStreamer::AVRTargetAsmStreamer(MCStreamer &S)
|
|
: AVRTargetStreamer(S) {}
|
|
|
|
void AVRTargetStreamer::finish() {
|
|
MCStreamer &OS = getStreamer();
|
|
MCContext &Context = OS.getContext();
|
|
|
|
MCSymbol *DoCopyData = Context.getOrCreateSymbol("__do_copy_data");
|
|
MCSymbol *DoClearBss = Context.getOrCreateSymbol("__do_clear_bss");
|
|
|
|
// FIXME: We can disable __do_copy_data if there are no static RAM variables.
|
|
|
|
OS.emitRawComment(" Declaring this symbol tells the CRT that it should");
|
|
OS.emitRawComment("copy all variables from program memory to RAM on startup");
|
|
OS.EmitSymbolAttribute(DoCopyData, MCSA_Global);
|
|
|
|
OS.emitRawComment(" Declaring this symbol tells the CRT that it should");
|
|
OS.emitRawComment("clear the zeroed data section on startup");
|
|
OS.EmitSymbolAttribute(DoClearBss, MCSA_Global);
|
|
}
|
|
|
|
} // end namespace llvm
|
|
|