[cfe-dev] Question about thumb2 define in clang for ARMv7

Mikhail R. Gadelha via cfe-dev cfe-dev at lists.llvm.org
Wed Dec 8 12:18:49 PST 2021


Hi everyone,

tl;dr: gcc defines __thumb2__ in ARMv7 and clang doesn't. Is that a bug? Is there another way to check if thumb2 is supported by the compiler?
~
I recently started to work with Webkit in ARMv7 and decided to give clang a try building the javascript engine (JSC) used by webkit, mostly because of those sweet sanitizers.
However, it turns out the JIT was always disabled because of a cmake script that checks if the compiler defines either thumb2 or __thumb2__:
https://github.com/WebKit/WebKit/blob/363701084a50c009bec41164cdb843df66d769d1/Source/cmake/OptionsCommon.cmake#L31
I've tested with some other versions of clang but none seem to define it: https://godbolt.org/z/WjGh3eTzv
While __thumb2__ is defined in gcc:
$ gcc -dM -E main.c | grep thumb
#define __thumb2__ 1
#define __thumb__ 1

clang doesn't define __thumb__ nor __thumb2__.
I managed to get clang with __thumb2__ defined by:
1. Changing the triplet: I eventually got a lot of compilation errors and gave up.
2. Added "-D__thumb__=1" to CMAKE_CXX_FLAGS :P and managed to fully build JSC. There were some regressions in a place I was investigating a bug but not major.

Anyway, I guess my questions are:
1. Is there a reason why __thumb2__ isn't defined in clang? Do we want it to be defined in clang?
2. Should we change it to checking if "__ARM_ARCH_ISA_THUMB" is 2 as per [0]?

Thanks in advance.
Mikhail.

[0] https://github.com/llvm/llvm-project/blob/8ee55ab6c06ec9f769f1086e3761c92286d56339/clang/lib/Basic/Targets/ARM.cpp#L709
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20211208/3155b287/attachment.html>


More information about the cfe-dev mailing list