what is the current execution mode/exception level, etc?

前端 未结 2 1609
甜味超标
甜味超标 2020-12-11 21:25

I am new to ARMv8 architecture. I have following basic questions on my mind:

  1. How do I know what is the current execution mode AArch32 or AArch64? Should I r

2条回答
  •  死守一世寂寞
    2020-12-11 21:53

    1. The assembly instructions and their binary encoding are entirely different for 32 and 64 bit. So the information what mode you are currently in is something that you/ the compiler already needs to know during compilation. checking for them at runtime doesn't make sense. For C, C++ checking can be done at compile time (#ifdef) through compiler provided macros like the ones provided by armclang: __aarch64__ for 64 bit, __arm__ for 32 bit
    2. depends on the execution mode:
      • aarch32: MRS , CPSR read the current state into register number n. Then extract bits 3:0 that contain the current mode.
      • aarch64: MRS , CurrentEL read the current EL into register number n
    3. short answer: you can't. long answer: the assumption is that by the structure of the code and the state of any user defined variables, you already know what you are doing. i.e. whether you came to a position in code through regular code or through an exception.

提交回复
热议问题