| 1526 | } |
| 1527 | |
| 1528 | static ulongest |
| 1529 | llluGetNumber(char *szLocation, struct CTypeDescriptor *pType, unsigned long ulNumber) |
| 1530 | { |
| 1531 | size_t zNumberWidth; |
| 1532 | ulongest UL = 0; |
| 1533 | |
| 1534 | ASSERT(pType); |
| 1535 | |
| 1536 | zNumberWidth = zDeserializeTypeWidth(pType); |
| 1537 | switch (zNumberWidth) { |
| 1538 | default: |
| 1539 | Report(true, "UBSan: Unexpected %zu-Bit Type in %s\n", zNumberWidth, szLocation); |
| 1540 | __unreachable(); |
| 1541 | /* NOTREACHED */ |
| 1542 | case WIDTH_128: |
| 1543 | #ifdef __SIZEOF_INT128__ |
| 1544 | memcpy(&UL, REINTERPRET_CAST(ulongest *, ulNumber), sizeof(ulongest)); |
| 1545 | break; |
| 1546 | #else |
| 1547 | Report(true, "UBSan: Unexpected 128-Bit Type in %s\n", szLocation); |
| 1548 | __unreachable(); |
| 1549 | /* NOTREACHED */ |
| 1550 | #endif |
| 1551 | case WIDTH_64: |
| 1552 | if (sizeof(ulNumber) * CHAR_BIT < WIDTH_64) { |
| 1553 | UL = *REINTERPRET_CAST(uint64_t *, ulNumber); |
| 1554 | break; |
| 1555 | } |
| 1556 | /* FALLTHROUGH */ |
| 1557 | case WIDTH_32: |
| 1558 | /* FALLTHROUGH */ |
| 1559 | case WIDTH_16: |
| 1560 | /* FALLTHROUGH */ |
| 1561 | case WIDTH_8: |
| 1562 | UL = ulNumber; |
| 1563 | break; |
| 1564 | } |
| 1565 | |
| 1566 | return UL; |
| 1567 | } |
| 1568 | |
| 1569 | #ifndef _KERNEL |
| 1570 | static void |
no test coverage detected