Base gcc fails to compile sys/dev/bxe/bxe.c for i386, with the
following -Werror warnings:
cc1: warnings being treated as errors /usr/src/sys/dev/bxe/bxe.c: In function 'bxe_allocate_bars': /usr/src/sys/dev/bxe/bxe.c:12822: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] /usr/src/sys/dev/bxe/bxe.c:12822: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] /usr/src/sys/dev/bxe/bxe.c:12822: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] /usr/src/sys/dev/bxe/bxe.c:12822: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
This is because on i386, the casts from rman_res_t (aka uintmax_t)
to a pointer reduces the value from 64 bit to 32 bit, and similar for
the kva member of struct bxe_bar, which is a vm_offset_t (aka
uint32_t).
For gcc, this can be fixed by an intermediate cast to uintptr_t. Note
that I am assuming the incoming values will always fit into 32 bit!