all: more cleanups; NFCI
This commit is contained in:
+22
-9
@@ -33,37 +33,50 @@ XSPAN_NAMESPACE_BEGIN
|
||||
// debugging stats
|
||||
struct XSpanStats {
|
||||
upx_std_atomic(size_t) check_range_counter;
|
||||
// doctest checks will set these:
|
||||
upx_std_atomic(size_t) fail_nullptr;
|
||||
upx_std_atomic(size_t) fail_nullbase;
|
||||
upx_std_atomic(size_t) fail_not_same_base;
|
||||
upx_std_atomic(size_t) fail_range_nullptr;
|
||||
upx_std_atomic(size_t) fail_range_nullbase;
|
||||
upx_std_atomic(size_t) fail_range_range;
|
||||
};
|
||||
static XSpanStats xspan_stats;
|
||||
|
||||
// HINT: set env-var "UPX_DEBUG_DOCTEST_DISABLE=1" for improved debugging experience
|
||||
__acc_noinline void xspan_fail_nullptr() {
|
||||
noinline void xspan_fail_nullptr() {
|
||||
xspan_stats.fail_nullptr += 1;
|
||||
throwCantUnpack("xspan unexpected NULL pointer; take care!");
|
||||
}
|
||||
__acc_noinline void xspan_fail_nullbase() {
|
||||
noinline void xspan_fail_nullbase() {
|
||||
xspan_stats.fail_nullbase += 1;
|
||||
throwCantUnpack("xspan unexpected NULL base; take care!");
|
||||
}
|
||||
__acc_noinline void xspan_fail_not_same_base() {
|
||||
noinline void xspan_fail_not_same_base() {
|
||||
xspan_stats.fail_not_same_base += 1;
|
||||
throwInternalError("xspan unexpected base pointer; take care!");
|
||||
}
|
||||
|
||||
__acc_noinline void xspan_fail_range_nullptr() {
|
||||
noinline void xspan_fail_range_nullptr() {
|
||||
xspan_stats.fail_range_nullptr += 1;
|
||||
throwCantUnpack("xspan_check_range: unexpected NULL pointer; take care!");
|
||||
}
|
||||
__acc_noinline void xspan_fail_range_nullbase() {
|
||||
noinline void xspan_fail_range_nullbase() {
|
||||
xspan_stats.fail_range_nullbase += 1;
|
||||
throwCantUnpack("xspan_check_range: unexpected NULL base; take care!");
|
||||
}
|
||||
__acc_noinline void xspan_fail_range_range() {
|
||||
noinline void xspan_fail_range_range() {
|
||||
xspan_stats.fail_range_range += 1;
|
||||
throwCantUnpack("xspan_check_range: pointer out of range; take care!");
|
||||
}
|
||||
|
||||
void xspan_check_range(const void *p, const void *base, ptrdiff_t size_in_bytes) {
|
||||
if __acc_very_unlikely (p == nullptr)
|
||||
if very_unlikely (p == nullptr)
|
||||
xspan_fail_range_nullptr();
|
||||
if __acc_very_unlikely (base == nullptr)
|
||||
if very_unlikely (base == nullptr)
|
||||
xspan_fail_range_nullbase();
|
||||
ptrdiff_t off = (const char *) p - (const char *) base;
|
||||
if __acc_very_unlikely (off < 0 || off > size_in_bytes)
|
||||
if very_unlikely (off < 0 || off > size_in_bytes)
|
||||
xspan_fail_range_range();
|
||||
xspan_stats.check_range_counter += 1;
|
||||
// fprintf(stderr, "xspan_check_range done\n");
|
||||
|
||||
Reference in New Issue
Block a user