* Target check. */
| 95 | * Target check. |
| 96 | */ |
| 97 | static RESULT target_check(uintptr_t target) |
| 98 | { |
| 99 | if (target < TARGETs.lb || target > TARGETs.ub) |
| 100 | return UNKNOWN; |
| 101 | ssize_t lo = 0, hi = TARGETs.size-1; |
| 102 | while (lo <= hi) |
| 103 | { |
| 104 | ssize_t mid = (lo + hi) / 2; |
| 105 | if (TARGETs.data[mid] < target) |
| 106 | lo = mid+1; |
| 107 | else if (TARGETs.data[mid] > target) |
| 108 | hi = mid-1; |
| 109 | else |
| 110 | return VALID; |
| 111 | } |
| 112 | return INVALID; |
| 113 | } |
| 114 | |
| 115 | /* |
| 116 | * Entry point. |