+
+#define COMMPAGE_DESC(name) commpage_ ## name
+#define EXTERN_COMMPAGE_DESC(name) \
+ extern commpage_descriptor COMMPAGE_DESC(name)
+
+EXTERN_COMMPAGE_DESC(compare_and_swap32_mp);
+EXTERN_COMMPAGE_DESC(compare_and_swap32_up);
+EXTERN_COMMPAGE_DESC(compare_and_swap64_mp);
+EXTERN_COMMPAGE_DESC(compare_and_swap64_up);
+EXTERN_COMMPAGE_DESC(atomic_add32_mp);
+EXTERN_COMMPAGE_DESC(atomic_add32_up);
+EXTERN_COMMPAGE_DESC(mach_absolute_time);
+EXTERN_COMMPAGE_DESC(spin_lock_try_mp);
+EXTERN_COMMPAGE_DESC(spin_lock_try_up);
+EXTERN_COMMPAGE_DESC(spin_lock_mp);
+EXTERN_COMMPAGE_DESC(spin_lock_up);
+EXTERN_COMMPAGE_DESC(spin_unlock);
+EXTERN_COMMPAGE_DESC(pthread_getspecific);
+EXTERN_COMMPAGE_DESC(gettimeofday);
+EXTERN_COMMPAGE_DESC(sys_flush_dcache);
+EXTERN_COMMPAGE_DESC(sys_icache_invalidate);
+EXTERN_COMMPAGE_DESC(pthread_self);
+EXTERN_COMMPAGE_DESC(relinquish);
+EXTERN_COMMPAGE_DESC(bit_test_and_set_mp);
+EXTERN_COMMPAGE_DESC(bit_test_and_set_up);
+EXTERN_COMMPAGE_DESC(bit_test_and_clear_mp);
+EXTERN_COMMPAGE_DESC(bit_test_and_clear_up);
+EXTERN_COMMPAGE_DESC(bzero_scalar);
+EXTERN_COMMPAGE_DESC(bcopy_scalar);
+EXTERN_COMMPAGE_DESC(nanotime);
+
+static commpage_descriptor *routines[] = {
+ &COMMPAGE_DESC(compare_and_swap32_mp),
+ &COMMPAGE_DESC(compare_and_swap32_up),
+ &COMMPAGE_DESC(compare_and_swap64_mp),
+ &COMMPAGE_DESC(compare_and_swap64_up),
+ &COMMPAGE_DESC(atomic_add32_mp),
+ &COMMPAGE_DESC(atomic_add32_up),
+ &COMMPAGE_DESC(mach_absolute_time),
+ &COMMPAGE_DESC(spin_lock_try_mp),
+ &COMMPAGE_DESC(spin_lock_try_up),
+ &COMMPAGE_DESC(spin_lock_mp),
+ &COMMPAGE_DESC(spin_lock_up),
+ &COMMPAGE_DESC(spin_unlock),
+ &COMMPAGE_DESC(pthread_getspecific),
+ &COMMPAGE_DESC(gettimeofday),
+ &COMMPAGE_DESC(sys_flush_dcache),
+ &COMMPAGE_DESC(sys_icache_invalidate),
+ &COMMPAGE_DESC(pthread_self),
+ &COMMPAGE_DESC(relinquish),
+ &COMMPAGE_DESC(bit_test_and_set_mp),
+ &COMMPAGE_DESC(bit_test_and_set_up),
+ &COMMPAGE_DESC(bit_test_and_clear_mp),
+ &COMMPAGE_DESC(bit_test_and_clear_up),
+ &COMMPAGE_DESC(bzero_scalar),
+ &COMMPAGE_DESC(bcopy_scalar),
+ &COMMPAGE_DESC(nanotime),
+ NULL
+};
+
+
+/* Fill in commpage: called once, during kernel initialization, from the
+ * startup thread before user-mode code is running.
+ * See the top of this file for a list of what you have to do to add
+ * a new routine to the commpage.