Print this page
OS-5192 need faster clock_gettime
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Joshua M. Clulow <jmc@joyent.com>
Reviewed by: Ryan Zezeski <ryan@zinascii.com>
        
*** 20,30 ****
   */
  
  /*
   * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
   * Copyright 2014 Garrett D'Amore <garrett@damore.org>
!  * Copyright 2015 Joyent, Inc.
   */
  
  /*
   * Implementation of all external interfaces between ld.so.1 and libc.
   *
--- 20,30 ----
   */
  
  /*
   * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
   * Copyright 2014 Garrett D'Amore <garrett@damore.org>
!  * Copyright 2016 Joyent, Inc.
   */
  
  /*
   * Implementation of all external interfaces between ld.so.1 and libc.
   *
*** 719,729 ****
--- 719,744 ----
  isalnum(int c)
  {
          return ((isalpha(c) || isdigit(c)) ? 1 : 0);
  }
  
+ #if defined(__i386) || defined(__amd64)
  /*
+  * Instead of utilizing the comm page for clock_gettime, rtld uses the raw
+  * syscall instead.  Doing so decreases the surface of symbols needed from libc
+  * for a modest performance cost.
+  */
+ extern int __clock_gettime_sys(clockid_t, struct timespec *);
+ 
+ int
+ __clock_gettime(clockid_t clock_id, struct timespec *tp)
+ {
+         return (__clock_gettime_sys(clock_id, tp));
+ }
+ #endif /* defined(__i386) || defined(__amd64) */
+ 
+ /*
   * In a similar vein to the is* functions above, we also have to define our own
   * version of strerror, as it is implemented in terms of the locale aware
   * strerror_l, and we'd rather not have the full set of libc symbols used here.
   */
  extern const char _sys_errs[];