Fix: Forbidden casts and LTO compatability improvements #1523
+25
−28
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR aims to improve standards conformance and LTO compatibility.
ISO C forbids casting function pointers to or from
void *
as the size of a function pointer is allowed to be different from the size of a data pointer, the library should never have been doing this and especially as the casts aren't even required, so we eliminate them for all devices BMD compiles for.It is an error to do pointer arithmetic on a void pointer -
sizeof(void)
has no standards-set size, and the operation is meaningless. Luckily all instances of this are trivially convertible to using properly typed pointers.LTO requires we mark the vector table, reset vector and vector table's section all used/keep so it doesn't eliminate them due to nothing it can see calling into them.