forked from OSchip/llvm-project
[LLDB][MIPS] Add LinuxSignals for mips64 and change trap opcode for mips64el.
Patch by Sagar Thakur - Added LinuxSignals for MIPS64. - Changed software trap opcode for mips64el. Reviewers: clayborg, tberghammer. Subscribers: emaste, jaydeep, bhushan, mohit.bhakkad, llvm-commits. Differential Revision: http://reviews.llvm.org/D8856 llvm-svn: 234469
This commit is contained in:
parent
0eccfdc655
commit
2c2acf9602
|
@ -597,13 +597,19 @@ PlatformLinux::GetSoftwareBreakpointTrapOpcode (Target &target,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case llvm::Triple::mips64:
|
case llvm::Triple::mips64:
|
||||||
case llvm::Triple::mips64el:
|
|
||||||
{
|
{
|
||||||
static const uint8_t g_hex_opcode[] = { 0x00, 0x00, 0x00, 0x0d };
|
static const uint8_t g_hex_opcode[] = { 0x00, 0x00, 0x00, 0x0d };
|
||||||
trap_opcode = g_hex_opcode;
|
trap_opcode = g_hex_opcode;
|
||||||
trap_opcode_size = sizeof(g_hex_opcode);
|
trap_opcode_size = sizeof(g_hex_opcode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case llvm::Triple::mips64el:
|
||||||
|
{
|
||||||
|
static const uint8_t g_hex_opcode[] = { 0x0d, 0x00, 0x00, 0x00 };
|
||||||
|
trap_opcode = g_hex_opcode;
|
||||||
|
trap_opcode_size = sizeof(g_hex_opcode);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bp_site->SetTrapOpcode(trap_opcode, trap_opcode_size))
|
if (bp_site->SetTrapOpcode(trap_opcode, trap_opcode_size))
|
||||||
|
|
|
@ -3230,6 +3230,7 @@ NativeProcessLinux::GetSoftwareBreakpointTrapOpcode (size_t trap_opcode_size_hin
|
||||||
static const uint8_t g_aarch64_opcode[] = { 0x00, 0x00, 0x20, 0xd4 };
|
static const uint8_t g_aarch64_opcode[] = { 0x00, 0x00, 0x20, 0xd4 };
|
||||||
static const uint8_t g_i386_opcode [] = { 0xCC };
|
static const uint8_t g_i386_opcode [] = { 0xCC };
|
||||||
static const uint8_t g_mips64_opcode[] = { 0x00, 0x00, 0x00, 0x0d };
|
static const uint8_t g_mips64_opcode[] = { 0x00, 0x00, 0x00, 0x0d };
|
||||||
|
static const uint8_t g_mips64el_opcode[] = { 0x0d, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
switch (m_arch.GetMachine ())
|
switch (m_arch.GetMachine ())
|
||||||
{
|
{
|
||||||
|
@ -3245,11 +3246,15 @@ NativeProcessLinux::GetSoftwareBreakpointTrapOpcode (size_t trap_opcode_size_hin
|
||||||
return Error ();
|
return Error ();
|
||||||
|
|
||||||
case llvm::Triple::mips64:
|
case llvm::Triple::mips64:
|
||||||
case llvm::Triple::mips64el:
|
|
||||||
trap_opcode_bytes = g_mips64_opcode;
|
trap_opcode_bytes = g_mips64_opcode;
|
||||||
actual_opcode_size = sizeof(g_mips64_opcode);
|
actual_opcode_size = sizeof(g_mips64_opcode);
|
||||||
return Error ();
|
return Error ();
|
||||||
|
|
||||||
|
case llvm::Triple::mips64el:
|
||||||
|
trap_opcode_bytes = g_mips64el_opcode;
|
||||||
|
actual_opcode_size = sizeof(g_mips64el_opcode);
|
||||||
|
return Error ();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
assert(false && "CPU type not supported!");
|
assert(false && "CPU type not supported!");
|
||||||
return Error ("CPU type not supported");
|
return Error ("CPU type not supported");
|
||||||
|
|
|
@ -9,6 +9,7 @@ add_lldb_library(lldbPluginProcessUtility
|
||||||
HistoryUnwind.cpp
|
HistoryUnwind.cpp
|
||||||
InferiorCallPOSIX.cpp
|
InferiorCallPOSIX.cpp
|
||||||
LinuxSignals.cpp
|
LinuxSignals.cpp
|
||||||
|
MipsLinuxSignals.cpp
|
||||||
RegisterContextDarwin_arm.cpp
|
RegisterContextDarwin_arm.cpp
|
||||||
RegisterContextDarwin_arm64.cpp
|
RegisterContextDarwin_arm64.cpp
|
||||||
RegisterContextDarwin_i386.cpp
|
RegisterContextDarwin_i386.cpp
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
//===-- MipsLinuxSignals.cpp ----------------------------------------*- C++ -*-===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// C++ Includes
|
||||||
|
// Other libraries and framework includes
|
||||||
|
// Project includes
|
||||||
|
#include "MipsLinuxSignals.h"
|
||||||
|
|
||||||
|
using namespace lldb_private::process_linux;
|
||||||
|
|
||||||
|
MipsLinuxSignals::MipsLinuxSignals()
|
||||||
|
: UnixSignals()
|
||||||
|
{
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MipsLinuxSignals::Reset()
|
||||||
|
{
|
||||||
|
m_signals.clear();
|
||||||
|
|
||||||
|
AddSignal (1, "SIGHUP", "HUP", false, true , true , "hangup");
|
||||||
|
AddSignal (2, "SIGINT", "INT", true , true , true , "interrupt");
|
||||||
|
AddSignal (3, "SIGQUIT", "QUIT", false, true , true , "quit");
|
||||||
|
AddSignal (4, "SIGILL", "ILL", false, true , true , "illegal instruction");
|
||||||
|
AddSignal (5, "SIGTRAP", "TRAP", true , true , true , "trace trap (not reset when caught)");
|
||||||
|
AddSignal (6, "SIGABRT", "ABRT", false, true , true , "abort()");
|
||||||
|
AddSignal (6, "SIGIOT", "IOT", false, true , true , "IOT trap");
|
||||||
|
AddSignal (7, "SIGEMT", "EMT", false, true , true , "terminate process with core dump");
|
||||||
|
AddSignal (8, "SIGFPE", "FPE", false, true , true , "floating point exception");
|
||||||
|
AddSignal (9, "SIGKILL", "KILL", false, true , true , "kill");
|
||||||
|
AddSignal (10, "SIGBUS", "BUS", false, true , true , "bus error");
|
||||||
|
AddSignal (11, "SIGSEGV", "SEGV", false, true , true , "segmentation violation");
|
||||||
|
AddSignal (12, "SIGSYS", "SYS", false, true , true , "invalid system call");
|
||||||
|
AddSignal (13, "SIGPIPE", "PIPE", false, true , true , "write to pipe with reading end closed");
|
||||||
|
AddSignal (14, "SIGALRM", "ALRM", false, false, false, "alarm");
|
||||||
|
AddSignal (15, "SIGTERM", "TERM", false, true , true , "termination requested");
|
||||||
|
AddSignal (16, "SIGUSR1", "USR1", false, true , true , "user defined signal 1");
|
||||||
|
AddSignal (17, "SIGUSR2", "USR2", false, true , true , "user defined signal 2");
|
||||||
|
AddSignal (18, "SIGCLD", "CLD", false, false, true , "same as SIGCHLD");
|
||||||
|
AddSignal (18, "SIGCHLD", "CHLD", false, false, true , "child status has changed");
|
||||||
|
AddSignal (19, "SIGPWR", "PWR", false, true , true , "power failure");
|
||||||
|
AddSignal (20, "SIGWINCH", "WINCH", false, true , true , "window size changes");
|
||||||
|
AddSignal (21, "SIGURG", "URG", false, true , true , "urgent data on socket");
|
||||||
|
AddSignal (22, "SIGIO", "IO", false, true , true , "input/output ready");
|
||||||
|
AddSignal (22, "SIGPOLL", "POLL", false, true , true , "pollable event");
|
||||||
|
AddSignal (23, "SIGSTOP", "STOP", true , true , true , "process stop");
|
||||||
|
AddSignal (24, "SIGTSTP", "TSTP", false, true , true , "tty stop");
|
||||||
|
AddSignal (25, "SIGCONT", "CONT", false, true , true , "process continue");
|
||||||
|
AddSignal (26, "SIGTTIN", "TTIN", false, true , true , "background tty read");
|
||||||
|
AddSignal (27, "SIGTTOU", "TTOU", false, true , true , "background tty write");
|
||||||
|
AddSignal (28, "SIGVTALRM", "VTALRM", false, true , true , "virtual time alarm");
|
||||||
|
AddSignal (29, "SIGPROF", "PROF", false, false, false, "profiling time alarm");
|
||||||
|
AddSignal (30, "SIGXCPU", "XCPU", false, true , true , "CPU resource exceeded");
|
||||||
|
AddSignal (31, "SIGXFSZ", "XFSZ", false, true , true , "file size limit exceeded");
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
//===-- MipsLinuxSignals.h ------------------------------------------*- C++ -*-===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef liblldb_MipsLinuxSignals_H_
|
||||||
|
#define liblldb_MipsLinuxSignals_H_
|
||||||
|
|
||||||
|
// C Includes
|
||||||
|
// C++ Includes
|
||||||
|
// Other libraries and framework includes
|
||||||
|
// Project includes
|
||||||
|
#include "lldb/Target/UnixSignals.h"
|
||||||
|
|
||||||
|
namespace lldb_private {
|
||||||
|
namespace process_linux {
|
||||||
|
|
||||||
|
/// Linux specific set of Unix signals.
|
||||||
|
class MipsLinuxSignals
|
||||||
|
: public lldb_private::UnixSignals
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MipsLinuxSignals();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void
|
||||||
|
Reset();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace lldb_private
|
||||||
|
} // namespace process_linux
|
||||||
|
|
||||||
|
#endif
|
|
@ -66,6 +66,7 @@
|
||||||
#include "Plugins/Process/Utility/FreeBSDSignals.h"
|
#include "Plugins/Process/Utility/FreeBSDSignals.h"
|
||||||
#include "Plugins/Process/Utility/InferiorCallPOSIX.h"
|
#include "Plugins/Process/Utility/InferiorCallPOSIX.h"
|
||||||
#include "Plugins/Process/Utility/LinuxSignals.h"
|
#include "Plugins/Process/Utility/LinuxSignals.h"
|
||||||
|
#include "Plugins/Process/Utility/MipsLinuxSignals.h"
|
||||||
#include "Plugins/Process/Utility/StopInfoMachException.h"
|
#include "Plugins/Process/Utility/StopInfoMachException.h"
|
||||||
#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
|
#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
|
||||||
#include "Utility/StringExtractorGDBRemote.h"
|
#include "Utility/StringExtractorGDBRemote.h"
|
||||||
|
@ -717,7 +718,10 @@ ProcessGDBRemote::DoConnectRemote (Stream *strm, const char *remote_url)
|
||||||
switch (arch_spec.GetTriple ().getOS ())
|
switch (arch_spec.GetTriple ().getOS ())
|
||||||
{
|
{
|
||||||
case llvm::Triple::Linux:
|
case llvm::Triple::Linux:
|
||||||
SetUnixSignals (UnixSignalsSP (new process_linux::LinuxSignals ()));
|
if (arch_spec.GetTriple ().getArch () == llvm::Triple::mips64 || arch_spec.GetTriple ().getArch () == llvm::Triple::mips64el)
|
||||||
|
SetUnixSignals (UnixSignalsSP (new process_linux::MipsLinuxSignals ()));
|
||||||
|
else
|
||||||
|
SetUnixSignals (UnixSignalsSP (new process_linux::LinuxSignals ()));
|
||||||
if (log)
|
if (log)
|
||||||
log->Printf ("ProcessGDBRemote::%s using Linux unix signals type for pid %" PRIu64, __FUNCTION__, GetID ());
|
log->Printf ("ProcessGDBRemote::%s using Linux unix signals type for pid %" PRIu64, __FUNCTION__, GetID ());
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue