> Date: Sun, 10 Nov 2019 13:09:44 +0100
> From: Martin Pieuchot <[email protected]>
>
> 'db_expr_t' is defined as 'long' on all platforms. I'd like to use some
> of the ddb interfaces without having to pull all the type & cast mess into
> non-DDB code.
>
> Here's an example of getting rid of <machine/db_machdep.h> in MI code
> and using 'long' instead of 'db_expr_t'.
>
> ok?
I think this one actually makes the code easier to understand.
However, I do agree that there is no reason for this to be in an MD
file. Could we move the typedef into some other ddb header file?
> Index: ddb/db_access.c
> ===================================================================
> RCS file: /cvs/src/sys/ddb/db_access.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 db_access.c
> --- ddb/db_access.c 7 Nov 2019 13:16:25 -0000 1.16
> +++ ddb/db_access.c 10 Nov 2019 10:30:35 -0000
> @@ -33,19 +33,17 @@
> #include <sys/param.h>
> #include <sys/endian.h>
>
> -#include <machine/db_machdep.h> /* type definitions */
> -
> #include <ddb/db_access.h>
>
> /*
> * Access unaligned data items on aligned (longword)
> * boundaries.
> */
> -db_expr_t
> +long
> db_get_value(vaddr_t addr, size_t size, int is_signed)
> {
> - char data[sizeof(db_expr_t)];
> - db_expr_t value, extend;
> + char data[sizeof(long)];
> + long value, extend;
> int i;
>
> #ifdef DIAGNOSTIC
> @@ -56,7 +54,7 @@ db_get_value(vaddr_t addr, size_t size,
> db_read_bytes(addr, size, data);
>
> value = 0;
> - extend = (~(db_expr_t)0) << (size * 8 - 1);
> + extend = (~(long)0) << (size * 8 - 1);
> #if BYTE_ORDER == LITTLE_ENDIAN
> for (i = size - 1; i >= 0; i--)
> #else /* BYTE_ORDER == BIG_ENDIAN */
> @@ -64,15 +62,15 @@ db_get_value(vaddr_t addr, size_t size,
> #endif /* BYTE_ORDER */
> value = (value << 8) + (data[i] & 0xFF);
>
> - if (size < sizeof(db_expr_t) && is_signed && (value & extend))
> + if (size < sizeof(long) && is_signed && (value & extend))
> value |= extend;
> return (value);
> }
>
> void
> -db_put_value(vaddr_t addr, size_t size, db_expr_t value)
> +db_put_value(vaddr_t addr, size_t size, long value)
> {
> - char data[sizeof(db_expr_t)];
> + char data[sizeof(long)];
> int i;
>
> #ifdef DIAGNOSTIC
> Index: ddb/db_access.h
> ===================================================================
> RCS file: /cvs/src/sys/ddb/db_access.h,v
> retrieving revision 1.10
> diff -u -p -r1.10 db_access.h
> --- ddb/db_access.h 7 Nov 2019 13:16:25 -0000 1.10
> +++ ddb/db_access.h 10 Nov 2019 10:30:47 -0000
> @@ -33,8 +33,8 @@
> /*
> * Data access functions for debugger.
> */
> -db_expr_t db_get_value(vaddr_t, size_t, int);
> -void db_put_value(vaddr_t, size_t, db_expr_t);
> +long db_get_value(vaddr_t, size_t, int);
> +void db_put_value(vaddr_t, size_t, long);
>
> void db_read_bytes(vaddr_t, size_t, char *);
> void db_write_bytes(vaddr_t, size_t, char *);
>
>