aboutsummaryrefslogtreecommitdiff
path: root/lib/MC/MCAssembler.cpp
AgeCommit message (Collapse)Author
2010-11-19Add an assert.Rafael Espindola
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119788 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-17make isVirtualSection a virtual method on MCSection. Chris' suggestion.Rafael Espindola
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119547 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-15Change MCExpr::EvaluateAsRelocatableImpl of variables to return the originalRafael Espindola
variable if recursing fails to simplify it. Factor AliasedSymbol to be a method of MCSymbol. Update MCAssembler::EvaluateFixup to match the change in EvaluateAsRelocatableImpl. Remove the WeakRefExpr hack, as the object writer now sees the weakref with no extra effort needed. Nothing else is using MCTargetExpr, but keep it for now. Now that the ELF writer sees relocations with aliases, handle .weak foo2 foo2: .weak bar2 .set bar2,foo2 .quad bar2 the same way gas does and produce a relocation with bar2. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119152 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-07Speed up AddSectionToTheEnd. It was walking all fragments in all sections.Rafael Espindola
This is really slow with we have 1000s of sections each with a corresponding relocation section. Also, it is only used by the ELF writer to add basic data, so there is no need to force a new layout pass. Should fix PR8563. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118377 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-07Relax dwarf line fragments. This fixes a crash in the included testcase.Rafael Espindola
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118365 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-02Do relaxations with FT_Org fragments. Fixes the FIXME:Rafael Espindola
// FIXME: We should compute this sooner, we don't want to recurse here, and // we would like to be more functional. In MCAssembler::ComputeFragmentSize. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118080 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-02Add support for expressions in .sleb/.uleb directives.Rafael Espindola
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118023 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-30This is the last major patch to implement support for the .loc directiveKevin Enderby
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115157 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-30Make it possible for the MCObjectWriter to decide if a given fixup is fullyRafael Espindola
resolved or not. Different object files have different restrictions and different native assemblers have different idiosyncrasies we want to emulate for now. Move the existing MachO logic to the new place and implement an ELF one that gets fixups to globals right. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115131 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-27Remove unused argument.Rafael Espindola
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114852 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-24MC: Add missing ')' in diagnostic.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114717 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-22Avoid some Mach-O specific alignment being done on ELF.Rafael Espindola
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114594 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-15Add a InitSections method to the streamer interface.Rafael Espindola
The ELF implementation now creates text, data and bss to match the gnu as behavior. The text streamer still has the old MachO specific behavior since the testsuite checks that it will error when a directive is given before a setting the current section for example. A nice benefit is that -n is not required anymore when producing ELF files. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114027 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-09MC: Give a (lame) hard error if a .org directive would create an unreasonablyDaniel Dunbar
large object file (> 1GB). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113494 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-18MC/ELF: Allow null values in virtual sections, ELF doesn't use specialDaniel Dunbar
directives for putting contents in .bss, for example. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111376 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-16Layout helper function.Matt Fleming
Introduce a helper method to add a section to the end of a layout. This will be used by the ELF ObjectWriter code to add the metadata sections (symbol table, etc) to the end of an object file. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111171 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-16Record a symbol's size which is needed for ELF symbol tables.Matt Fleming
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111170 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-30MC: Initialize MCFragment::Offset, noticed by Cameron Esfahani.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109875 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-28MC: Put back the MCFragment vtable, so subclasses are destroyed properly (duh).Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109649 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-22Initial modifications to MCAssembler and TargetMachine for the MCJIT.Reid Kleckner
Patch by Olivier Meurant! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109080 91177308-0d34-0410-b5e6-96231b3b80d8
2010-06-29The variable ValueSize is set to 1 on both code paths, and thenDuncan Sands
ignored! Remove it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107138 91177308-0d34-0410-b5e6-96231b3b80d8
2010-06-16MC: Simplify MCAssembler::isSymbolLinkerVisible to only take an MCSymbol.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106142 91177308-0d34-0410-b5e6-96231b3b80d8
2010-06-01Don't call flush() at a library level which isn't checking for errorsDan Gohman
and doesn't know where the output is going. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105274 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-26MC: When running with -mc-relax-all, we can eagerly relax instructions and ↵Daniel Dunbar
avoid creating unnecessary MCInstFragments. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104736 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-26MC: Change RelaxInstruction to only take the input and output instructions.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104713 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-26MC: Simplify MayNeedRelaxation to not provide the fixups, so we can query itDaniel Dunbar
before encoding. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104707 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-26MC: Eliminate MCAsmFixup, replace with MCFixup.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104699 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-26MC: Use accessors for access to MCAsmFixup.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104697 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-26MC: Eliminate MCFragment vtable, which was unnecessary.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104689 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-14MC: Switch to completely lazy layout.Daniel Dunbar
- The eliminates the last major algorithmic problem with MC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103754 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-14MC: Extend MCAsmLayout to explicitly track which fragments have been layed ↵Daniel Dunbar
out, and enforce several invariants to LayoutFragment to ensure we only do layout in a sensible order. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103753 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-14MC: Implicitly assign section addresses when the previous fragment is layed out.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103752 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-14MC: Switch MCFragment to storing the layout order index, not its index in ↵Daniel Dunbar
the file. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103751 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-14MC: Change LayoutSection() to only do the section initializiation.Daniel Dunbar
Also, elimminate MCAsmLayout::set*, which are no longer needed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103750 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Move Layout{Fragment,Section} into MCAsmLayout, and add LayoutFile().Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103738 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Factor out MCAssembler::ComputeFragmentSize.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103724 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Add section layout order indices to MCSectionData.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103715 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Move ordinal calculation, to make sure fragments synthesized for layout ↵Daniel Dunbar
get assigned ordinals properly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103711 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Create dummy fragments to avoid ever having empty sections, which ↵Daniel Dunbar
simplifies layout. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103710 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Add MCAsmLayout::FragmentReplaced() helper function.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103709 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13Fix -Asserts warning.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103697 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Eliminate MCSectionData::{,Address,File}Size, which can now be computed byDaniel Dunbar
utility functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103695 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Switch to using explicit MCAlignFragments with OnlyAlignAddress bit insteadDaniel Dunbar
of manually doing padding/editing layout in LayoutSection(). - This probably seems like six-of-one and half-dozen of another, but there is a method to my madness. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103693 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Add MCAlignFragment::OnlyAlignAddress bit. This is a bit of magic that ↵Daniel Dunbar
says the align fragment shouldn't contribute to the logical section size, it is will be used for cleaning up the code to handle section alignment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103690 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-13MC: Add MCSectionData::AddressSize, which is the size of the address space ↵Daniel Dunbar
consumed by the section. This can differ from both the section logical size, and the section size on disk (although the current code handles this without making an explicit distinction). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103689 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-12MC: Move MCAlignFragment::EmitNops value out of the constructor.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103665 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-12MC: Eliminate MCZeroFillFragment, it is no longer needed.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103664 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-12MC: Explicitly check that only virtual fragments appear in virtual sections.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103663 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-12MC: Switch MCFillFragment to storing total fill size instead of a count. ↵Daniel Dunbar
This allows using ValueSize==0 to represent a virtual fill. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103662 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-12MC: Drop support for alignment in ZeroFill fragment, we can just useDaniel Dunbar
MCAlignFragments for this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103661 91177308-0d34-0410-b5e6-96231b3b80d8