instruction equivalent to movw,movt with position independent and PC relocatable.

Using movw and movt to load a label address into a register in Arm 32 architecture. but this is not position independent  code.

movw r1, #:lower16:ASM_NAME(forkx)
movt r1, #:upper16:ASM_NAME(forkx)

As per the manual also it specifies that it will be resolved at the link time.

Need a position independent code, so as per the manual adr, adrl can be used, but getting below error:

../asm-arm/unix_arm.S:115:1: error: unsupported relocation on symbol
adr r1, __be_forkx

../asm-arm/unix_arm.S:60:1: error: invalid instruction, did you mean: adr?
adrl r1, __be_forkx

it seems label can not be used in the aarch32, it is fine in aarch64 and works as intendent.

is the usage of adr command is improper? Is there a way to achieve this in aarch32?  is there any equivalent command that can be used?

More questions in this forum