On-core you load a GP register using the ldr instruction, only.
Section 7.3 of the architecture reference manual states that reading the general purpose registers externally from the memory mapped region is not supported while the cpu is active - which is what e_reg_read does (it still goes across the external bus). e_reg_read is for the system registers like dma, not for the gp registers. This presumably also covers writes from the arm. The core needs to be halted first.
Either way do it you normally can't manipulate register contents like this because the compiler assumes they aren't going to change without it's knowledge. You can bind a variable to a register within a given function or compilation unit - look at the variable attributes section in the gcc manual.
What are you trying to do?