aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-11-24 09:55:12 -0500
committerGitHub <noreply@github.com>2016-11-24 09:55:12 -0500
commit42736d6a2a1fe97b462b6fcef11a7ae655287975 (patch)
treed93d891c8052a4e54b224cb0c0531ccb43ddea49
parentcbf2a86c1d3e13eba0c194efb68327857fc3282e (diff)
parentca292c97688e1a43f2b29594007effb8dd141636 (diff)
downloadrneovim-42736d6a2a1fe97b462b6fcef11a7ae655287975.tar.gz
rneovim-42736d6a2a1fe97b462b6fcef11a7ae655287975.tar.bz2
rneovim-42736d6a2a1fe97b462b6fcef11a7ae655287975.zip
Merge pull request #5595 from jamessan/tsan-pie
tsan: Compile with -fPIE and updated clang
-rw-r--r--.travis.yml18
-rw-r--r--src/nvim/CMakeLists.txt1
-rw-r--r--src/nvim/globals.h24
-rw-r--r--src/nvim/mbyte.c18
-rw-r--r--src/nvim/msgpack_rpc/helpers.c4
-rw-r--r--src/nvim/shada.c4
6 files changed, 37 insertions, 32 deletions
diff --git a/.travis.yml b/.travis.yml
index 1437f7e25b..039a00cce8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,9 +9,7 @@ env:
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
- MAKE_CMD="make -j2"
# Update PATH for pip.
- - PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:$PATH"
- # LLVM symbolizer path.
- - LLVM_SYMBOLIZER="$(which llvm-symbolizer-3.4)"
+ - PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:/usr/lib/llvm-symbolizer-3.8/bin:$PATH"
# Build directory for Neovim.
- BUILD_DIR="$TRAVIS_BUILD_DIR/build"
# Build directory for third-party dependencies.
@@ -36,9 +34,8 @@ env:
-DCMAKE_TOOLCHAIN_FILE=$TRAVIS_BUILD_DIR/cmake/i386-linux-gnu.toolchain.cmake"
# Environment variables for Clang sanitizers.
- ASAN_OPTIONS="detect_leaks=1:check_initialization_order=1:log_path=$LOG_DIR/asan"
- - ASAN_SYMBOLIZER_PATH="$LLVM_SYMBOLIZER"
- - TSAN_OPTIONS="external_symbolizer_path=$LLVM_SYMBOLIZER log_path=$LOG_DIR/tsan"
- - UBSAN_OPTIONS="log_path=$LOG_DIR/ubsan"
+ - TSAN_OPTIONS="log_path=$LOG_DIR/tsan"
+ - UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
# Environment variables for Valgrind.
- VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
# Cache marker for third-party dependencies cache.
@@ -70,10 +67,10 @@ matrix:
compiler: gcc-5 -m32
env: BUILD_32BIT=ON
- os: linux
- compiler: clang
+ compiler: clang-3.8
env: CLANG_SANITIZER=ASAN_UBSAN
- os: linux
- compiler: clang
+ compiler: clang-3.8
env: CLANG_SANITIZER=TSAN
- os: osx
compiler: clang
@@ -96,11 +93,12 @@ addons:
# TODO: Remove PPA when Travis gets Python >=3.3.
- deadsnakes
- ubuntu-toolchain-r-test
+ - llvm-toolchain-precise-3.8
packages:
- autoconf
- automake
- build-essential
- - clang-3.4
+ - clang-3.8
- cmake
- g++-5-multilib
- g++-multilib
@@ -109,7 +107,7 @@ addons:
- gdb
- libc6-dev-i386
- libtool
- - llvm-3.4-dev
+ - llvm-3.8-dev
- pkg-config
- python3.3-dev
- unzip
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt
index 49edfda838..f2b75dca2a 100644
--- a/src/nvim/CMakeLists.txt
+++ b/src/nvim/CMakeLists.txt
@@ -326,6 +326,7 @@ elseif(CLANG_TSAN)
message(STATUS "Enabling Clang thread sanitizer for nvim.")
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ")
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fsanitize=thread ")
+ set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fPIE ")
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=thread ")
endif()
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index 301a2c1663..f81fb43eaf 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -788,8 +788,28 @@ EXTERN int vr_lines_changed INIT(= 0); /* #Lines changed by "gR" so far */
/// Encoding used when 'fencs' is set to "default"
EXTERN char_u *fenc_default INIT(= NULL);
-// To speed up BYTELEN() we keep a table with the byte lengths for utf-8
-EXTERN char utf8len_tab[256];
+// To speed up BYTELEN(); keep a lookup table to quickly get the length in
+// bytes of a UTF-8 character from the first byte of a UTF-8 string. Bytes
+// which are illegal when used as the first byte have a 1. The NUL byte has
+// length 1.
+EXTERN char utf8len_tab[256] INIT(= {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1,
+});
# if defined(USE_ICONV) && defined(DYNAMIC_ICONV)
/* Pointers to functions and variables to be loaded at runtime */
diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c
index 7be0be7106..2ecd86974e 100644
--- a/src/nvim/mbyte.c
+++ b/src/nvim/mbyte.c
@@ -69,24 +69,6 @@ struct interval {
#endif
/*
- * Lookup table to quickly get the length in bytes of a UTF-8 character from
- * the first byte of a UTF-8 string.
- * Bytes which are illegal when used as the first byte have a 1.
- * The NUL byte has length 1.
- */
-char utf8len_tab[256] =
-{
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
- 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1,
-};
-
-/*
* Like utf8len_tab above, but using a zero for illegal lead bytes.
*/
static uint8_t utf8len_tab_zero[256] =
diff --git a/src/nvim/msgpack_rpc/helpers.c b/src/nvim/msgpack_rpc/helpers.c
index c3a909692f..b0cfe2d6cd 100644
--- a/src/nvim/msgpack_rpc/helpers.c
+++ b/src/nvim/msgpack_rpc/helpers.c
@@ -326,7 +326,9 @@ void msgpack_rpc_from_string(String result, msgpack_packer *res)
FUNC_ATTR_NONNULL_ARG(2)
{
msgpack_pack_str(res, result.size);
- msgpack_pack_str_body(res, result.data, result.size);
+ if (result.size > 0) {
+ msgpack_pack_str_body(res, result.data, result.size);
+ }
}
typedef struct {
diff --git a/src/nvim/shada.c b/src/nvim/shada.c
index 01c0807d82..d902079739 100644
--- a/src/nvim/shada.c
+++ b/src/nvim/shada.c
@@ -1575,7 +1575,9 @@ static char *shada_filename(const char *file)
do { \
const String s_ = (s); \
msgpack_pack_bin(spacker, s_.size); \
- msgpack_pack_bin_body(spacker, s_.data, s_.size); \
+ if (s_.size > 0) { \
+ msgpack_pack_bin_body(spacker, s_.data, s_.size); \
+ } \
} while (0)
/// Write single ShaDa entry