-
Notifications
You must be signed in to change notification settings - Fork 5.3k
fix(stdio): ensure compatibility with newlib <3.4.0 by handling removed __sdidinit #10791
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
Conversation
📌 Code Review Assignment🏷️ Tag: componentsReviewers: Maihuanyi Changed Files (Click to expand)
🏷️ Tag: components_libcReviewers: GorrayLi mysterywolf Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2025-10-13 10:52 CST)
📝 Review Instructions
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
This PR is ready for review. All automated checks have passed, but merging is blocked because: ✅ At least 1 approving review is required Could you please:
Thanks for your time! 🙏 |
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.
Pull Request Overview
This PR fixes compatibility issues with newer versions of Newlib (>= 3.4.0) by updating the stdio initialization code. The __sdidinit
field was removed from the _GLOBAL_REENT
structure in newer Newlib versions, causing compilation errors when accessing this field directly.
Key changes:
- Replaces version-specific macro checks with feature detection
- Uses
_REENT_SMALL
and__sdidinit
definitions to determine compatibility - Maintains backward compatibility with older Newlib versions
// Newlib >= 3.4.0 or small reent version: no __sdidinit field | ||
// Do nothing | ||
#else | ||
// Older newlib versions (typically < 3.4.0) still define __sdidinit |
Copilot
AI
Oct 11, 2025
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.
English: The comment style should follow RT-Thread coding standards using C-style comments (/* */
) instead of C++-style comments (//
) for consistency with the existing codebase.\n\n中文: 注释风格应遵循 RT-Thread 编码标准,使用 C 风格注释(/* */
)而不是 C++ 风格注释(//
),以与现有代码库保持一致。
// Newlib >= 3.4.0 or small reent version: no __sdidinit field | |
// Do nothing | |
#else | |
// Older newlib versions (typically < 3.4.0) still define __sdidinit | |
/* Newlib >= 3.4.0 or small reent version: no __sdidinit field */ | |
/* Do nothing */ | |
#else | |
/* Older newlib versions (typically < 3.4.0) still define __sdidinit */ |
Copilot uses AI. Check for mistakes.
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.
这个麻烦作者修改下
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.
好的
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.
已修改
@Rbb666 @supperthomas |
这边看到代码,没有修改,再check一下。 |
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.
再检查下代码,目前没有修改
这个是因为多加了一个空格,所以审核没通过,所以我把空格去掉了。
|
@Rbb666 @supperthomas |
f50b8d8
to
bf93762
Compare
@Rbb666 @supperthomas |
pull request 标题修改一下,添加前缀,参考其他PR |
收到
|
已修改完成,谢谢您提意见。
|
感谢贡献 |
谢谢各位给予修改意见让我完成本次合并。谢谢! |
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
前 RT-Thread 在使用 newlib 的部分版本时,会出现以下问题:
在
_GLOBAL_REENT
结构中,旧版本使用的__sdidinit
字段已被移除;_GLOBAL_REENT->__sdidinit
,导致在编译 newlib 时出错;你的解决方案是什么 (what is your solution)
在
components/libc/posix/io/stdio.c/stdio.c
中增加更合理的版本判断宏:#if defined(_REENT_SMALL) || !defined(__sdidinit)
// Newlib >= 3.4.0 or small reent version: no __sdidinit field
// Do nothing
#else
// Older newlib versions (typically < 3.4.0) still define __sdidinit
_GLOBAL_REENT->__sdidinit = 1;
#endif
请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0
代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up