summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCAssembler.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Don't force relaxation of AdvanceLoc instructions on OS X. gdb is happy withRafael Espindola2011-05-081-2/+1
| | | | | | | the smaller encoding and this cuts 270336 bytes from a release version of clang and 1246272 bytes from a debug build. llvm-svn: 131067
* MCAsmLayout: Add support for computing the symbol offset of variables. NotDaniel Dunbar2011-04-291-0/+27
| | | | | | currently used, because variables don't get reported as being "defined". llvm-svn: 130524
* Add a small temporary hack for producing identical eh_frame sections on OS X.Rafael Espindola2011-04-281-1/+2
| | | | | | | This removes one of the main advantages of moving eh_frame to MC, but makes the transition a lot easier to debug (run md5). llvm-svn: 130379
* No relocation produces a SLEB or ULEB, make sure they are handled in MC.Rafael Espindola2011-04-261-1/+3
| | | | llvm-svn: 130181
* Remove unused STL header includes.Jay Foad2011-04-231-1/+0
| | | | llvm-svn: 130068
* Gas is very inconsistent about when a relaxation/relocation is needed. DoRafael Espindola2011-02-161-2/+4
| | | | | | the right thing and stop trying to copy it. Fixes PR8944. llvm-svn: 125648
* Add support for the --noexecstack option.Rafael Espindola2011-01-231-1/+1
| | | | llvm-svn: 124077
* Relax address updates in the eh_frame section.Rafael Espindola2010-12-281-3/+37
| | | | llvm-svn: 122591
* Merge IsFixupFullyResolved and IsSymbolRefDifferenceFullyResolved. We nowRafael Espindola2010-12-241-12/+24
| | | | | | have a single point where targets test if a relocation is needed. llvm-svn: 122549
* Assert that the AddrDelta expression is really constant and wrap it in a setRafael Espindola2010-12-221-1/+3
| | | | | | if we have a lame assembler. llvm-svn: 122446
* Use references and simplify.Rafael Espindola2010-12-221-1/+1
| | | | llvm-svn: 122405
* Don't relax org or align. They change size as the relaxation happens, but theyRafael Espindola2010-12-211-42/+27
| | | | | | | are not actually relaxed. For example, a section with only alignments will never needs relaxation. llvm-svn: 122356
* Layout one section until no relaxations are done and then move to the nextRafael Espindola2010-12-211-34/+41
| | | | | | | | | | section. This helps because in practice sections form a dag with debug sections pointing to text sections. Finishing up the text sections first makes the debug section relaxation trivial. llvm-svn: 122314
* Thumb's forced-PC-alignment requirement applies to the _total_ displacement, ↵Owen Anderson2010-12-171-2/+2
| | | | | | | | | not just to the fragment relative portion. While the fragment boundary is usually already aligned, it is possible for it not to be, which would lead to a non-aligned final displacement. llvm-svn: 122091
* MC/Assembler: Strip out object writer arguments, now that it is always availableDaniel Dunbar2010-12-171-49/+36
| | | | | | -- and remove FIXME asking for the same! llvm-svn: 122032
* MC/Assembler: Make the MCObjectWriter available through the lifetime of theDaniel Dunbar2010-12-171-21/+11
| | | | | | assembler. llvm-svn: 122031
* MC: Move target specific fixup info descriptors to TargetAsmBackend instead ofDaniel Dunbar2010-12-161-2/+2
| | | | | | | the MCCodeEmitter, which seems like a better organization. - Also, cleaned up some magic constants while in the area. llvm-svn: 121953
* Fix typo in r121875.Owen Anderson2010-12-151-1/+1
| | | | llvm-svn: 121880
* Implement cleanups suggested by Daniel.Owen Anderson2010-12-151-7/+11
| | | | llvm-svn: 121875
* Relax alignment fragments.Rafael Espindola2010-12-151-29/+26
| | | | | | | | | | | With this we don't need the EffectiveSize field anymore. Without that field LayoutFragment only updates offsets and we don't need to invalidate the current fragment when it is relaxed (only the ones following it). This is also a very small improvement in the accuracy of the layout info as we now use the after relaxation size immediately. llvm-svn: 121857
* Patch by David Meyer to avoid a O(N^2) behaviour when relaxing fragments.Rafael Espindola2010-12-151-2/+5
| | | | | | | Since we now don't update addresses so early, we might relax a bit more than we need to. This is simillar to the issue in PR8467. llvm-svn: 121856
* ARM Fixups relative to thumb functions need to have the low bit of the valueJim Grosbach2010-12-141-0/+10
| | | | | | set for interworking to work properly. rdar://8755956 llvm-svn: 121778
* Fix an issue in some Thumb fixups, where the effective PC address needs to ↵Owen Anderson2010-12-091-2/+9
| | | | | | | | | | be 4-byte aligned when calculating the offset. Add a new fixup flag to represent this, and use it for the one fixups that I have a testcase for needing this. It's quite likely that the other Thumb fixups will need this too, and to have their fixup encoding logic adjusted accordingly. llvm-svn: 121408
* Layout each section independently. With the testcase in PR8711:Rafael Espindola2010-12-071-58/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | before: 4 assembler - Number of assembler layout and relaxation steps 78563 assembler - Number of emitted assembler fragments 8693904 assembler - Number of emitted object file bytes 271223 assembler - Number of evaluated fixups 330771677 assembler - Number of fragment layouts 5958 assembler - Number of relaxed instructions 2508361 mcexpr - Number of MCExpr evaluations real 0m26.123s user 0m25.694s sys 0m0.388s after: 4 assembler - Number of assembler layout and relaxation steps 78563 assembler - Number of emitted assembler fragments 8693904 assembler - Number of emitted object file bytes 271223 assembler - Number of evaluated fixups 231507 assembler - Number of fragment layouts 5958 assembler - Number of relaxed instructions 2508361 mcexpr - Number of MCExpr evaluations real 0m2.500s user 0m2.113s sys 0m0.273s And yes, the outputs are identical :-) llvm-svn: 121207
* Sorry for such a large commit. The summary is that only MachO cares about theRafael Espindola2010-12-071-107/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | actuall addresses in a .o file, so it is better to let the MachO writer compute it. This is good for two reasons. First, areas that shouldn't care about addresses now don't have access to it. Second, the layout of each section is independent. I should use this in a subsequent commit to speed it up. Most of the patch is just removing the section address computation. The two interesting parts are the change on how we handle padding in the end of sections and how MachO can get the address of a-b when a and b are in different sections. Since now the expression evaluation normally doesn't know the section address, it will think that a-b needs relocation and let the MachO writer know. Once it has computed the section addresses, it calls back the expression evaluation with the section addresses to resolve these expressions. The remaining problem is the handling of padding. Currently it will create a special alignment fragment at the end. Since that fragment doesn't update the alignment of the section, it needs the real address to be computed. Since now the layout will not compute a-b with a and b in different sections, the only effect that the special alignment fragment has is update the address size of the section. This can also be done by the MachO writer. llvm-svn: 121076
* Use references to simplify the code a bit.Rafael Espindola2010-12-061-3/+3
| | | | llvm-svn: 121050
* Remove the instruction fragment to data fragment lowering since it was causingRafael Espindola2010-12-061-98/+38
| | | | | | freed data to be read. I will open a bug to track it being reenabled. llvm-svn: 121028
* Remove the getAddress getter, initialize Ordinal in the constructor and useRafael Espindola2010-12-061-0/+1
| | | | | | that on the ELF writer to detect a section we created. llvm-svn: 120981
* Add a getSymbolOffset method and use it in the ELF writer.Rafael Espindola2010-12-061-0/+5
| | | | llvm-svn: 120977
* Once the layout is done we don't need to keep updating which fragments areRafael Espindola2010-12-041-13/+5
| | | | | | valid. Addresses will not change. llvm-svn: 120921
* Remember the contents of leb and dwarfline fragments when relaxing. This avoidsRafael Espindola2010-12-041-35/+19
| | | | | | having to evaluate the expression again when writing. llvm-svn: 120920
* The sections that the ELF object writer has to create are very simple andRafael Espindola2010-12-021-20/+0
| | | | | | | | contain only data. Handle them specially instead of using AddSectionToTheEnd. This moves a hack from the generic assembler to the elf writer. It is also a bit faster and should make other improvements easier. llvm-svn: 120683
* Remove unused argument.Rafael Espindola2010-12-011-3/+2
| | | | llvm-svn: 120621
* Invalidate the layout on any relaxation, not just Instructions. Bug found by ↵Rafael Espindola2010-11-231-9/+11
| | | | | | | | David Meyer. While here, remove unused argument and rename UpdateForSlide to Invalidate. llvm-svn: 120009
* Reuse data fragments while lowering. Patch by David Meyer.Rafael Espindola2010-11-231-26/+77
| | | | llvm-svn: 119999
* Add an assert.Rafael Espindola2010-11-191-1/+3
| | | | llvm-svn: 119788
* make isVirtualSection a virtual method on MCSection. Chris' suggestion.Rafael Espindola2010-11-171-5/+5
| | | | llvm-svn: 119547
* Change MCExpr::EvaluateAsRelocatableImpl of variables to return the originalRafael Espindola2010-11-151-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | 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. llvm-svn: 119152
* Speed up AddSectionToTheEnd. It was walking all fragments in all sections.Rafael Espindola2010-11-071-19/+4
| | | | | | | | | | 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. llvm-svn: 118377
* Relax dwarf line fragments. This fixes a crash in the included testcase.Rafael Espindola2010-11-071-13/+18
| | | | llvm-svn: 118365
* Do relaxations with FT_Org fragments. Fixes the FIXME:Rafael Espindola2010-11-021-18/+24
| | | | | | | | | // FIXME: We should compute this sooner, we don't want to recurse here, and // we would like to be more functional. In MCAssembler::ComputeFragmentSize. llvm-svn: 118080
* Add support for expressions in .sleb/.uleb directives.Rafael Espindola2010-11-021-37/+96
| | | | llvm-svn: 118023
* This is the last major patch to implement support for the .loc directiveKevin Enderby2010-09-301-0/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Make it possible for the MCObjectWriter to decide if a given fixup is fullyRafael Espindola2010-09-301-128/+27
| | | | | | | | | | | 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. llvm-svn: 115131
* Remove unused argument.Rafael Espindola2010-09-271-4/+3
| | | | llvm-svn: 114852
* MC: Add missing ')' in diagnostic.Daniel Dunbar2010-09-241-1/+1
| | | | llvm-svn: 114717
* Avoid some Mach-O specific alignment being done on ELF.Rafael Espindola2010-09-221-18/+20
| | | | llvm-svn: 114594
* Add a InitSections method to the streamer interface.Rafael Espindola2010-09-151-1/+1
| | | | | | | | | | | | | | 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. llvm-svn: 114027
* MC: Give a (lame) hard error if a .org directive would create an unreasonablyDaniel Dunbar2010-09-091-1/+1
| | | | | | large object file (> 1GB). llvm-svn: 113494
* MC/ELF: Allow null values in virtual sections, ELF doesn't use specialDaniel Dunbar2010-08-181-1/+16
| | | | | | directives for putting contents in .bss, for example. llvm-svn: 111376
OpenPOWER on IntegriCloud