Q:

difference between ldr and ldr.w

I recently had to debug a MachO binary and I came across the following instruction :-
ldr.w  r4, [r1, r0, lsl #2]
I understand that ldr  r4, [r1, r0, lsl #2] shifts r0 to the left two times, adds it to r1 and dereferences the result.
How is ldr.w different?

A:

.W is an optional instruction width specifier. It doesn't affect the behaviour of the instruction as such, it just ensures that a 32 bit instruction is generated. See infocenter.arm.com for details:
LDR (pc-relative) in Thumb-2
You can use the .W width specifier to force LDR to generate a 32-bit instruction in Thumb-2 code. LDR.W always generates a 32-bit instruction, even if the target could be reached using a 16-bit LDR.
For forward references, LDR without .W always generates a 16-bit instruction in Thumb code, even if that results in failure for a target that could be reached using a 32-bit Thumb-2 LDR instruction. 

