-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Add CFI frame unwind info in portable/IAR/RXv2/port_asm.s #1341
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Add CFI frame unwind info in portable/IAR/RXv2/port_asm.s #1341
Conversation
This allows the IAR debugger to display the callstack beyond __interrupt_27 when a breakpoint in vTaskSwitchContext is made.
|
|
@ShunichiroNakamura and @TakeoTakahashi2020, Would you please take a look at this change? |
|
@aggarg , I apologize for the delayed response. I will review it. |
|
|
||
| CFI Names cfiNames0 | ||
| CFI StackFrame CFA SP DATA | ||
| CFI VirtualResource ?RET:32 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bernd-edlinger ,
I have a quick question regarding resource naming: does the '?' have any specific meaning? I checked the manual, but I couldn’t find any clear guidelines on naming conventions or common practices.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is apparently the name of the return address, I have not found it in any documentation either...
I saw this syntax in the assembler files, generated by the IAR compiler when I added the option -la .
to save the intermediate assembler file with debug info generated by the compiler. Some of the
interrupts are written in C with syntax like __interrupt void vTickISR( void ) etc.
But the ?RET is used everywhere, normal functions have the return addess at Frame(CFA, -4)
and Interrupts have it at Frame(CFA, -8) while at Frame(CFA, -4) is probably the interrupted
processor flags or something that the debugger does not care about for the call stack.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bernd-edlinger , thank you for your response.
I saw this syntax in the assembler files, generated by the IAR compiler when I added the option
-la .
I understand that the name is based on one generated by the IAR compiler. In that case, there should be no problem.
But the ?RET is used everywhere, normal functions have the return addess at Frame(CFA, -4)
and Interrupts have it at Frame(CFA, -8) while at Frame(CFA, -4) is probably the interrupted
processor flags or something that the debugger does not care about for the call stack.
I don't have sufficient knowledge about the CFI of the IAR compiler, so this is just a guess, but here is what I assume. Please refer to the RX Instruction Set Architecture manual, especially the JSR and INT instructions:
- The
Frame(CFA, -4)in normal functions represents the stack area used to store the caller's PC register. - The
Frame(CFA, -8)in interrupts represents the stack area used to store the PC and PSW registers from immediately before the interrupt.
|
@ShunichiroNakamura Thank you for reviewing. |
|
@aggarg , LGTM. I have no further comments. |



This allows the IAR debugger to display the callstack beyond __interrupt_27 when a breakpoint in vTaskSwitchContext is made.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.