1*6bf22ae4SJim Lin //===-- M68kELFTargetObjectFile.cpp - M68k Object Files ---------*- C++ -*-===//
25ac19e0aSMin-Yih Hsu //
35ac19e0aSMin-Yih Hsu // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45ac19e0aSMin-Yih Hsu // See https://llvm.org/LICENSE.txt for license information.
55ac19e0aSMin-Yih Hsu // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65ac19e0aSMin-Yih Hsu //
75ac19e0aSMin-Yih Hsu //===----------------------------------------------------------------------===//
85ac19e0aSMin-Yih Hsu ///
95ac19e0aSMin-Yih Hsu /// \file
105ac19e0aSMin-Yih Hsu /// This file contains definitions for M68k ELF object file lowering.
115ac19e0aSMin-Yih Hsu ///
125ac19e0aSMin-Yih Hsu //===----------------------------------------------------------------------===//
135ac19e0aSMin-Yih Hsu
145ac19e0aSMin-Yih Hsu #include "M68kTargetObjectFile.h"
155ac19e0aSMin-Yih Hsu
165ac19e0aSMin-Yih Hsu #include "M68kSubtarget.h"
175ac19e0aSMin-Yih Hsu #include "M68kTargetMachine.h"
185ac19e0aSMin-Yih Hsu
195ac19e0aSMin-Yih Hsu #include "llvm/BinaryFormat/ELF.h"
205ac19e0aSMin-Yih Hsu #include "llvm/IR/DataLayout.h"
215ac19e0aSMin-Yih Hsu #include "llvm/IR/DerivedTypes.h"
225ac19e0aSMin-Yih Hsu #include "llvm/IR/GlobalVariable.h"
235ac19e0aSMin-Yih Hsu #include "llvm/MC/MCContext.h"
245ac19e0aSMin-Yih Hsu #include "llvm/MC/MCSectionELF.h"
255ac19e0aSMin-Yih Hsu #include "llvm/Support/CommandLine.h"
265ac19e0aSMin-Yih Hsu #include "llvm/Target/TargetMachine.h"
275ac19e0aSMin-Yih Hsu
285ac19e0aSMin-Yih Hsu using namespace llvm;
295ac19e0aSMin-Yih Hsu
305ac19e0aSMin-Yih Hsu static cl::opt<unsigned> SSThreshold(
315ac19e0aSMin-Yih Hsu "m68k-ssection-threshold", cl::Hidden,
325ac19e0aSMin-Yih Hsu cl::desc("Small data and bss section threshold size (default=8)"),
335ac19e0aSMin-Yih Hsu cl::init(8));
345ac19e0aSMin-Yih Hsu
Initialize(MCContext & Ctx,const TargetMachine & TM)355ac19e0aSMin-Yih Hsu void M68kELFTargetObjectFile::Initialize(MCContext &Ctx,
365ac19e0aSMin-Yih Hsu const TargetMachine &TM) {
375ac19e0aSMin-Yih Hsu TargetLoweringObjectFileELF::Initialize(Ctx, TM);
385ac19e0aSMin-Yih Hsu InitializeELF(TM.Options.UseInitArray);
395ac19e0aSMin-Yih Hsu
405ac19e0aSMin-Yih Hsu this->TM = &static_cast<const M68kTargetMachine &>(TM);
415ac19e0aSMin-Yih Hsu
425ac19e0aSMin-Yih Hsu // FIXME do we need `.sdata` and `.sbss` explicitly?
435ac19e0aSMin-Yih Hsu SmallDataSection = getContext().getELFSection(
445ac19e0aSMin-Yih Hsu ".sdata", ELF::SHT_PROGBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC);
455ac19e0aSMin-Yih Hsu
465ac19e0aSMin-Yih Hsu SmallBSSSection = getContext().getELFSection(".sbss", ELF::SHT_NOBITS,
475ac19e0aSMin-Yih Hsu ELF::SHF_WRITE | ELF::SHF_ALLOC);
485ac19e0aSMin-Yih Hsu }
49