Skip to content

FUNCTION_POINTER_ALIGNMENT not working? #6068

Description

@mhallin

Hello!

I'm trying to compile an older C++ codebase containing a bunch of assumptions regarding the values of pointers. The most problematic assumption is that function pointers are assumed to be aligned to something greater than one - the code basically does something like this (don't ask me why :) ):

size_t GLOBAL_TABLE[] = { reinterpret_cast<size_t>(&callback1), ... };

float compute(int param, float value) {
  size_t ptr = GLOBAL_TABLE[param];
  if ((ptr & 1) == 0) {
    float (*callback)(float) = reinterpret_cast<float(*)(float)>(ptr);
    return callback(value);
  }
  else {
    // Do something else...
  }
}

Since Emscripten packs all functions in the FUNCTION_TABLE_* arrays, the indices will sometimes be odd, and thus the comparison will fail.

To remedy this, I found the FUNCTION_POINTER_ALIGNMENT setting, which sounds like it would pad the tables with zeroes. However, this setting does not seem to have an effect, and searching for uses shows that it's only used for the reserved function pointer setting.

Am I misinterpreting the parameter's purpose, is this setting deprecated or scheduled for removal, or is this something that should work?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions