Hi @vikmonti7804
Let me re-use text about jumping from bootloader to application I wrote earlier - see below. In addition, be aware that it's necessary to de-initialize all the features used by bootloader, especially it is necessary to disable interrupts on all levels - in the core, by local enable bits in peripherals, clear pending interrupts...
*********
In case of ARM devices, stack pointer is initialized automatically after reset using “Initial SP value” in the vector table:

So, bootloader’s code should initialize the stack pointer as a first step and then it can jump to the application.
Here is an example from application note AN12218 S32K1xx Bootloader:
/* Start address for the application received by the bootloader
* application vector table should start at this address
* */
#define APP_START_ADDRESS 0x1000
/**
* Used to jump to the entry point of the user application
* The Vector table of the user application must be located at 0x1000
*
* */
void JumpToUserApplication( unsigned int userSP, unsigned int userStartup)
{
/* Check if Entry address is erased and return if erased */
if(userSP == 0xFFFFFFFF){
return;
}
/* Set up stack pointer */
__asm("msr msp, r0");
__asm("msr psp, r0");
/* Relocate vector table */
S32_SCB->VTOR = (uint32_t)APP_START_ADDRESS;
/* Jump to application PC (r1) */
__asm("mov pc, r1");
}
And here is an example from application note AN12323 S32K1xx Firmware updates:
void JumpToApplication(uint32_t start_address)
{
void (*entry)(void);
uint32_t pc;
uint32_t __attribute__((unused)) sp;
S32_SCB->VTOR=(uint32_t)(start_address); /*Relocate interrupt table ptr*/
sp = *((volatile uint32_t*)start_address);
asm(" ldr sp, [r0,#0]");
pc = *((volatile uint32_t *)(start_address + 4));
entry = (void (*)(void))pc;
entry();
}