mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 03:23:01 +02:00
c7b264dacb
Summary: This adds a set of new directives that describe 32-bit x86 prologues. The directives are limited and do not expose the full complexity of codeview FPO data. They are merely a convenience for the compiler to generate more readable assembly so we don't need to generate tons of labels in CodeGen. If our prologue emission changes in the future, we can change the set of available directives to suit our needs. These are modelled after the .seh_ directives, which use a different format that interacts with exception handling. The directives are: .cv_fpo_proc _foo .cv_fpo_pushreg ebp/ebx/etc .cv_fpo_setframe ebp/esi/etc .cv_fpo_stackalloc 200 .cv_fpo_endprologue .cv_fpo_endproc .cv_fpo_data _foo I tried to follow the implementation of ARM EHABI CFI directives by sinking most directives out of MCStreamer and into X86TargetStreamer. This helps avoid polluting non-X86 code with WinCOFF specific logic. I used cdb to confirm that this can show locals in parent CSRs in a few cases, most importantly the one where we use ESI as a frame pointer, i.e. the one in http://crbug.com/756153#c28 Once we have cdb integration in debuginfo-tests, we can add integration tests there. Reviewers: majnemer, hans Subscribers: aemerson, mgorny, kristof.beyls, llvm-commits, hiraditya Differential Revision: https://reviews.llvm.org/D38776 llvm-svn: 315513
35 lines
1.2 KiB
C++
35 lines
1.2 KiB
C++
//===- X86TargetStreamer.h ------------------------------*- C++ -*---------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_X86_MCTARGETDESC_X86TARGETSTREAMER_H
|
|
#define LLVM_LIB_TARGET_X86_MCTARGETDESC_X86TARGETSTREAMER_H
|
|
|
|
#include "llvm/MC/MCStreamer.h"
|
|
|
|
namespace llvm {
|
|
|
|
/// X86 target streamer implementing x86-only assembly directives.
|
|
class X86TargetStreamer : public MCTargetStreamer {
|
|
public:
|
|
X86TargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
|
|
|
|
virtual bool emitFPOProc(const MCSymbol *ProcSym, unsigned ParamsSize,
|
|
SMLoc L = {}) = 0;
|
|
virtual bool emitFPOEndPrologue(SMLoc L = {}) = 0;
|
|
virtual bool emitFPOEndProc(SMLoc L = {}) = 0;
|
|
virtual bool emitFPOData(const MCSymbol *ProcSym, SMLoc L = {}) = 0;
|
|
virtual bool emitFPOPushReg(unsigned Reg, SMLoc L = {}) = 0;
|
|
virtual bool emitFPOStackAlloc(unsigned StackAlloc, SMLoc L = {}) = 0;
|
|
virtual bool emitFPOSetFrame(unsigned Reg, SMLoc L = {}) = 0;
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|