Files
clang-p2996/lldb/tools/driver/Platform.h
Zachary Turner 29365da0e8 Delete the custom implementation of signal() on Windows.
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
2016-03-18 23:47:48 +00:00

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_