facebook / facebook/folly

Potential FOLLY_HAVE_IFUNC false positive causing 'unsupported relocation type' error

Open
#1,754 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
30.5k
Forks
5.9k
PR merge metrics
No merged PRs in 30d

Description

FOLLY_HAVE_IFUNC is checked with the following code snippet:
```
check_cxx_source_compiles("
#pragma GCC diagnostic error \"-Wattributes\"
extern \"C\" void (*test_ifunc(void))() { return 0; }
void func() __attribute__((ifunc(\"test_ifunc\")));
int main() { return 0; }"
FOLLY_HAVE_IFUNC
)
```
This approach can lead to false positives because ```__attribute__((ifunc ...))``` also requires linker support.
An example of a false positive environment is Alpine 3.15 / clang 12 where the compiler supports the attribute but the linker does not support the required relocation type.

Correct check would be:
```
check_cxx_source_runs("
#pragma GCC diagnostic error \"-Wattributes\"
extern \"C\" int resolved_ifunc(void) { return 0; }
extern \"C\" int (*test_ifunc(void))() { return resolved_ifunc; }
int func() __attribute__((ifunc(\"test_ifunc\")));
int main() { return func(); }"
FOLLY_HAVE_IFUNC
)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.