Merge pull request #4998 from ctiller/syscall

Make clock_gettime syscall directly to skirt ABI issues
pull/4936/head
Jan Tattermusch 9 years ago
commit 4d48522f00
  1. 8
      Makefile
  2. 6
      build.yaml
  3. 13
      src/core/support/time_posix.c

@ -122,7 +122,7 @@ CC_asan-noleaks = clang
CXX_asan-noleaks = clang++ CXX_asan-noleaks = clang++
LD_asan-noleaks = clang LD_asan-noleaks = clang
LDXX_asan-noleaks = clang++ LDXX_asan-noleaks = clang++
CPPFLAGS_asan-noleaks = -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument CPPFLAGS_asan-noleaks = -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS
LDFLAGS_asan-noleaks = -fsanitize=address LDFLAGS_asan-noleaks = -fsanitize=address
DEFINES_asan-noleaks += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=1.5 DEFINES_asan-noleaks += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=1.5
@ -179,7 +179,7 @@ CC_asan = clang
CXX_asan = clang++ CXX_asan = clang++
LD_asan = clang LD_asan = clang
LDXX_asan = clang++ LDXX_asan = clang++
CPPFLAGS_asan = -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument CPPFLAGS_asan = -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS
LDFLAGS_asan = -fsanitize=address LDFLAGS_asan = -fsanitize=address
DEFINES_asan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=1.5 DEFINES_asan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=1.5
@ -189,7 +189,7 @@ CC_tsan = clang
CXX_tsan = clang++ CXX_tsan = clang++
LD_tsan = clang LD_tsan = clang
LDXX_tsan = clang++ LDXX_tsan = clang++
CPPFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE -pie CPPFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS
LDFLAGS_tsan = -fsanitize=thread -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) LDFLAGS_tsan = -fsanitize=thread -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,)
DEFINES_tsan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=2 DEFINES_tsan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=2
@ -199,7 +199,7 @@ CC_msan = clang
CXX_msan = clang++ CXX_msan = clang++
LD_msan = clang LD_msan = clang
LDXX_msan = clang++ LDXX_msan = clang++
CPPFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie CPPFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS
LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,)
DEFINES_msan = NDEBUG DEFINES_msan = NDEBUG
DEFINES_msan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=2 DEFINES_msan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=2

@ -2591,6 +2591,7 @@ configs:
asan: asan:
CC: clang CC: clang
CPPFLAGS: -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument CPPFLAGS: -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument
-DGPR_NO_DIRECT_SYSCALLS
CXX: clang++ CXX: clang++
LD: clang LD: clang
LDFLAGS: -fsanitize=address LDFLAGS: -fsanitize=address
@ -2603,6 +2604,7 @@ configs:
asan-noleaks: asan-noleaks:
CC: clang CC: clang
CPPFLAGS: -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument CPPFLAGS: -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument
-DGPR_NO_DIRECT_SYSCALLS
CXX: clang++ CXX: clang++
LD: clang LD: clang
LDFLAGS: -fsanitize=address LDFLAGS: -fsanitize=address
@ -2642,7 +2644,7 @@ configs:
CC: clang CC: clang
CPPFLAGS: -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer CPPFLAGS: -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer
-DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument
-fPIE -pie -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS
CXX: clang++ CXX: clang++
DEFINES: NDEBUG DEFINES: NDEBUG
LD: clang LD: clang
@ -2665,7 +2667,7 @@ configs:
tsan: tsan:
CC: clang CC: clang
CPPFLAGS: -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument CPPFLAGS: -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument
-fPIE -pie -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS
CXX: clang++ CXX: clang++
LD: clang LD: clang
LDFLAGS: -fsanitize=thread -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) LDFLAGS: -fsanitize=thread -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,)

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -39,6 +39,9 @@
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#ifdef __linux__
#include <sys/syscall.h>
#endif
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/time.h> #include <grpc/support/time.h>
#include "src/core/support/block_annotate.h" #include "src/core/support/block_annotate.h"
@ -70,7 +73,8 @@ static gpr_timespec gpr_from_timespec(struct timespec ts,
} }
/** maps gpr_clock_type --> clockid_t for clock_gettime */ /** maps gpr_clock_type --> clockid_t for clock_gettime */
static clockid_t clockid_for_gpr_clock[] = {CLOCK_MONOTONIC, CLOCK_REALTIME}; static const clockid_t clockid_for_gpr_clock[] = {CLOCK_MONOTONIC,
CLOCK_REALTIME};
void gpr_time_init(void) { gpr_precise_clock_init(); } void gpr_time_init(void) { gpr_precise_clock_init(); }
@ -82,7 +86,12 @@ gpr_timespec gpr_now(gpr_clock_type clock_type) {
gpr_precise_clock_now(&ret); gpr_precise_clock_now(&ret);
return ret; return ret;
} else { } else {
#if defined(__linux__) && !defined(GPR_NO_DIRECT_SYSCALLS)
/* avoid ABI problems by invoking syscalls directly */
syscall(SYS_clock_gettime, clockid_for_gpr_clock[clock_type], &now);
#else
clock_gettime(clockid_for_gpr_clock[clock_type], &now); clock_gettime(clockid_for_gpr_clock[clock_type], &now);
#endif
return gpr_from_timespec(now, clock_type); return gpr_from_timespec(now, clock_type);
} }
} }

Loading…
Cancel
Save