mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
767a9365f0
and output the dwarf line number tables. This contains the code to emit and encode the dwarf line tables from the previously gathered information in the MCLineSection objects. This contains all the details to encode the line and address deltas into the dwarf line table. To do this an MCDwarfLineAddrFragment has been added. Also this moves the interface code out of Mach-O streamer into MCDwarf so it should be useable by other object file formats. There is now one call to be made from an MCObjectStreamer EmitInstruction() method: MCLineEntry::Make(this, getCurrentSection()); to create a line entry after each instruction is assembled. And one call call to be made from an MCObjectStreamer Finish() method: MCDwarfFileTable::Emit(this, DwarfLineSection); when getContext().hasDwarfFiles() is true and is passed a object file specific MCSection where to emit the dwarf file and the line tables. This appears to now be correct for 32-bit targets, at least x86. But the relocation entries for 64-bit Darwin needs some further work which is next up to work on. So for now the 64-bit Mach-O target does not output the dwarf file and line tables. llvm-svn: 115157
42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
//===- lib/MC/MCObjectWriter.cpp - MCObjectWriter implementation ----------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/MC/MCObjectWriter.h"
|
|
|
|
using namespace llvm;
|
|
|
|
MCObjectWriter::~MCObjectWriter() {
|
|
}
|
|
|
|
/// Utility function to encode a SLEB128 value.
|
|
void MCObjectWriter::EncodeSLEB128(int64_t Value, raw_ostream &OS) {
|
|
bool More;
|
|
do {
|
|
uint8_t Byte = Value & 0x7f;
|
|
// NOTE: this assumes that this signed shift is an arithmetic right shift.
|
|
Value >>= 7;
|
|
More = !((((Value == 0 ) && ((Byte & 0x40) == 0)) ||
|
|
((Value == -1) && ((Byte & 0x40) != 0))));
|
|
if (More)
|
|
Byte |= 0x80; // Mark this byte that that more bytes will follow.
|
|
OS << char(Byte);
|
|
} while (More);
|
|
}
|
|
|
|
/// Utility function to encode a ULEB128 value.
|
|
void MCObjectWriter::EncodeULEB128(uint64_t Value, raw_ostream &OS) {
|
|
do {
|
|
uint8_t Byte = Value & 0x7f;
|
|
Value >>= 7;
|
|
if (Value != 0)
|
|
Byte |= 0x80; // Mark this byte that that more bytes will follow.
|
|
OS << char(Byte);
|
|
} while (Value != 0);
|
|
}
|