blob: a2d7ab1224ee5e34240724278ab9a44995b3d213 [file] [log] [blame]
Bill Wendling59b1ca22009-05-10 23:14:38 +00001//===-- llvm/CodeGen/DwarfWriter.cpp - Dwarf Framework --------------------===//
Jim Laskey7b52a922005-12-21 19:48:16 +00002//
3// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jim Laskey7b52a922005-12-21 19:48:16 +00007//
8//===----------------------------------------------------------------------===//
9//
Jim Laskeyb4a2f052007-01-29 18:51:14 +000010// This file contains support for writing dwarf info into asm files.
Jim Laskey7b52a922005-12-21 19:48:16 +000011//
12//===----------------------------------------------------------------------===//
Jim Laskey4a84e972006-01-27 18:32:41 +000013
Jim Laskey219d5592006-01-04 22:28:25 +000014#include "llvm/CodeGen/DwarfWriter.h"
Bill Wendling2f921f82009-05-15 09:23:25 +000015#include "DwarfDebug.h"
Bill Wendlingd64cd2b2009-05-15 01:12:28 +000016#include "DwarfException.h"
Jim Laskeyc56315c2007-01-26 21:22:28 +000017#include "llvm/CodeGen/MachineModuleInfo.h"
Bill Wendling2f921f82009-05-15 09:23:25 +000018
Jim Laskey219d5592006-01-04 22:28:25 +000019using namespace llvm;
Jim Laskeyb0609d92006-01-04 13:52:30 +000020
Devang Patelf6466682009-01-08 23:40:34 +000021static RegisterPass<DwarfWriter>
22X("dwarfwriter", "DWARF Information Writer");
23char DwarfWriter::ID = 0;
24
Jim Laskeyb9966022006-01-17 17:31:53 +000025//===----------------------------------------------------------------------===//
Jim Laskey43c19122006-10-30 13:35:07 +000026/// DwarfWriter Implementation
Jim Laskey936d5462006-11-02 20:12:39 +000027///
Jim Laskey43c19122006-10-30 13:35:07 +000028
Bill Wendlinge8dd2842009-03-10 20:41:52 +000029DwarfWriter::DwarfWriter()
Bill Wendling6e6d1b22009-03-10 21:23:25 +000030 : ImmutablePass(&ID), DD(0), DE(0) {}
Jim Laskey43c19122006-10-30 13:35:07 +000031
32DwarfWriter::~DwarfWriter() {
Jim Laskeyb4a2f052007-01-29 18:51:14 +000033 delete DE;
34 delete DD;
Jim Laskey43c19122006-10-30 13:35:07 +000035}
36
Jim Laskey43c19122006-10-30 13:35:07 +000037/// BeginModule - Emit all Dwarf sections that should come prior to the
38/// content.
Devang Patelf6466682009-01-08 23:40:34 +000039void DwarfWriter::BeginModule(Module *M,
40 MachineModuleInfo *MMI,
41 raw_ostream &OS, AsmPrinter *A,
Chris Lattner7b26fce2009-08-22 20:48:53 +000042 const MCAsmInfo *T) {
Devang Patelf6466682009-01-08 23:40:34 +000043 DE = new DwarfException(OS, A, T);
44 DD = new DwarfDebug(OS, A, T);
Devang Patel0c044ec2009-06-25 22:36:02 +000045 DE->BeginModule(M, MMI);
Devang Patel930143b2009-11-21 02:48:08 +000046 DD->beginModule(M, MMI);
Jim Laskey43c19122006-10-30 13:35:07 +000047}
48
49/// EndModule - Emit all Dwarf sections that should come after the content.
50///
51void DwarfWriter::EndModule() {
Jim Laskeyb4a2f052007-01-29 18:51:14 +000052 DE->EndModule();
Devang Patel930143b2009-11-21 02:48:08 +000053 DD->endModule();
Duncan Sands4bd80402009-09-11 17:24:29 +000054 delete DD; DD = 0;
55 delete DE; DE = 0;
Jim Laskey43c19122006-10-30 13:35:07 +000056}
57
Anton Korobeynikovbd890b12008-08-16 12:57:46 +000058/// BeginFunction - Gather pre-function debug information. Assumes being
Jim Laskey43c19122006-10-30 13:35:07 +000059/// emitted immediately after the function entry point.
Chris Lattner76555b52010-01-26 23:18:02 +000060void DwarfWriter::BeginFunction(const MachineFunction *MF) {
Jim Laskeyb4a2f052007-01-29 18:51:14 +000061 DE->BeginFunction(MF);
Devang Patel930143b2009-11-21 02:48:08 +000062 DD->beginFunction(MF);
Jim Laskey43c19122006-10-30 13:35:07 +000063}
64
65/// EndFunction - Gather and emit post-function debug information.
66///
Chris Lattner76555b52010-01-26 23:18:02 +000067void DwarfWriter::EndFunction(const MachineFunction *MF) {
Devang Patel930143b2009-11-21 02:48:08 +000068 DD->endFunction(MF);
Jim Laskeyc3de9b42007-02-01 16:31:34 +000069 DE->EndFunction();
Anton Korobeynikovbd890b12008-08-16 12:57:46 +000070
Bill Wendling9fe8b292008-07-22 00:53:37 +000071 if (MachineModuleInfo *MMI = DD->getMMI() ? DD->getMMI() : DE->getMMI())
Jim Laskeyc3de9b42007-02-01 16:31:34 +000072 // Clear function debug information.
73 MMI->EndFunction();
Jim Laskey43c19122006-10-30 13:35:07 +000074}
Devang Pateldf31a722009-01-12 19:17:34 +000075
Bill Wendling0a0987d2009-02-20 00:44:43 +000076/// ShouldEmitDwarfDebug - Returns true if Dwarf debugging declarations should
77/// be emitted.
78bool DwarfWriter::ShouldEmitDwarfDebug() const {
Argyrios Kyrtzidis97324ce2009-05-03 08:50:41 +000079 return DD && DD->ShouldEmitDwarfDebug();
Bill Wendling0a0987d2009-02-20 00:44:43 +000080}
Devang Patel80be3512009-04-13 17:02:03 +000081
Devang Patelbd477be2010-03-29 17:20:31 +000082void DwarfWriter::BeginScope(const MachineInstr *MI) {
83 DD->beginScope(MI);
Devang Patel80be3512009-04-13 17:02:03 +000084}
Devang Patelf6eeaeb2009-11-10 23:06:00 +000085void DwarfWriter::EndScope(const MachineInstr *MI) {
Devang Patel930143b2009-11-21 02:48:08 +000086 DD->endScope(MI);
Devang Patel4598eb62009-10-06 18:37:31 +000087}