[llvm] r180171 - Align the __LD,__compact_unwind section.
Rafael EspĂndola
rafael.espindola at gmail.com
Wed Apr 24 07:15:48 PDT 2013
a testcase would also be cool...
On 23 April 2013 23:11, Bill Wendling <isanbard at gmail.com> wrote:
> Author: void
> Date: Tue Apr 23 22:11:14 2013
> New Revision: 180171
>
> URL: http://llvm.org/viewvc/llvm-project?rev=180171&view=rev
> Log:
> Align the __LD,__compact_unwind section.
>
> I know what would be cool! We should align the compact unwind section because
> aligned data access is faster.
> <rdar://problem/13723271>
>
> Modified:
> llvm/trunk/lib/MC/MCDwarf.cpp
>
> Modified: llvm/trunk/lib/MC/MCDwarf.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=180171&r1=180170&r2=180171&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDwarf.cpp (original)
> +++ llvm/trunk/lib/MC/MCDwarf.cpp Tue Apr 23 22:11:14 2013
> @@ -1177,8 +1177,6 @@ void FrameEmitterImpl::EmitCompactUnwind
> if (!DwarfEHFrameOnly && Frame.Lsda)
> Encoding |= 0x40000000;
>
> - Streamer.SwitchSection(MOFI->getCompactUnwindSection());
> -
> // Range Start
> unsigned FDEEncoding = MOFI->getFDEEncoding(UsingCFI);
> unsigned Size = getSizeForEncoding(Streamer, FDEEncoding);
> @@ -1421,7 +1419,6 @@ MCSymbol *FrameEmitterImpl::EmitFDE(MCSt
> }
>
> // Call Frame Instructions
> -
> EmitCFIInstructions(streamer, frame.Instructions, frame.Begin);
>
> // Padding
> @@ -1482,11 +1479,23 @@ void MCDwarfFrameEmitter::Emit(MCStreame
> ArrayRef<MCDwarfFrameInfo> FrameArray = Streamer.getFrameInfos();
>
> // Emit the compact unwind info if available.
> - if (IsEH && MOFI->getCompactUnwindSection())
> - for (unsigned i = 0, n = Streamer.getNumFrameInfos(); i < n; ++i) {
> - const MCDwarfFrameInfo &Frame = Streamer.getFrameInfo(i);
> - Emitter.EmitCompactUnwind(Streamer, Frame);
> + if (IsEH && MOFI->getCompactUnwindSection()) {
> + unsigned NumFrameInfos = Streamer.getNumFrameInfos();
> + bool SectionEmitted = false;
> +
> + if (NumFrameInfos) {
> + for (unsigned i = 0; i < NumFrameInfos; ++i) {
> + const MCDwarfFrameInfo &Frame = Streamer.getFrameInfo(i);
> + if (Frame.CompactUnwindEncoding == 0) continue;
> + if (!SectionEmitted) {
> + Streamer.SwitchSection(MOFI->getCompactUnwindSection());
> + Streamer.EmitValueToAlignment(Context.getAsmInfo().getPointerSize());
> + SectionEmitted = true;
> + }
> + Emitter.EmitCompactUnwind(Streamer, Frame);
> + }
> }
> + }
>
> const MCSection &Section = IsEH ? *MOFI->getEHFrameSection() :
> *MOFI->getDwarfFrameSection();
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list