diff --git a/site/source/docs/porting/Debugging.rst b/site/source/docs/porting/Debugging.rst index 2d47526b61b21..f80e6512cf81a 100644 --- a/site/source/docs/porting/Debugging.rst +++ b/site/source/docs/porting/Debugging.rst @@ -329,15 +329,15 @@ unaligned. To do so you can: Function Pointer Issues ----------------------- -If you get an ``abort()`` from a function pointer call to ``nullFunc`` or ``b0`` -or ``b1`` (possibly with an error message saying "incorrect function pointer"), -the problem is that the function pointer was not found in the expected function -pointer table when called. - -.. note:: ``nullFunc`` is the function used to populate empty index entries in - the function pointer tables (``b0`` and ``b1`` are shorter names used for - ``nullFunc`` in more optimized builds). A function pointer to an invalid - index will call this function, which simply calls ``abort()``. +If you get + + :: + + RuntimeError: null function or function signature mismatch + +(or, in certain build types, an ``abort()`` or an error of "incorrect function +pointer"), the problem is that a proper function pointer was not found in the +function pointer table when called. There are several possible causes: diff --git a/site/source/docs/porting/guidelines/function_pointer_issues.rst b/site/source/docs/porting/guidelines/function_pointer_issues.rst index b3e0182f38d4c..577eb8779e00b 100644 --- a/site/source/docs/porting/guidelines/function_pointer_issues.rst +++ b/site/source/docs/porting/guidelines/function_pointer_issues.rst @@ -10,12 +10,20 @@ There are two main issues with function pointers: #. Function pointer casts can cause function pointer calls to fail. - Function pointers must be called with the correct type: it is undefined behavior in C and C++ to cast a function pointer to another type and call it that way. This does work in most native platforms, however, despite it being UB, but in Wasm it can fail. In that case, you may see an ``abort(10)`` or some other number, and if assertions are on you may see a message with details that start with + Function pointers must be called with the correct type: it is undefined behavior in C and C++ to cast a function pointer to another type and call it that way. This does work in most native platforms, however, despite it being UB, but in Wasm it can fail. In that case, you may see an error like this: + + :: + + RuntimeError: null function or function signature mismatch + + or :: Invalid function pointer called + or ``abort(10)`` or some other number (depending on the type of build). + Rarely, you may see a compiler warning like this: :: @@ -38,6 +46,12 @@ Debugging function pointer issues The ``SAFE_HEAP`` and ``ASSERTION`` options can catch some of these errors at runtime and provide useful information. You can also see if ``EMULATE_FUNCTION_POINTER_CASTS`` fixes things for you, but see later down about the overhead. +You can get compiler errors for some of these problems with + + :: + + -Werror=cast-function-type + Working around function pointer issues ======================================