The 'channel request hangup' CLI command now accepts multiple channel names, POSIX Extended Regular Expressions, glob-like patterns, or a combination of all of them. See the CLI command 'core show help channel request hangup' for full details.
The AMI command sorcery memory cache populate will now return an error if there is an internal error performing the populate. The CLI command will display an error in this case as well.
Geolocation: Two new optional profile parameters have been added.
pidf_element_id which sets the value of the id attribute on the top-level
PIDF-LO device, person or tuple elements.device_id which sets the content of the <deviceID> element.
Both parameters can include channel variables.
A new pjsip endpoint option follow_redirect_methods was added. This option is a comma-delimited, case-insensitive list of SIP methods for which SIP 3XX redirect responses are followed. An alembic upgrade script has been added for adding this new option to the Asterisk database.
New CLI command has been added -
core show taskprocessor name
A new "enabled" parameter has been added to ccss.conf. It defaults to "yes" to preserve backwards compatibility but CCSS is rarely used so setting "enabled = no" in the "general" section can save some unneeded channel locking operations and log message spam. Disabling ccss will also prevent the func_callcompletion and chan_dahdi modules from loading.
Try "make module-list-deprecated" to see what modules are on their way out the door.
This change introduces a new 's(
When announce_to_first_user is false, no announcements are played to the head caller
crs (coordinate reference system) element
has been added to the location_info parameter that indicates whether the 2d
or 3d reference system is to be used. If the crs isn't valid for the shape
specified, an error will be generated. The default depends on the shape
specified.2d crs. If crs isn't
specified, it will default to 2d for these shapes.
The Sphere, Ellipsoid and Prism shapes MUST use a 3d crs. If crs isn't
specified, it will default to 3d for these shapes.
The Point and Polygon shapes may use either crs. The default crs is 2d
however so if 3d positions are used, the crs must be explicitly set to 3d.geoloc show gml_shape_defs CLI command has been updated to show which
coordinate reference systems are valid for each shape.pos3d element has been removed in favor of allowing the pos element
to include altitude if the crs is 3d. The number of values in the pos
element MUST be 2 if the crs is 2d and 3 if the crs is 3d. An error
will be generated for any other combination.The angle unit-of-measure for shapes that use angles should now be included
in the respective parameter. The default is degrees. There were some
inconsistent references to orientation_uom in some documentation but that
parameter never worked and is now removed. See examples below.
Examples...
location_info = shape="Sphere", pos="39.0 -105.0 1620", radius="20"
location_info = shape="Point", crs="3d", pos="39.0 -105.0 1620"
location_info = shape="Point", pos="39.0 -105.0"
location_info = shape=Ellipsoid, pos="39.0 -105.0 1620", semiMajorAxis="20"
semiMinorAxis="10", verticalAxis="0", orientation="25 degrees"
pidf_element_id = ${CHANNEL(name)}-${EXTEN}
device_id = mac:001122334455
Set(GEOLOC_PROFILE(pidf_element_id)=${CHANNEL(name)}/${EXTEN})
The threadpool_* options in pjsip.conf have now been deprecated though they continue to be read and used. They have been replaced with taskpool options that give greater control over the underlying taskpool used for PJSIP. An alembic upgrade script has been added to add these options to realtime as well.
In an effort to reduce log spam, two normal progress "pickup attempted" log messages from app_directed_pickup have been changed from NOTICE to VERBOSE(3). This puts them on par with other normal dialplan progress messages.
A new API ast_is_cc_enabled() has been added. It should be used to ensure that CCSS is enabled before making any other ast_cc_* calls.
Apps can now send a MARK_MEDIA command with an optional
correlation_id parameter to chan_websocket which will be placed in the
media frame queue. When that frame is dequeued after all intervening media
has been played to the core, chan_websocket will send a
MEDIA_MARK_PROCESSED event to the app with the same correlation_id
(if any).
The chan_websocket plain-text control and event messages are now deprecated (but remain the default) in favor of JSON formatted messages. See https://docs.asterisk.org/Configuration/Channel-Drivers/WebSocket for more information. A "transport_data" parameter has been added to the
NOT_SET to be set from CLI.Author: Joe Garlick Date: 2026-01-15
When chan_websocket received a Ping or a Pong opcode it would cause the channel to hangup. This change allows Ping/Pong opcodes and allows them to silently pass
Author: Sean Bright Date: 2026-01-05
This extends 'channel request hangup' to accept multiple channel names, a POSIX Extended Regular Expression, a glob-like pattern, or a combination of all of them.
UserNote: The 'channel request hangup' CLI command now accepts multiple channel names, POSIX Extended Regular Expressions, glob-like patterns, or a combination of all of them. See the CLI command 'core show help channel request hangup' for full details.
Author: Mike Bradeen Date: 2026-01-06
Reduce cache lock time for AMI and CLI sorcery memory cache populate commands by adding a new populate_lock to the sorcery_memory_cache struct which is locked separately from the existing cache lock so that the cache lock can be maintained for a reduced time, locking only when the cache objects are removed and re-populated.
Resolves: #1700
UserNote: The AMI command sorcery memory cache populate will now return an error if there is an internal error performing the populate. The CLI command will display an error in this case as well.
Author: phoneben Date: 2026-01-05
Add comment to asterisk.conf.sample clarifying that template sections are ignored.
Resolves: #1692
Author: George Joseph Date: 2025-12-30
We now add the websocket's file descriptor to the channel's fd array and let it poll for data availability instead if having a dedicated thread that does the polling. This eliminates the thread and allows removal of most explicit locking since the core channel code will lock the channel to prevent simultaneous calls to webchan_read, webchan_hangup, etc.
While we were here, the hangup code was refactored to use ast_hangup_with_cause instead of directly queueing an AST_CONTROL_HANGUP frame. This allows us to set hangup causes and generate snapshots.
For a bit of extra debugging, a table of websocket close codes was added to http_websocket.h with an accompanying "to string" function added to res_http_websocket.c
Resolves: #1683
Author: Sean Bright Date: 2025-12-13
Versions of libedit that support Unicode expect that the
EL_GETCFN (the function that does character I/O) will fill in a
wchar_t with a character, which may be multi-byte. The built-in
function that libedit provides, but does not expose with a public API,
does properly handle multi-byte sequences.
Due to the design of Asterisk's console processing loop, Asterisk provides its own implementation which does not handle multi-byte characters. Changing Asterisk to use libedit's built-in function would be ideal, but would also require changing some fundamental things about console processing which could be fairly disruptive.
Instead, we bring in libedit's read_char implementation and modify
it to suit our specific needs.
Resolves: #60
NOT_SET to be set from CLI.Author: Sean Bright Date: 2026-01-01
Resolves: #1647
Author: Peter Krall Date: 2025-12-17
Always take an explicit reference on the format used for bridge playback and recording channels, regardless of where it was sourced, and release it after prepare_bridge_media_channel. This aligns the code paths and avoids mixing borrowed and owned references while preserving behavior.
Fixes: #1648
Author: George Joseph Date: 2025-12-17
<gml:pos>
element resulting in invalid XML.id attribute on the enclosing tuple, device
and person elements.deviceID element.crs location_info parameter, although documented, didn't work.pos3d location_info parameter appears in some documentation but
wasn't being parsed correctly.gp namespace instead of the gbp namespace.In addition to fixing the above, several other code refactorings were performed and the unit test enhanced to include a round trip XML -> eprofile -> XML validation.
Resolves: #1667
UserNote: Geolocation: Two new optional profile parameters have been added.
* pidf_element_id which sets the value of the id attribute on the top-level
PIDF-LO device, person or tuple elements.
* device_id which sets the content of the <deviceID> element.
Both parameters can include channel variables.
UpgradeNote: Geolocation: In order to correct bugs in both code and
documentation, the following changes to the parameters for GML geolocation
locations are now in effect:
* The documented but unimplemented crs (coordinate reference system) element
has been added to the location_info parameter that indicates whether the 2d
or 3d reference system is to be used. If the crs isn't valid for the shape
specified, an error will be generated. The default depends on the shape
specified.
* The Circle, Ellipse and ArcBand shapes MUST use a 2d crs. If crs isn't
specified, it will default to 2d for these shapes.
The Sphere, Ellipsoid and Prism shapes MUST use a 3d crs. If crs isn't
specified, it will default to 3d for these shapes.
The Point and Polygon shapes may use either crs. The default crs is 2d
however so if 3d positions are used, the crs must be explicitly set to 3d.
* The geoloc show gml_shape_defs CLI command has been updated to show which
coordinate reference systems are valid for each shape.
* The pos3d element has been removed in favor of allowing the pos element
to include altitude if the crs is 3d. The number of values in the pos
element MUST be 2 if the crs is 2d and 3 if the crs is 3d. An error
will be generated for any other combination.
* The angle unit-of-measure for shapes that use angles should now be included
in the respective parameter. The default is degrees. There were some
inconsistent references to orientation_uom in some documentation but that
parameter never worked and is now removed. See examples below.
Examples...
location_info = shape="Sphere", pos="39.0 -105.0 1620", radius="20"
location_info = shape="Point", crs="3d", pos="39.0 -105.0 1620"
location_info = shape="Point", pos="39.0 -105.0"
location_info = shape=Ellipsoid, pos="39.0 -105.0 1620", semiMajorAxis="20"
semiMinorAxis="10", verticalAxis="0", orientation="25 degrees"
pidf_element_id = ${CHANNEL(name)}-${EXTEN}
device_id = mac:001122334455
Set(GEOLOC_PROFILE(pidf_element_id)=${CHANNEL(name)}/${EXTEN})
Author: George Joseph Date: 2025-12-31
The timeout_datastore was missing a destructor resulting in a leak of 16 bytes for every outgoing ARI call.
Resolves: #1681
Author: Sean Bright Date: 2025-12-30
Author: Nathaniel Wesley Filardo Date: 2025-11-27
nm might, especially in cross-compilation scenarios, be available but prefixed with the target triple. So: use AC_PATH_TOOL rather than AC_PATH_PROG to find it. (See https://www.gnu.org/software/autoconf/manual/autoconf-2.68/html_node/Generic-Programs.html .)
Found and proposed fix tested by cross-compiling Asterisk using Nixpkgs on x86_64 targeting aarch64. :)
Author: Alexei Gradinari Date: 2025-12-29
Delay acquisition of the ast_sip_endpoint reference in mwi_get_notify_data() to avoid an ao2 ref leak on early-return error paths.
Move ast_sip_subscription_get_endpoint() to just before first use so all acquired references are properly cleaned up.
Fixes: #1675
Author: Maximilian Fridrich Date: 2025-11-07
This commit integrates the redirect module into res_pjsip_messaging to enable following 3xx redirect responses for outgoing SIP MESSAGEs.
When follow_redirect_methods contains 'message' on an endpoint, Asterisk will now follow 3xx redirect responses for MESSAGEs, similar to how it behaves for INVITE responses.
Resolves: #1576
UserNote: A new pjsip endpoint option follow_redirect_methods was added. This option is a comma-delimited, case-insensitive list of SIP methods for which SIP 3XX redirect responses are followed. An alembic upgrade script has been added for adding this new option to the Asterisk database.
Author: Maximilian Fridrich Date: 2025-11-07
This commit introduces a new redirect handling module that provides infrastructure for following SIP 3xx redirect responses. The redirect functionality respects the endpoint's redirect_method setting and only follows redirects when set to 'uri_pjsip'. This infrastructure can be used by any PJSIP module that needs to handle 3xx redirect responses.
Author: Tinet-mucw Date: 2025-12-25
The datastore may be NULL, so a null pointer check needs to be added.
Resolves: #1673
Author: Sven Kube Date: 2025-10-23
Allow session termination during an in progress ari handled transfer.
Author: Naveen Albert Date: 2025-10-23
callgroup and pickupgroup may only be specified for FXO-signaled channels; however, the chan_dahdi sample config had these options uncommented in the [channels] section, thus applying these settings to all channels, resulting in warnings. Comment these out so there are no warnings with an unmodified sample config.
Resolves: #1552
Author: sarangr7 Date: 2025-12-18
When dial attempts timeout in the core dialing API, the channel's hangup cause was not being set before hanging up. Only the ast_dial_channel structure's internal cause field was updated, but the actual ast_channel hangup cause remained unset.
This resulted in incorrect or missing hangup cause information being reported through CDRs, AMI events, and other mechanisms that read the channel's hangup cause when dial timeouts occurred via applications using the dialing API (FollowMe, Page, etc.).
The fix adds proper channel locking and sets AST_CAUSE_NO_ANSWER on the channel before calling ast_hangup(), ensuring consistent hangup cause reporting across all interfaces.
Resolves: #1660
Author: Sean Bright Date: 2025-12-12
The LOCAL_OPTIMIZE_BEGIN, STREAM_BEGIN, STREAM_END, and DTMF CEL events were not all documented in the CEL configuration file or the manager documentation for the CEL event.
Author: Sean Bright Date: 2025-12-17
This is just a cleanup of some repetitive code.
Author: Justin T. Gibbs Date: 2025-12-21
Dual-stack behavior (simultaneous listening for IPV4 and IPV6 connections on a single socket) is required by Asterisk's ICE implementation. On systems with the IPV6_V6ONLY sockopt, set the option to 0 (dual-stack enabled) when binding to the IPV6 any address. This ensures correct behavior regardless of the system's default dual-stack configuration.
Author: Sean Bright Date: 2025-12-22
Resolves: #1662
Author: Joshua C. Colp Date: 2025-12-04
This change moves the PJSIP module from the threadpool API to the taskpool API. PJSIP-specific implementations for task usage have been removed and replaced with calls to the optimized taskpool implementations instead. The need for a pool of serializers has also been removed as taskpool inherently provides this. The default settings have also been changed to be more realistic for common usage.
UpgradeNote: The threadpool_* options in pjsip.conf have now been deprecated though they continue to be read and used. They have been replaced with taskpool options that give greater control over the underlying taskpool used for PJSIP. An alembic upgrade script has been added to add these options to realtime as well.
Author: phoneben Date: 2025-12-09
chan_audiosocket/chan_rtp/res_stasis_snoop: Disable device state caching for ephemeral channels
Resolves: #1638
Author: George Joseph Date: 2025-12-10
On an outbound websocket connection, when the triggering caller hangs up,
webchan_hangup() closes the outbound websocket session and sets the websocket
session handle to NULL. If the hangup happened in the tiny window between
opening the outbound websocket connection and before read_thread_handler()
was able to send the MEDIA_START message, it could segfault because the
websocket session handle was NULL. If it didn't actually segfault, there was
also the possibility that the websocket instance wouldn't get cleaned up which
could also cause the channel snapshot to not get cleaned up. That could
cause memory leaks and core show channels to list phantom WebSocket
channels.
To prevent the race, the send_event() macro now locks the websocket_pvt instance and checks the websocket session handle before attempting to send the MEDIA_START message.
Resolves: #1643 Resolves: #1645
Author: phoneben Date: 2025-12-08
Resolve analyzer warning in channel_state by checking AST_FLAG_DEAD on snapshot, which is guaranteed non-NULL.
Resolves: #1430
Author: George Joseph Date: 2025-12-08
Commit 26795be introduced a memory leak of ast_endpoint when ast_endpoint_shutdown() was called. The leak occurs only if a configuration change removes an endpoint and isn't related to call volume or the length of time asterisk has been running. An ao2_ref(-1) has been added to ast_endpoint_shutdown() to plug the leak.
Resolves: #1635
Author: Sean Bright Date: 2025-12-03
This reverts commit 517766299093d7a9798af68b39951ed8b2469836.
For rationale, see #1621 and #1606
Author: Paul Donald Date: 2025-12-03
This conf file should be suffixed .sample so that make installs it at compile time. Otherwise res_phoneprov complains at runtime as to its absence and refuses to start.
Fixes: #1626
Author: Sean Bright Date: 2025-12-05
There is no EVENT_FLAG_CEL and these events are raised with as EVENT_FLAG_CALL.
Author: Sean Bright Date: 2025-12-04
Author: Mike Bradeen Date: 2025-10-28
This change makes some small changes to improve log readability in addition to the following changes:
Modified 'core show taskprocessors' to now show Low time and High time for task execution.
New command 'core show taskprocessor name
Addionally, a new test was added to demonstrate the 'show taskprocessor name' functionality: test execute category /main/taskprocessor/ name taskprocessor_cli_show
Setting 'core set debug 3 taskprocessor.c' will now log pushed tasks. (Warning this is will cause extremely high levels of logging at even low traffic levels.)
Resolves: #1566
UserNote: New CLI command has been added -
core show taskprocessor name
Author: Michal Hajek Date: 2025-10-13
Signed-off-by: Michal Hajek michal.hajek@daktela.com
Fixes: #1531
Author: Sean Bright Date: 2025-12-01
Also re-order and rename the arguments of stream_echo_write_error to
match those of ast_write_stream for consistency.
Resolves: #1427
Author: Sean Bright Date: 2025-12-01
While this check is technically unnecessary, it also was not harmful.
The 2 other items mentioned in the linked issue are false positives and require no action.
Resolves: #1417
Author: phoneben Date: 2025-11-26
callback returned the last iterated channel when no match existed, causing invalid channel references and potential double frees. Updated to correctly return NULL when there is no match.
Resolves: #1609
Author: George Joseph Date: 2025-11-19
The Call Completion Supplementary Service feature is rarely used but many of it's functions are called by app_dial and channel.c "just in case". These functions lock and unlock the channel just to see if CCSS is enabled on it, which it isn't 99.99% of the time.
UserNote: A new "enabled" parameter has been added to ccss.conf. It defaults to "yes" to preserve backwards compatibility but CCSS is rarely used so setting "enabled = no" in the "general" section can save some unneeded channel locking operations and log message spam. Disabling ccss will also prevent the func_callcompletion and chan_dahdi modules from loading.
DeveloperNote: A new API ast_is_cc_enabled() has been added. It should be used to ensure that CCSS is enabled before making any other ast_cc_* calls.
Author: George Joseph Date: 2025-11-20
UpgradeNote: In an effort to reduce log spam, two normal progress "pickup attempted" log messages from app_directed_pickup have been changed from NOTICE to VERBOSE(3). This puts them on par with other normal dialplan progress messages.
Author: Sean Bright Date: 2025-11-20
Resolves: #1604
Author: Joe Garlick Date: 2025-11-12
Currently, if chan_websocket receives an un supported frame like comfort noise it will exit the websocket. The proposed change is to tolerate the other frames by not sending them down the websocket but instead just ignoring them.
Resolves: #1587
Author: Naveen Albert Date: 2025-11-17
Calling Reload() without any arguments is supposed to reload everything (equivalent to a 'core reload'), but actually does nothing. This is because it was calling ast_module_reload with an empty string, and the argument needs to explicitly be NULL.
Resolves: #1597
Author: Naveen Albert Date: 2025-11-17
When running "dialplan reload", the number of contexts reported is initially wrong, as it is the old context count. Running "dialplan reload" a second time returns the correct number of contexts that are loaded. This can confuse users into thinking that the reload didn't work successfully the first time.
This counter is currently only incremented when iterating the old contexts prior to the context merge; at the very end, get the current number of elements in the context hash table and report that instead. This way, the count is correct immediately whenever a reload occurs.
Resolves: #1599
Author: C. Maj Date: 2025-11-17
Convenience wrappers for showing modules at various support levels.
Resolves: #1572
UserNote: Try "make module-list-deprecated" to see what modules are on their way out the door.
Author: Naveen Albert Date: 2025-11-14
Commit a46d5f9b760f84b9f27f594b62507c1443aa661b removed the deprecated 'e' option to ResetCDR; this now causes DISA() to emit a warning if attempting to call ResetCDR() with the deprecated option (in all cases except when the no answer option is provided). Rewrite the code to do this the current way.
Resolves: #1592
Author: Tinet-mucw Date: 2025-11-13
After p->chan = NULL, ast still points to the valid channel object, using ast safely accesses the channel's DIALSTATUS variable before it's fully destroyed
Resolves: #1590
Author: George Joseph Date: 2025-11-07
Fixed an issue with tarball-coredumps when asterisk was invoked without an absolute path.
Fixed an issue with gdb itself segfaulting when trying to get symbols from
separate debuginfo files. The command line arguments needed to be altered
such that the gdbinit files is loaded before anything else but the
dump-asterisk command is run after full initialization.
In the embedded gdbinit script:
The extract_string_symbol function needed a char * cast to work properly.
The s_strip function needed to be updated to continue to work with the cpp_map_name_id channel storage backend.
A new function was added to dump the channels when cpp_map_name_id was used.
The Channel object was updated to account for the new channel storage backends
The show_locks function was refactored to work correctly.
Author: Daouda Taha Date: 2025-10-28
The 's' (skip) option delays MixMonitor recording until the specified number of seconds (can be fractional) have elapsed since MixMonitor was invoked.
No audio is written to the recording file during this time. If the call ends before this period, no audio will be saved. This is useful for avoiding early audio such as announcements, ringback tones, or other non-essential sounds.
UserNote: This change introduces a new 's(
This skips recording for the first 3 seconds before writing audio to the file. Existing MixMonitor behavior remains unchanged when the 's' option is not used.
Author: phoneben Date: 2025-11-11
switch stasis show topics temporary container from list to RB-tree minimizing lock time
Resolves: #1585
Author: Sean Bright Date: 2025-11-07
Prefer snprintf() so we can readily detect if our output was truncated.
Resolves: #1421
Author: Sean Bright Date: 2025-11-07
Resolves: #1442
Author: Sean Bright Date: 2025-11-07
Resolves: #1446
Author: Sean Bright Date: 2025-11-07
There's no actual problem here, but I can see how it might by confusing.
Resolves: #1444
Author: Kristian F. Høgh Date: 2025-10-30
Only make announcements to head caller if announce_to_first_user is true
Fixes: #1568
UserNote: When announce_to_first_user is false, no announcements are played to the head caller
Author: George Joseph Date: 2025-11-05
Also cleaned up a few unused #if blocks, and started sending a few ERROR events back to the apps.
Resolves: #1574
DeveloperNote: Apps can now send a MARK_MEDIA command with an optional
correlation_id parameter to chan_websocket which will be placed in the
media frame queue. When that frame is dequeued after all intervening media
has been played to the core, chan_websocket will send a
MEDIA_MARK_PROCESSED event to the app with the same correlation_id
(if any).
Author: George Joseph Date: 2025-10-22
With recent enhancements to chan_websocket, the original plain-text implementation of control messages and events is now too limiting. We probably should have used JSON initially but better late than never. Going forward, enhancements that require control message or event changes will only be done to the JSON variants and the plain-text variants are now deprecated but not yet removed.
Added the chan_websocket.conf config file that allows setting which control message format to use globally: "json" or "plain-text". "plain-text" is the default for now to preserve existing behavior.
Added a dialstring option f(json|plain-text) to allow the format to be
overridden on a call-by-call basis. Again, 'plain-text' is the default for
now to preserve existing behavior.
The JSON for commands sent by the app to Asterisk must be...
{ "command": "<command>" ... } where <command> is one of ANSWER, HANGUP,
START_MEDIA_BUFFERING, etc. The STOP_MEDIA_BUFFERING command takes an
additional, optional parameter to be returned in the corresponding
MEDIA_BUFFERING_COMPLETED event:
{ "command": "STOP_MEDIA_BUFFERING", "correlation_id": "<correlation id>" }.
The JSON for events sent from Asterisk to the app will be...
{ "event": "<event>", "channel_id": "<channel_id>" ... }.
The MEDIA_START event will now look like...
{
"event": "MEDIA_START",
"connection_id": "media_connection1",
"channel": "WebSocket/media_connection1/0x5140001a0040",
"channel_id": "1761245643.1",
"format": "ulaw",
"optimal_frame_size": 160,
"ptime": 20,
"channel_variables": {
"DIALEDPEERNUMBER": "media_connection1/c(ulaw)",
"MEDIA_WEBSOCKET_CONNECTION_ID": "media_connection1",
"MEDIA_WEBSOCKET_OPTIMAL_FRAME_SIZE": "160"
}
}
Note the addition of the channel variables which can't be supported with the plain-text formatting.
The documentation will be updated with the exact formats for all commands and events.
Resolves: #1546 Resolves: #1563
DeveloperNote: The chan_websocket plain-text control and event messages are now deprecated (but remain the default) in favor of JSON formatted messages. See https://docs.asterisk.org/Configuration/Channel-Drivers/WebSocket for more information.
DeveloperNote: A "transport_data" parameter has been added to the
channels/externalMedia ARI endpoint which, for websocket, allows the caller
to specify parameters to be added to the dialstring for the channel. For
instance, "transport_data": "f(json)".
Author: George Joseph Date: 2025-10-30
The following options have been added to the menuselect "Compiler Flags" section...
CODE_COVERAGE: The ability to enable code coverage via the --enable-coverage
configure flag has existed for many years but changing it requires
re-running ./configure which is painfully slow. With this commit, you can
now enable and disable it via menuselect. Setting this option adds the
-ftest-coverage and -fprofile-arcs flags on the gcc and ld command lines.
It also sets DONT_OPTIMIZE. Note: If you use the --enable-coverage configure
flag, you can't turn it off via menuselect so choose one method and stick to
it.
KEEP_FRAME_POINTERS: This option sets -fno-omit-frame-pointers on the gcc
command line which can facilitate debugging with 'gdb' and tracing with 'perf'.
Unlike CODE_COVERAGE, this option doesn't depend on optimization being
disabled. It does however conflict with COMPILE_DOUBLE.