Fix embedded images built with the clang compiler#730
Fix embedded images built with the clang compiler#730danielinux wants to merge 19 commits intowolfSSL:masterfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR addresses oversized/sparse embedded images produced when building with clang by adjusting linking and objcopy behavior for clang-based builds.
Changes:
- Add clang-specific
objcopysection filtering to avoid producing huge sparse binary/hex/srec outputs. - Switch clang builds to use the GNU linker driver to preserve LMAs in the linker script.
- Relax clang build warnings around unknown attributes.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| test-app/Makefile | Introduces clang-specific objcopy flags and applies them to image artifact generation to prevent sparse outputs. |
| arch.mk | Changes clang toolchain linking to use GNU linker driver and adds clang warning suppressions for unknown attributes. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated 6 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
9c7d22d to
aeee273
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 16 out of 16 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| /* Workaround for GNU ld mishandling AT() on output sections when no input | ||
| * object contributes a matching section. Clang does not emit empty .data/.bss | ||
| * sections in object files (GCC does), so GNU ld fails to assign the correct | ||
| * LMA for the .data output section, producing a huge sparse binary. | ||
| * Including this object ensures .data and .bss exist as inputs. |
There was a problem hiding this comment.
The header comment attributes the sparse-binary issue to “GNU ld”, but Clang builds now force -fuse-ld=lld in arch.mk. If the real failure mode is tied to the linker being used with USE_CLANG=1, consider updating this comment to describe the problem more generally (or name the specific linker/toolchain combination that still needs the workaround) so future maintenance doesn’t incorrectly assume GNU ld is still involved.
| /* Workaround for GNU ld mishandling AT() on output sections when no input | |
| * object contributes a matching section. Clang does not emit empty .data/.bss | |
| * sections in object files (GCC does), so GNU ld fails to assign the correct | |
| * LMA for the .data output section, producing a huge sparse binary. | |
| * Including this object ensures .data and .bss exist as inputs. | |
| /* Workaround for the linker used with Clang builds mishandling AT() on | |
| * output sections when no input object contributes a matching section. | |
| * Clang does not emit empty .data/.bss sections in object files (GCC does), | |
| * so the linker can assign the wrong LMA for the .data output section, | |
| * producing a huge sparse binary. Including this object ensures .data and | |
| * .bss exist as inputs. |
0f77eac to
a0a3dae
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 16 out of 16 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| /* Workaround for GNU ld mishandling AT() on output sections when no input | ||
| * object contributes a matching section. Clang does not emit empty .data/.bss | ||
| * sections in object files (GCC does), so GNU ld fails to assign the correct | ||
| * LMA for the .data output section, producing a huge sparse binary. | ||
| * Including this object ensures .data and .bss exist as inputs. | ||
| */ |
There was a problem hiding this comment.
This new assembly file is missing the project’s standard wolfBoot GPL license header comment that appears at the top of other assembly sources. Add the usual license boilerplate (and any required file-level copyright line) to keep licensing consistent across the codebase.
| inputs.config-file == './config/examples/stm32u5-nonsecure-dualbank.config' || | ||
| inputs.config-file == './config/examples/stm32n567.config' |
There was a problem hiding this comment.
The Clang rebuild condition includes ./config/examples/stm32n567.config, but that config file is not present in this repository. This makes the workflow inconsistent and will fail if the reusable workflow is ever called with that inputs.config-file value; either add the missing config file or remove/rename this entry to an existing config path.
| inputs.config-file == './config/examples/stm32u5-nonsecure-dualbank.config' || | |
| inputs.config-file == './config/examples/stm32n567.config' | |
| inputs.config-file == './config/examples/stm32u5-nonsecure-dualbank.config' |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 21 out of 21 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
zd21378