position independent code generation