2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-22 10:10:06 +00:00
bind/util/checklibs.sh
Aydın Mercan 7d5928c3a2
add isc/bit.h and unify common bit operations
The `<isc/bit.h>` header is a GNU C11 compatible version of C23's
`<stdbit.h>`.

It currently uses either `<stdbit.h>` or the equivilent compiler
builtins. However, the generic `__builtin_ctzg` and `__builtin_ctlz`
builtins are not available in every compiler version and thus falls
back to manually selecting from type.

Furthermore, the ctz fallback has been removed since `__builtin_ctzll`
has been used for a while directly without any compilation issues from
users. Thus, we can also require `__builtin_ctz`.

Unlike the rest of C23's bit utilities, we avoid the stdc_rotate_*
functions since we don't need the rotation modulus precision. This adds
a couple (admittedly cheap) unwanted instructions on some architectures.
2025-08-19 11:52:12 +03:00

79 lines
2.0 KiB
Bash
Executable File

#!/bin/sh
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
#
# SPDX-License-Identifier: MPL-2.0
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
status=0
#
# Check for missing #include <isc/strerr.h>
#
list=$(git grep -wl strerror_r lib bin \
| grep '\.c$' \
| grep -vE -e '(lib/bind|lib/dns/rdata|lib/dns/gen.c)' \
-e lib/isc/string.c \
-e '(dlzexternal/driver.c)' \
| xargs grep -EL "(isc/strerr.h)" 2>/dev/null)
[ -n "$list" ] && {
status=1
echo 'Missing #include <isc/strerr.h>:'
echo "$list"
}
#
# Check for missing #include <inttypes.h>"
#
list=$(git grep -l uintptr_t lib bin \
| grep '\.c$' \
| grep -vE -e '(lib/bind|lib/dns/rdata|lib/dns/gen.c)' \
-e '(lib/isc/win32/time.c)' \
| xargs grep -L "<inttypes.h>")
[ -n "$list" ] && {
status=1
echo 'Missing #include <inttypes.h>:'
echo "$list"
}
#
# Check for the direct usage of stdatomic.h
#
list=$(git grep -l stdatomic.h lib bin ':(exclude)lib/isc/include/isc/atomic\.h' \
| grep -e '\.c$' -e '\.h$')
[ -n "$list" ] && {
status=1
echo 'Use #include <isc/atomic.h> instead of #include <stdatomic.h>:'
echo "$list"
}
#
# Check for the usage of explicit memory ordering
#
list=$(git grep -l memory_order_.* lib bin ':(exclude)lib/isc/include/isc/atomic\.h' \
| grep -e '\.c$' -e '\.h$')
[ -n "$list" ] && {
status=1
echo 'Prefer the helpers in <isc/atomic.h> over specifying an explicit memory order:'
echo "$list"
}
#
# Check for the usage of built-in bit operarators
#
list=$(git grep -l -e '__builtin_ctz' --or -e '__builtin_popcount' --or -e '__builtin_clz' lib bin ':(exclude)lib/isc/include/isc/bit\.h' \
| grep -e '\.c$' -e '\.h$')
[ -n "$list" ] && {
status=1
echo 'Prefer the helpers in <isc/bit.h> over builtin bit utilities:'
echo "$list"
}
exit $status