check the real sizes for your pointers and paddr_t type:
printf("paddr_t size: %d, pointer size: %d\n",
sizeof(paddr_t), sizeof(unsigned int *));
what are you getting?
update:
ARM is a 32-bit architecture, so you are trying to convert from a 64-bit integer to a 32-bit pointer that he does not like your compiler!
, paddr_t 32 , int:
unsigned int *p = (unsigned int *)(int)addrs;