aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCContext.cpp
AgeCommit message (Collapse)AuthorFilesLines
2014-11-19Remove StringMap::GetOrCreateValue in favor of StringMap::insertDavid Blaikie1-21/+14
Having two ways to do this doesn't seem terribly helpful and consistently using the insert version (which we already has) seems like it'll make the code easier to understand to anyone working with standard data structures. (I also updated many references to the Entry's key and value to use first() and second instead of getKey{Data,Length,} and get/setValue - for similar consistency) Also removes the GetOrCreateValue functions so there's less surface area to StringMap to fix/improve/change/accommodate move semantics, etc. llvm-svn: 222319
2014-10-17Add back commits r219835 and a fixed version of r219829.Rafael Espindola1-0/+24
The only difference from r219829 is using getOrCreateSectionSymbol(*ELFSec) instead of GetOrCreateSymbol(ELFSec->getSectionName()) in ELFObjectWriter which causes us to use the correct section symbol even if we have multiple sections with the same name. Original messages: r219829: Correctly handle references to section symbols. When processing assembly like .long .text we were creating a new undefined symbol .text. GAS on the other hand would handle that as a reference to the .text section. This patch implements that by creating the section symbols earlier so that they are visible during asm parsing. The patch also updates llvm-readobj to print the symbol number in the relocation dump so that the test can differentiate between two sections with the same name. r219835: Allow forward references to section symbols. llvm-svn: 220021
2014-10-17Revert commit r219835 and r219829.Rafael Espindola1-24/+0
Revert "Correctly handle references to section symbols." Revert "Allow forward references to section symbols." Rui found a regression I am debugging. llvm-svn: 220010
2014-10-15Allow forward references to section symbols.Rafael Espindola1-1/+8
llvm-svn: 219835
2014-10-15Correctly handle references to section symbols.Rafael Espindola1-0/+17
When processing assembly like .long .text we were creating a new undefined symbol .text. GAS on the other hand would handle that as a reference to the .text section. This patch implements that by creating the section symbols earlier so that they are visible during asm parsing. The patch also updates llvm-readobj to print the symbol number in the relocation dump so that the test can differentiate between two sections with the same name. llvm-svn: 219829
2014-09-17Add and update reset() and doInitialization() methods to MC* and passes.Yaron Keren1-0/+3
This enables reusing a PassManager instead of re-constructing it every time. llvm-svn: 217948
2014-09-04MC Win64: Put unwind info for COMDAT code into the same COMDAT groupReid Kleckner1-0/+16
Summary: This fixes a long standing issue where we would emit many little .text sections and only one .pdata and .xdata section. Now we generate one .pdata / .xdata pair per .text section and associate them correctly. Fixes PR19667. Reviewers: majnemer Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D5181 llvm-svn: 217176
2014-07-14CodeGen: Stick constant pool entries in COMDAT sections for WinCOFFDavid Majnemer1-1/+1
COFF lacks a feature that other object file formats support: mergeable sections. To work around this, MSVC sticks constant pool entries in special COMDAT sections so that each constant is in it's own section. This permits unused constants to be dropped and it also allows duplicate constants in different translation units to get merged together. This fixes PR20262. Differential Revision: http://reviews.llvm.org/D4482 llvm-svn: 213006
2014-07-06SourceMgr: make valid buffer IDs start from oneAlp Toker1-2/+3
Use 0 for the invalid buffer instead of -1/~0 and switch to unsigned representation to enable more idiomatic usage. Also introduce a trivial SourceMgr::getMainFileID() instead of hard-coding 0/1 to identify the main file. llvm-svn: 212398
2014-06-27MC: Fix associative sections on COFFDavid Majnemer1-5/+5
COFF sections in MC were represented by a tuple of section-name and COMDAT-name. This is not sufficient to represent a .text section associated with another .text section; we need a way to distinguish between the key section and the one marked associative. llvm-svn: 211913
2014-06-26Revert "Introduce a string_ostream string builder facilty"Alp Toker1-6/+8
Temporarily back out commits r211749, r211752 and r211754. llvm-svn: 211814
2014-06-26Introduce a string_ostream string builder faciltyAlp Toker1-8/+6
string_ostream is a safe and efficient string builder that combines opaque stack storage with a built-in ostream interface. small_string_ostream<bytes> additionally permits an explicit stack storage size other than the default 128 bytes to be provided. Beyond that, storage is transferred to the heap. This convenient class can be used in most places an std::string+raw_string_ostream pair or SmallString<>+raw_svector_ostream pair would previously have been used, in order to guarantee consistent access without byte truncation. The patch also converts much of LLVM to use the new facility. These changes include several probable bug fixes for truncated output, a programming error that's no longer possible with the new interface. llvm-svn: 211749
2014-06-19Emit DWARF info for all code section in an assembly fileOliver Stannard1-0/+23
Currently, when using llvm as an assembler, DWARF debug information is only generated for the .text section. This patch modifies this so that DWARF info is emitted for all executable sections. llvm-svn: 211273
2014-06-13Remove 'using std::errro_code' from lib.Rafael Espindola1-2/+1
llvm-svn: 210871
2014-06-12Don't use 'using std::error_code' in include/llvm.Rafael Espindola1-0/+1
This should make sure that most new uses use the std prefix. llvm-svn: 210835
2014-06-06Fix a few issues with comdat handling on COFF.Rafael Espindola1-6/+7
* Section association cannot use just the section name as many sections can have the same name. With this patch, the comdat symbol in an assoc section is interpreted to mean a symbol in the associated section and the mapping is discovered from it. * Comdat symbols were not being set correctly. Instead we were getting whatever was output first for that section. A consequence is that associative sections now must use .section to set the association. Using .linkonce would not work since it is not possible to change a sections comdat symbol (it is used to decide if we should create a new section or reuse an existing one). This includes r210298, which was reverted because it was asserting on an associated section having the same comdat as the associated section. llvm-svn: 210367
2014-05-01Fix uninitialized variable introduced in r207739.David Blaikie1-1/+1
This was initialized by llvm-mc (calling setDwarfVersion) but other clients (such as clang, llc, etc) aren't necessarily initializing this so we were getting garbage DWARF version values in the output. Initialize it to a reasonable default (the same default used in llvm-mc, though this is higher than it was (2) previously). llvm-svn: 207788
2014-04-22Change the prototype for MCContext::FatalError() so it can be calledKevin Enderby1-1/+1
from places like MCCodeEmitter() in the MC backend when the MCContext is const. I was going to use this in my change for r206669 but Jim convinced me to use an assert there. But this still is a good tweak. llvm-svn: 206923
2014-04-13[C++11] More 'nullptr' conversion or in some cases just using a boolean ↵Craig Topper1-7/+7
check instead of comparing to nullptr. llvm-svn: 206129
2014-04-11Pull out a named variable for the cached section names to aid readability.David Blaikie1-6/+8
Based on a code review suggestion from Eric Christopher in r205990 llvm-svn: 206080
2014-04-10Remove lazy-initialization of section caches in MCContextDavid Blaikie1-52/+18
This seems to have been a cargo-culted habit from the very first such cache which didn't have any specific justification (but might've been a layering constraint at the time). llvm-svn: 206003
2014-04-10Reimplement debug info compression by compressing the whole section, rather ↵David Blaikie1-0/+15
than a fragment. To support compressing the debug_line section that contains multiple fragments (due, I believe, to variation in choices of line table encoding depending on the size of instruction ranges in the actual program code) we needed to support compressing multiple MCFragments in a single pass. This patch implements that behavior by mutating the post-relaxed and relocated section to be the compressed form of its former self, including renaming the section. This is a more flexible (and less invasive, to a degree) implementation that will allow for other features such as "use compression only if it's smaller than the uncompressed data". Compressing debug_frame would be a possible further extension to this work, but I've left it for now. The hurdle there is alignment sections - which might require going as far as to refactor MCAssembler.cpp:writeFragment to handle writing to a byte buffer or an MCObjectWriter (there's already a virtual call there, so it shouldn't add substantial compile-time cost) which could in turn involve refactoring MCAsmBackend::writeNopData to use that same abstraction... which involves touching all the backends. This would remove the limited handling of fragment writing seen in ELFObjectWriter.cpp:getUncompressedData which would be nice - but it's more invasive. I did discover that I (perhaps obviously) don't need to handle relocations when I rewrite the fragments - since the relocations have already been applied and computed (and stored into ELFObjectWriter::Relocations) by this stage (necessarily, because we need to have written any immediate values or assembly-time relocations into the data already before we compress it, which we have). The test case doesn't necessarily cover that in detail - I can add more test coverage if that's preferred. llvm-svn: 205990
2014-04-10Revert debug info compression support.David Blaikie1-5/+0
To support compression for debug_line and debug_frame a different approach is required. To simplify review, revert the old implementation and XFAIL the test case. New implementation to follow shortly. Reverts r205059 and r204958. llvm-svn: 205989
2014-03-29MachO: allow each section to have a linker-private symbolTim Northover1-0/+7
The upcoming ARM64 backend doesn't have section-relative relocations, so we give each section its own symbol to provide this functionality. Of course, it doesn't need to appear in the final executable, so linker-private is the best kind for this purpose. llvm-svn: 205081
2014-03-28Debug Compression: Avoid compression debug_frame for nowDavid Blaikie1-1/+1
Turns out debug_frame does use multiple fragments, so it doesn't compress correctly with the current approach. Disable compressing it for now while I figure out what's the best solution for it. llvm-svn: 205059
2014-03-27DebugInfo: Support for compressed debug info sectionsDavid Blaikie1-7/+12
1) When creating a .debug_* section and instead create a .zdebug_ section. 2) When creating a fragment in a .zdebug_* section, make it a compressed fragment. 3) When computing the size of a compressed section, compress the data and use the size of the compressed data. 4) Emit the compressed bytes. Also, check that only if a section has a compressed fragment, then that is the only fragment in the section. Assert-fail if the fragment's data is modified after it is compressed. Initial review on llvm-commits by Eric Christopher and Rafael Espindola. llvm-svn: 204958
2014-03-14MC: don't create a backtrace for diagnostics.Jim Grosbach1-1/+1
For better or worse, this is currently the normal error reporting path when dealing with backend errors from inline assembly. It's not just internal compiler issues that come through here, so we shouldn't be creating a backtrace on this path. rdar://16329947 llvm-svn: 203979
2014-03-14MCContext: Remove redundant assignmentDavid Blaikie1-2/+0
The member variable is not initialized in the ctor so it's already empty. No need to empty it again. llvm-svn: 203963
2014-03-13MCDwarf: Rename MCDwarfFileTable to MCDwarfLineTableDavid Blaikie1-2/+2
This type now represents all the data for the DWARF line table: directory names, file names, and the line table proper. llvm-svn: 203858
2014-03-13MCDwarf: Sink file/directory creation down into MCDwarfFileTable form MCContextDavid Blaikie1-50/+1
llvm-svn: 203836
2014-03-13MCDwarf: Oh, and move the directory string over to std::string as wellDavid Blaikie1-6/+3
(see r203831 for similar stuff) llvm-svn: 203833
2014-03-13MCDwarf: Simplify MCDwarfFile to just use std::string instead of cunning use ↵David Blaikie1-16/+10
of MCContext's allocator. There aren't /that/ many files, and we are already using various maps and other standard containers that don't use MCContext's allocator to store these values, so this doesn't seem to be critical and simplifies the design (I'll be moving construction out of MCContext shortly so it'd be annoying to have to pass the allocator around to allocate these things... and we'll have non-MCContext users (debug_line.dwo) shortly) llvm-svn: 203831
2014-03-13MCDwarf: Simply MCDwarfFile since it really is just a StringRef and unsigned.David Blaikie1-1/+3
llvm-svn: 203827
2014-03-13Use printable names to implement directional labels.Rafael Espindola1-13/+20
This changes the implementation of local directional labels to use a dedicated map. With that it can then just use CreateTempSymbol, which is what the rest of MC uses. CreateTempSymbol doesn't do a great job at making sure the names are unique (or being efficient when the names are not needed), but that should probably be fixed in a followup patch. This fixes pr18928. llvm-svn: 203826
2014-03-13Remove stale commentDavid Blaikie1-4/+0
llvm-svn: 203823
2014-03-13MCDwarf: Refactor line table handling into a single data structureDavid Blaikie1-7/+5
This replaces several "compile unit ID -> thing" mappings in favor of one mapping from CUID to the whole line table structure (files, directories, and lines). This is another step along the way to refactoring out reusable components of line table handling for use when generating debug_line.dwo for fission type units. Also, might be a good basis to fold some of this handling down into MCStreamers to avoid the special case of "One line table when doing asm printing, line table per CU otherwise" by building it into the different MCStreamer implementations. llvm-svn: 203821
2014-03-12MCDwarf: Invert the Section+CU->LineEntries mapping so the CU is the primary ↵David Blaikie1-1/+0
dimension This makes the mapping consistent with other CU->X mappings in the MCContext, helping pave the way to refactor all these values into a single data structure per CU and thus a single map. I haven't renamed the data structure as that would make the patch churn even higher (the MCLineSection name no longer makes sense, as this structure now contains lines for multiple sections covered by a single CU, rather than lines for a single section in multiple CUs) and further refactorings will follow that may remove this type entirely. For convenience, I also gave the MCLineSection value semantics so we didn't have to do the lazy construction, manual delete, etc. (& for those playing at home, refactoring the line printing into a single data structure will eventually alow that data structure to be reused to own the debug_line.dwo line table used for type unit file name resolution) llvm-svn: 203726
2014-03-12Correct typo ("a entry" -> "an entry")David Blaikie1-1/+1
llvm-svn: 203678
2014-01-07Re-sort all of the includes with ./utils/sort_includes.py so thatChandler Carruth1-1/+0
subsequent changes are easier to review. About to fix some layering issues, and wanted to separate out the necessary churn. Also comment and sink the include of "Windows.h" in three .inc files to match the usage in Memory.inc. llvm-svn: 198685
2013-12-10Fix a crash that occurs when PWD is invalid.Andrew Trick1-2/+2
MCJIT needs to be able to run in hostile environments, even when PWD is invalid. There's no need to crash MCJIT in this case. The obvious fix is to simply leave MCContext's CompilationDir empty when PWD can't be determined. This way, MCJIT clients, and other clients that link with LLVM don’t need a valid working directory. If we do want to guarantee valid CompilationDir, that should be done only for clients of getCompilationDir(). This is as simple as checking for an empty string. The only current use of getCompilationDir is EmitGenDwarfInfo, which won’t conceivably run with an invalid working dir. However, in the purely hypothetically and untestable case that this happens, the AT_comp_dir will be omitted from the compilation_unit DIE. llvm-svn: 196874
2013-12-10whitespaceAndrew Trick1-2/+2
llvm-svn: 196873
2013-12-05Correct word hyphenationsAlp Toker1-1/+1
This patch tries to avoid unrelated changes other than fixing a few hyphen-related ambiguities and contractions in nearby lines. llvm-svn: 196471
2013-12-03Avoid buffer copies when a Twine already is a StringRef.David Blaikie1-2/+1
llvm-svn: 196301
2013-11-19Support multiple COFF sections with the same name but different COMDAT.Rafael Espindola1-13/+31
This is the first step to fix pr17918. It extends the .section directive a bit, inspired by what the ELF one looks like. The problem with using linkonce is that given .section foo .linkonce.... .section foo .linkonce we would already have switched sections when getting to .linkonce. The cleanest solution seems to be to add the comdat information in the .section itself. llvm-svn: 195148
2013-10-22MC: Support multiple sections with the same name in the same comdat groupDavid Blaikie1-6/+12
Code review by Eric Christopher and Rafael Espindola. llvm-svn: 193209
2013-07-06MC: Implement COFF .linkonce directiveNico Rieck1-5/+13
llvm-svn: 185753
2013-06-18Use pointers to the MCAsmInfo and MCRegInfo.Bill Wendling1-5/+5
Someone may want to do something crazy, like replace these objects if they change or something. No functionality change intended. llvm-svn: 184175
2013-06-16Silence warning in Release builds.Benjamin Kramer1-0/+1
llvm-svn: 184059
2013-06-14Replace use of PathV1.h in MCContext.cpp.Rafael Espindola1-2/+4
GetCurrentDirectory is now unused. Remove it. llvm-svn: 184003
2013-06-13Don't use PathV1.h in Signals.h.Rafael Espindola1-0/+1
llvm-svn: 183947