Skip to content

Conversation

@bernd-edlinger
Copy link
Contributor

This allows the IAR debugger to display the callstack beyond __interrupt_27 when a breakpoint in vTaskSwitchContext is made.

  • I have tested my changes. No regression in existing tests.
  • I have modified and/or added unit-tests to cover the code changes in this Pull Request.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aggarg
Copy link
Member

aggarg commented Dec 31, 2025

@ShunichiroNakamura and @TakeoTakahashi2020, Would you please take a look at this change?

@ShunichiroNakamura
Copy link

@aggarg , I apologize for the delayed response. I will review it.


CFI Names cfiNames0
CFI StackFrame CFA SP DATA
CFI VirtualResource ?RET:32

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.

Copy link
Contributor Author

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.

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.

@aggarg
Copy link
Member

aggarg commented Jan 7, 2026

@ShunichiroNakamura Thank you for reviewing.

@ShunichiroNakamura
Copy link

@aggarg , LGTM. I have no further comments.

@aggarg
Copy link
Member

aggarg commented Jan 11, 2026

Please merge recent changes from main.

@bernd-edlinger bernd-edlinger force-pushed the add_cfi_frame_unwind_info branch from 2a8b78a to d5e2810 Compare January 12, 2026 11:01
This allows the IAR debugger to display the callstack beyond
__interrupt_27 when a breakpoint in vTaskSwitchContext is made.
@sonarqubecloud
Copy link

@bernd-edlinger
Copy link
Contributor Author

Please merge recent changes from main.

okay, rebased to c53a6b0

@moninom1 moninom1 merged commit d5c3c98 into FreeRTOS:main Jan 12, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants