The Windows SDK provides a version of signal() that is much more limited compared to other platforms. It only supports about 5-6 signal values. LLDB uses signals for a number of things, most notably to handle Ctrl+C so we can gracefully shut down. The portability solution to this on Windows has been to provide a hand-rolled implementation of `signal` using the name `signal` so that you could write code that simply calls signal directly and it would work. But this introduces a multiply defined symbol with the builtin version and depending on how you included header files, you could get yourself into a situation where you had linker errors. To make matters worse, it led to a ton of compiler warnings. Worst of all though is that this custom implementation of signal was, in fact, identical for the purposes of handling Ctrl+C as the builtin implementation of signal. So it seems to have literally not been serving any useful purpose. This patch deletes all the custom signal() functions for Windows, and includes the signal.h system header, so that any calls to signal now go to the actual version provided by the Windows SDK. Differential Revision: http://reviews.llvm.org/D18287 llvm-svn: 263858
95 lines
2.1 KiB
C++
95 lines
2.1 KiB
C++
//===-- Platform.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_Platform_h_
|
|
#define lldb_Platform_h_
|
|
|
|
#if defined( _WIN32 )
|
|
|
|
#include "lldb/Host/HostGetOpt.h"
|
|
#include <io.h>
|
|
#if defined( _MSC_VER )
|
|
#include <eh.h>
|
|
#include <signal.h>
|
|
#endif
|
|
#include <inttypes.h>
|
|
#include "lldb/Host/windows/windows.h"
|
|
|
|
struct winsize
|
|
{
|
|
long ws_col;
|
|
};
|
|
|
|
typedef unsigned char cc_t;
|
|
typedef unsigned int speed_t;
|
|
typedef unsigned int tcflag_t;
|
|
|
|
// fcntl.h
|
|
#define O_NOCTTY 0400
|
|
|
|
// ioctls.h
|
|
#define TIOCGWINSZ 0x5413
|
|
|
|
// signal.h
|
|
#define SIGPIPE 13
|
|
#define SIGCONT 18
|
|
#define SIGTSTP 20
|
|
#define SIGWINCH 28
|
|
|
|
// tcsetattr arguments
|
|
#define TCSANOW 0
|
|
|
|
#define NCCS 32
|
|
struct termios
|
|
{
|
|
tcflag_t c_iflag; // input mode flags
|
|
tcflag_t c_oflag; // output mode flags
|
|
tcflag_t c_cflag; // control mode flags
|
|
tcflag_t c_lflag; // local mode flags
|
|
cc_t c_line; // line discipline
|
|
cc_t c_cc[NCCS]; // control characters
|
|
speed_t c_ispeed; // input speed
|
|
speed_t c_ospeed; // output speed
|
|
};
|
|
|
|
|
|
|
|
#ifdef _MSC_VER
|
|
struct timeval
|
|
{
|
|
long tv_sec;
|
|
long tv_usec;
|
|
};
|
|
typedef long pid_t;
|
|
#define snprintf _snprintf
|
|
#define PATH_MAX MAX_PATH
|
|
#endif
|
|
|
|
#define STDIN_FILENO 0
|
|
|
|
extern int ioctl( int d, int request, ... );
|
|
extern int kill ( pid_t pid, int sig );
|
|
extern int tcsetattr( int fd, int optional_actions, const struct termios *termios_p );
|
|
extern int tcgetattr( int fildes, struct termios *termios_p );
|
|
|
|
#else
|
|
#include "lldb/Host/HostGetOpt.h"
|
|
#include <inttypes.h>
|
|
|
|
#include <libgen.h>
|
|
#include <sys/ioctl.h>
|
|
#include <termios.h>
|
|
#include <unistd.h>
|
|
|
|
#include <pthread.h>
|
|
#include <sys/time.h>
|
|
#endif
|
|
|
|
#endif // lldb_Platform_h_
|