1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include <sys/param.h>
- #include <sys/endian.h>
- #include <machine/db_machdep.h>
- #include <ddb/db_access.h>
- db_expr_t
- db_get_value(db_addr_t addr, size_t size, boolean_t is_signed)
- {
- char data[sizeof(db_expr_t)];
- db_expr_t value, extend;
- int i;
- #ifdef DIAGNOSTIC
- if (size > sizeof data)
- size = sizeof data;
- #endif
- db_read_bytes(addr, size, data);
- value = 0;
- extend = (~(db_expr_t)0) << (size * 8 - 1);
- #if BYTE_ORDER == LITTLE_ENDIAN
- for (i = size - 1; i >= 0; i--)
- #else
- for (i = 0; i < size; i++)
- #endif
- value = (value << 8) + (data[i] & 0xFF);
-
- if (size < sizeof(db_expr_t) && is_signed && (value & extend))
- value |= extend;
- return (value);
- }
- void
- db_put_value(db_addr_t addr, size_t size, db_expr_t value)
- {
- char data[sizeof(db_expr_t)];
- int i;
- #ifdef DIAGNOSTIC
- if (size > sizeof data)
- size = sizeof data;
- #endif
- #if BYTE_ORDER == LITTLE_ENDIAN
- for (i = 0; i < size; i++)
- #else
- for (i = size - 1; i >= 0; i--)
- #endif
- {
- data[i] = value & 0xff;
- value >>= 8;
- }
- db_write_bytes(addr, size, data);
- }
|