Skip to content

Fix signed overflow in modem training phase arithmetic - #128

Open
coral wants to merge 1 commit into
freeswitch:masterfrom
coral:master
Open

coral wants to merge 1 commit into
freeswitch:masterfrom
coral:master

Conversation

@coral

@coral coral commented Sep 11, 2026

Copy link
Copy Markdown

Ran into an interesting issue where compiling with GCC at -O2 and -O3 made modem training unstable but compiling the receiver at -O0, or with -fwrapv, made it work. Eventually tracked it down to this.

The phase angles represent a full turn in 32 bits, so the differences need to wrap around. For example, going from 0x7ffffff0 to 0x80000010 should give a difference of 32, but subtracting those as signed integers overflows. Casting the result to unsigned afterward is too late.

This moves the casts before the arithmetic so the wraparound is defined, then casts back to signed where the training logic expects it.

…o-2³² wraparound without invoking signed-overflow undefined behavior.
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.

1 participant