[PATCH] devtools: list symbols by version
David Marchand
david.marchand at redhat.com
Fri Aug 11 17:49:44 CEST 2023
Make it easier to list experimental symbols added in a certain version.
While at it, add a check on map symbol files content to avoid breaking
this listing tool.
Example:
$ ./buildtools/map-list-symbol.sh -V 18.11 lib/eal/version.map
lib/eal/version.map EXPERIMENTAL rte_dev_event_callback_process
lib/eal/version.map EXPERIMENTAL rte_dev_hotplug_handle_disable
lib/eal/version.map EXPERIMENTAL rte_dev_hotplug_handle_enable
Signed-off-by: David Marchand <david.marchand at redhat.com>
---
buildtools/map-list-symbol.sh | 39 ++++++++++++++++++++++-------------
devtools/check-symbol-maps.sh | 21 +++++++++++++++++++
2 files changed, 46 insertions(+), 14 deletions(-)
diff --git a/buildtools/map-list-symbol.sh b/buildtools/map-list-symbol.sh
index 3bf9bd66f8..a834399816 100755
--- a/buildtools/map-list-symbol.sh
+++ b/buildtools/map-list-symbol.sh
@@ -6,7 +6,7 @@ section=all
symbol=all
quiet=
-while getopts 'S:s:q' name; do
+while getopts 'S:s:qV:' name; do
case $name in
S)
[ $section = 'all' ] || {
@@ -25,8 +25,11 @@ while getopts 'S:s:q' name; do
q)
quiet='y'
;;
+ V)
+ version=$OPTARG
+ ;;
?)
- echo 'usage: $0 [-S section] [-s symbol] [-q]'
+ echo 'usage: $0 [-S section] [-s symbol] [-V version] [-q]'
exit 1
;;
esac
@@ -38,7 +41,8 @@ for file in $@; do
cat "$file" |awk '
BEGIN {
current_section = "";
- if ("'$section'" == "all" && "'$symbol'" == "all") {
+ current_version = "";
+ if ("'$section'" == "all" && "'$symbol'" == "all" && "'$version'" == "") {
ret = 0;
} else {
ret = 1;
@@ -49,18 +53,25 @@ for file in $@; do
current_section = $1;
}
}
- /.*}/ { current_section = ""; }
+ /.*}/ { current_section = ""; current_version = ""; }
+ /^\t# added in / {
+ current_version=$4;
+ }
/^[^}].*[^:*];/ {
- if (current_section != "") {
- gsub(";","");
- if ("'$symbol'" == "all" || $1 == "'$symbol'") {
- ret = 0;
- if ("'$quiet'" == "") {
- print "'$file' "current_section" "$1;
- }
- if ("'$symbol'" != "all") {
- exit 0;
- }
+ if (current_section == "") {
+ next;
+ }
+ if ("'$version'" != "" && "'$version'" != current_version) {
+ next;
+ }
+ gsub(";","");
+ if ("'$symbol'" == "all" || $1 == "'$symbol'") {
+ ret = 0;
+ if ("'$quiet'" == "") {
+ print "'$file' "current_section" "$1;
+ }
+ if ("'$symbol'" != "all") {
+ exit 0;
}
}
}
diff --git a/devtools/check-symbol-maps.sh b/devtools/check-symbol-maps.sh
index 8c116bfa9c..01cd09768d 100755
--- a/devtools/check-symbol-maps.sh
+++ b/devtools/check-symbol-maps.sh
@@ -74,4 +74,25 @@ if [ -n "$empty_maps" ] ; then
ret=1
fi
+find_bad_format_maps ()
+{
+ for map in $@ ; do
+ cat $map | awk '
+ /^(DPDK_[0-9]*|EXPERIMENTAL|INTERNAL) {$/ { next; } # start of a section
+ /^};$/ { next; } # end of a section
+ /^$/ { next; } # empty line
+ /^\t(global:|local: \*;)$/ { next; } # qualifiers
+ /^\t[a-zA-Z_0-9]*;(| # WINDOWS_NO_EXPORT)$/ { next; } # symbols
+ /^\t# added in [0-9]*\.[0-9]*$/ { next; } # version comments
+ { exit 1; }' || echo $map
+ done
+}
+
+bad_format_maps=$(find_bad_format_maps $@)
+if [ -n "$bad_format_maps" ] ; then
+ echo "Found badly formatted maps:"
+ echo "$bad_format_maps"
+ ret=1
+fi
+
exit $ret
--
2.41.0
More information about the dev
mailing list