Merge "Update the generate script."
diff --git a/libc/bionic/exec.cpp b/libc/bionic/exec.cpp
index 3309585..fd2c401 100644
--- a/libc/bionic/exec.cpp
+++ b/libc/bionic/exec.cpp
@@ -44,9 +44,10 @@
 
 extern "C" char** environ;
 
-enum ExecVariant { kIsExecL, kIsExecLE, kIsExecLP };
+enum { ExecL, ExecLE, ExecLP };
 
-static int __execl(const char* name, const char* argv0, ExecVariant variant, va_list ap) {
+template <int variant>
+static int __execl(const char* name, const char* argv0, va_list ap) {
   // Count the arguments.
   va_list count_ap;
   va_copy(count_ap, ap);
@@ -65,17 +66,17 @@
   }
 
   // Collect the argp too.
-  char** argp = (variant == kIsExecLE) ? va_arg(ap, char**) : environ;
+  char** argp = (variant == ExecLE) ? va_arg(ap, char**) : environ;
 
   va_end(ap);
 
-  return (variant == kIsExecLP) ? execvp(name, argv) : execve(name, argv, argp);
+  return (variant == ExecLP) ? execvp(name, argv) : execve(name, argv, argp);
 }
 
 int execl(const char* name, const char* arg, ...) {
   va_list ap;
   va_start(ap, arg);
-  int result = __execl(name, arg, kIsExecL, ap);
+  int result = __execl<ExecL>(name, arg, ap);
   va_end(ap);
   return result;
 }
@@ -83,7 +84,7 @@
 int execle(const char* name, const char* arg, ...) {
   va_list ap;
   va_start(ap, arg);
-  int result = __execl(name, arg, kIsExecLE, ap);
+  int result = __execl<ExecLE>(name, arg, ap);
   va_end(ap);
   return result;
 }
@@ -91,7 +92,7 @@
 int execlp(const char* name, const char* arg, ...) {
   va_list ap;
   va_start(ap, arg);
-  int result = __execl(name, arg, kIsExecLP, ap);
+  int result = __execl<ExecLP>(name, arg, ap);
   va_end(ap);
   return result;
 }
diff --git a/libc/bionic/fork.cpp b/libc/bionic/fork.cpp
index cda5e85..c9a1ca8 100644
--- a/libc/bionic/fork.cpp
+++ b/libc/bionic/fork.cpp
@@ -34,22 +34,23 @@
 #include "pthread_internal.h"
 
 __BIONIC_WEAK_FOR_NATIVE_BRIDGE
+int __clone_for_fork() {
+  pthread_internal_t* self = __get_thread();
+
+  return clone(nullptr, nullptr, (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD), nullptr,
+               nullptr, nullptr, &(self->tid));
+}
+
+__BIONIC_WEAK_FOR_NATIVE_BRIDGE
 int fork() {
   __bionic_atfork_run_prepare();
 
-  pthread_internal_t* self = __get_thread();
+  int result = __clone_for_fork();
 
-  int result = clone(nullptr,
-                     nullptr,
-                     (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD),
-                     nullptr,
-                     nullptr,
-                     nullptr,
-                     &(self->tid));
   if (result == 0) {
     // Update the cached pid, since clone() will not set it directly (as
     // self->tid is updated by the kernel).
-    self->set_cached_pid(gettid());
+    __get_thread()->set_cached_pid(gettid());
 
     // Disable fdsan post-fork, so we don't falsely trigger on processes that
     // fork, close all of their fds blindly, and then exec.