Add urcu-api-list.sh script
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 14 Mar 2013 14:11:53 +0000 (10:11 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 14 Mar 2013 14:11:53 +0000 (10:11 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Makefile.am
scripts/urcu-api-list.sh [new file with mode: 0755]

index 0a4d357..d95eca4 100644 (file)
@@ -30,7 +30,8 @@ EXTRA_DIST = $(top_srcdir)/urcu/arch/*.h $(top_srcdir)/urcu/uatomic/*.h \
                LICENSE compat_arch_x86.c \
                urcu-call-rcu-impl.h urcu-defer-impl.h \
                rculfhash-internal.h \
-               $(top_srcdir)/tests/*.sh
+               $(top_srcdir)/tests/*.sh \
+               $(top_srcdir)/scripts/*.sh
 
 if COMPAT_ARCH
 COMPAT=compat_arch_@ARCHTYPE@.c
diff --git a/scripts/urcu-api-list.sh b/scripts/urcu-api-list.sh
new file mode 100755 (executable)
index 0000000..5517155
--- /dev/null
@@ -0,0 +1,233 @@
+#!/bin/sh
+#
+# Run in userspace-rcu git archive.  Prints out a list of API members
+# and the version in which they were introduced.  You need to list all
+# the API members immediately below. Depends on "cscope".
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Copyright (C) IBM Corporation, 2013
+#
+# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+
+api="caa_container_of \
+       caa_likely \
+       caa_max \
+       caa_unlikely \
+       call_rcu \
+       call_rcu_after_fork_child \
+       call_rcu_after_fork_parent \
+       call_rcu_before_fork \
+       call_rcu_data_free \
+       cds_hlist_add_head \
+       cds_hlist_add_head_rcu \
+       cds_hlist_del \
+       cds_hlist_del_rcu \
+       cds_hlist_entry \
+       cds_hlist_for_each_entry \
+       cds_hlist_for_each_entry_rcu \
+       cds_hlist_for_each_entry_safe \
+       CDS_INIT_HLIST_HEAD \
+       CDS_INIT_LIST_HEAD \
+       cds_lfht_add \
+       cds_lfht_add_replace \
+       cds_lfht_add_unique \
+       cds_lfht_count_nodes \
+       cds_lfht_del \
+       cds_lfht_destroy \
+       cds_lfht_first \
+       cds_lfht_for_each \
+       cds_lfht_for_each_duplicate \
+       cds_lfht_for_each_entry \
+       cds_lfht_for_each_entry_duplicate \
+       cds_lfht_is_node_deleted \
+       cds_lfht_iter_get_node \
+       cds_lfht_lookup \
+       cds_lfht_new \
+       cds_lfht_next \
+       cds_lfht_next_duplicate \
+       cds_lfht_replace \
+       cds_lfht_resize \
+       cds_lfq_dequeue_rcu \
+       cds_lfq_destroy_rcu \
+       cds_lfq_enqueue_rcu \
+       cds_lfq_init_rcu \
+       cds_lfq_node_init_rcu \
+       cds_lfs_empty \
+       cds_lfs_for_each \
+       cds_lfs_for_each_safe \
+       cds_lfs_init \
+       cds_lfs_node_init \
+       __cds_lfs_pop \
+       __cds_lfs_pop_all \
+       cds_lfs_pop_all_blocking \
+       cds_lfs_pop_blocking \
+       cds_lfs_pop_lock \
+       cds_lfs_pop_unlock \
+       cds_lfs_push \
+       cds_list_add \
+       cds_list_add_rcu \
+       cds_list_add_tail \
+       cds_list_del \
+       cds_list_del_init \
+       cds_list_del_rcu \
+       cds_list_empty \
+       cds_list_entry \
+       cds_list_first_entry \
+       cds_list_for_each \
+       cds_list_for_each_entry \
+       cds_list_for_each_entry_rcu \
+       cds_list_for_each_entry_reverse \
+       cds_list_for_each_prev \
+       cds_list_for_each_prev_safe \
+       cds_list_for_each_rcu \
+       cds_list_for_each_safe \
+       CDS_LIST_HEAD \
+       CDS_LIST_HEAD_INIT \
+       cds_list_move \
+       cds_list_replace \
+       cds_list_replace_init \
+       cds_list_replace_rcu \
+       cds_list_splice \
+       __cds_wfcq_dequeue_blocking \
+       cds_wfcq_dequeue_blocking \
+       cds_wfcq_dequeue_lock \
+       __cds_wfcq_dequeue_nonblocking \
+       cds_wfcq_dequeue_unlock \
+       cds_wfcq_empty \
+       cds_wfcq_enqueue \
+       __cds_wfcq_first_blocking \
+       __cds_wfcq_first_nonblocking \
+       __cds_wfcq_for_each_blocking \
+       __cds_wfcq_for_each_blocking_safe \
+       cds_wfcq_init \
+       __cds_wfcq_next_blocking \
+       __cds_wfcq_next_nonblocking \
+       cds_wfcq_node_init \
+       __cds_wfcq_splice_blocking \
+       cds_wfcq_splice_blocking \
+       __cds_wfcq_splice_nonblocking \
+       cds_wfs_empty \
+       cds_wfs_first \
+       cds_wfs_for_each_blocking \
+       cds_wfs_for_each_blocking_safe \
+       cds_wfs_init \
+       cds_wfs_next_blocking \
+       cds_wfs_next_nonblocking \
+       cds_wfs_node_init \
+       __cds_wfs_pop_all \
+       cds_wfs_pop_all_blocking \
+       __cds_wfs_pop_blocking \
+       cds_wfs_pop_blocking \
+       cds_wfs_pop_lock \
+       __cds_wfs_pop_nonblocking \
+       cds_wfs_pop_unlock \
+       cds_wfs_push \
+       CMM_ACCESS_ONCE \
+       cmm_barrier \
+       CMM_LOAD_SHARED \
+       cmm_smp_mb \
+       cmm_smp_mb__after_uatomic_add \
+       cmm_smp_mb__after_uatomic_and \
+       cmm_smp_mb__after_uatomic_dec \
+       cmm_smp_mb__after_uatomic_inc \
+       cmm_smp_mb__after_uatomic_or \
+       cmm_smp_mb__before_uatomic_add \
+       cmm_smp_mb__before_uatomic_and \
+       cmm_smp_mb__before_uatomic_dec \
+       cmm_smp_mb__before_uatomic_inc \
+       cmm_smp_mb__before_uatomic_or \
+       cmm_smp_rmb \
+       cmm_smp_wmb \
+       CMM_STORE_SHARED \
+       create_all_cpu_call_rcu_data \
+       create_call_rcu_data \
+       DECLARE_URCU_TLS \
+       defer_rcu \
+       DEFINE_URCU_TLS \
+       free_all_cpu_call_rcu_data \
+       get_call_rcu_data \
+       get_call_rcu_thread \
+       get_cpu_call_rcu_data \
+       get_default_call_rcu_data \
+       get_thread_call_rcu_data \
+       rcu_assign_pointer \
+       rcu_cmpxchg_pointer \
+       rcu_dereference \
+       rcu_exit \
+       rcu_init \
+       rcu_quiescent_state \
+       rcu_read_lock \
+       rcu_read_unlock \
+       rcu_register_thread \
+       rcu_set_pointer \
+       rcu_thread_offline \
+       rcu_thread_online \
+       rcu_unregister_thread \
+       rcu_xchg_pointer \
+       set_cpu_call_rcu_data \
+       set_thread_call_rcu_data \
+       synchronize_rcu \
+       uatomic_add \
+       uatomic_add_return \
+       uatomic_and \
+       uatomic_cmpxchg \
+       uatomic_dec \
+       uatomic_inc \
+       uatomic_or \
+       uatomic_read \
+       uatomic_set \
+       uatomic_xchg \
+       URCU_TLS"
+
+T=/tmp/urcu-api-list.sh.$$
+trap 'rm -rf $T' 0
+mkdir $T
+
+git remote update 1>&2
+git reset --hard origin/master 1>&2
+git branch -f master 1>&2
+tags=`git tag -l`
+lasttag="init"
+mkdir $T/init
+
+for tag in $tags master
+do
+       mkdir $T/$tag
+       git reset --hard $tag 1>&2
+       rm -rf cscope.* tests
+       find . \( -name SCCS -prune \) -o \( -name .git -prune \) -o \( -name '*.[h]' -print \) | grep -v -e '-impl\.h$' | cscope -bkq -i -
+       for i in $api
+       do
+               cscope -d -L -0 $i > $T/$tag/$i
+               if test -s $T/$tag/$i
+               then
+                       :
+               else
+                       rm $T/$tag/$i
+               fi
+       done
+       # The call_rcu() preceding v0.6.0 is to be ignored
+       if test -d $T/v0.6.0
+       then
+               :
+       else
+               rm $T/$tag/call_rcu
+       fi
+       ( ls $T/$tag; ls $T/$lasttag ) | sort | uniq -u |
+               awk -v tag=$tag '{ print "<tr><td>" $1 "</td><td>" tag "</td></tr>" }'
+       lasttag=$tag
+done
+
This page took 0.035303 seconds and 4 git commands to generate.