Files
clang-p2996/lldb/source/Plugins/Process/Utility/InferiorCallPOSIX.h
Stephane Sezer 728384a05e Prevent infinite recursive loop in AppleObjCTrampolineHandler constructor
Summary:
When we construct AppleObjCTrampolineHandler, if m_impl_fn_addr is
invalid, we call CanJIT(). If the gdb remote process does not support
allocating and deallocating memory, this call stack will include a call
to the AppleObjCRuntime constructor. The AppleObjCRuntime constructor
will then call the AppleObjCTrampolineHandler constructor, creating a
recursive call loop that eventually overflows the stack and segfaults.

Avoid this call loop by not constructing the AppleObjCTrampolineHandler
within AppleObjCRuntime until we actually need to use it.

Reviewers: clayborg, jingham

Subscribers: sas, lldb-commits

Differential Revision: http://reviews.llvm.org/D15978

Change by Francis Ricci <fjricci@fb.com>

llvm-svn: 257204
2016-01-08 20:32:35 +00:00

40 lines
1.1 KiB
C++

//===-- InferiorCallPOSIX.h -------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef lldb_InferiorCallPOSIX_h_
#define lldb_InferiorCallPOSIX_h_
// Inferior execution of POSIX functions.
#include "lldb/lldb-types.h"
namespace lldb_private {
class Process;
enum MmapProt {
eMmapProtNone = 0,
eMmapProtExec = 1,
eMmapProtRead = 2,
eMmapProtWrite = 4
};
bool InferiorCallMmap(Process *proc, lldb::addr_t &allocated_addr,
lldb::addr_t addr, lldb::addr_t length, unsigned prot,
unsigned flags, lldb::addr_t fd, lldb::addr_t offset);
bool InferiorCallMunmap(Process *proc, lldb::addr_t addr, lldb::addr_t length);
bool InferiorCall(Process *proc, const Address *address, lldb::addr_t &returned_func,
bool trap_exceptions = false);
} // namespace lldb_private
#endif // lldb_InferiorCallPOSIX_h_