- Revision
- 294788
- Author
- [email protected]
- Date
- 2022-05-24 21:43:31 -0700 (Tue, 24 May 2022)
Log Message
Use dladdr to get labels instead of stashing them in the JITOperationAnnotation.
https://bugs.webkit.org/show_bug.cgi?id=240895
Reviewed by Saam Barati.
We no longer need to stash these label strings in the JITOperationAnnotations.
This change also fixes an ASAN crasher. As such, we can re-enable
ENABLE(JIT_OPERATION_DISASSEMBLY) even when ASAN_ENABLED.
* Source/_javascript_Core/assembler/JITOperationList.cpp:
(JSC::JITOperationList::addDisassemblyLabels):
* Source/_javascript_Core/assembler/JITOperationValidation.h:
* Source/WTF/wtf/PlatformCallingConventions.h:
* Source/WTF/wtf/PlatformEnable.h:
Canonical link: https://commits.webkit.org/250947@main
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/assembler/JITOperationList.cpp (294787 => 294788)
--- trunk/Source/_javascript_Core/assembler/JITOperationList.cpp 2022-05-25 04:03:14 UTC (rev 294787)
+++ trunk/Source/_javascript_Core/assembler/JITOperationList.cpp 2022-05-25 04:43:31 UTC (rev 294788)
@@ -33,6 +33,11 @@
#include "Opcode.h"
#include "Options.h"
+#if HAVE(DLADDR)
+#include <cxxabi.h>
+#include <dlfcn.h>
+#endif
+
namespace JSC {
#if ENABLE(JIT_OPERATION_VALIDATION) || ENABLE(JIT_OPERATION_DISASSEMBLY)
@@ -114,28 +119,26 @@
LLINT_DECLARE_ROUTINE_VALIDATE(normal_osr_exit_trampoline);
LLINT_DECLARE_ROUTINE_VALIDATE(fuzzer_return_early_from_loop_hint);
-#if ENABLE(JIT_OPERATION_VALIDATION) && ENABLE(JIT_OPERATION_DISASSEMBLY)
-#define LLINT_OP_EXTRAS(validateLabel, nameStr) bitwise_cast<void*>(validateLabel), nameStr
-#elif ENABLE(JIT_OPERATION_VALIDATION)
-#define LLINT_OP_EXTRAS(validateLabel, nameStr) bitwise_cast<void*>(validateLabel)
+#if ENABLE(JIT_OPERATION_VALIDATION)
+#define LLINT_OP_EXTRAS(validateLabel) bitwise_cast<void*>(validateLabel)
#else // ENABLE(JIT_OPERATION_DISASSEMBLY)
-#define LLINT_OP_EXTRAS(validateLabel, nameStr) nameStr
+#define LLINT_OP_EXTRAS(validateLabel)
#endif
#define LLINT_ROUTINE(functionName) { \
bitwise_cast<void*>(LLInt::getCodeFunctionPtr<CFunctionPtrTag>(functionName)), \
- LLINT_OP_EXTRAS(LLINT_ROUTINE_VALIDATE(functionName), #functionName) \
+ LLINT_OP_EXTRAS(LLINT_ROUTINE_VALIDATE(functionName)) \
},
#define LLINT_OP(name) { \
bitwise_cast<void*>(LLInt::getCodeFunctionPtr<CFunctionPtrTag>(name)), \
- LLINT_OP_EXTRAS(LLINT_RETURN_VALIDATE(name), #name) \
+ LLINT_OP_EXTRAS(LLINT_RETURN_VALIDATE(name)) \
}, { \
bitwise_cast<void*>(LLInt::getWide16CodeFunctionPtr<CFunctionPtrTag>(name)), \
- LLINT_OP_EXTRAS(LLINT_RETURN_WIDE16_VALIDATE(name), #name " [wide16]") \
+ LLINT_OP_EXTRAS(LLINT_RETURN_WIDE16_VALIDATE(name)) \
}, { \
bitwise_cast<void*>(LLInt::getWide32CodeFunctionPtr<CFunctionPtrTag>(name)), \
- LLINT_OP_EXTRAS(LLINT_RETURN_WIDE32_VALIDATE(name), #name " [wide32]") \
+ LLINT_OP_EXTRAS(LLINT_RETURN_WIDE32_VALIDATE(name)) \
},
#define LLINT_RETURN_LOCATION(name, ...) \
@@ -231,7 +234,9 @@
#else
auto* operation = current->operation;
#endif
- registerLabel(removeCodePtrTag(operation), current->name);
+ Dl_info info;
+ if (dladdr(operation, &info) && info.dli_sname)
+ registerLabel(removeCodePtrTag(operation), info.dli_sname);
}
}
Modified: trunk/Source/_javascript_Core/assembler/JITOperationValidation.h (294787 => 294788)
--- trunk/Source/_javascript_Core/assembler/JITOperationValidation.h 2022-05-25 04:03:14 UTC (rev 294787)
+++ trunk/Source/_javascript_Core/assembler/JITOperationValidation.h 2022-05-25 04:43:31 UTC (rev 294788)
@@ -52,9 +52,6 @@
#if ENABLE(JIT_OPERATION_VALIDATION)
void* operationWithValidation;
#endif
-#if ENABLE(JIT_OPERATION_DISASSEMBLY)
- const char* name;
-#endif
};
#if ENABLE(JIT_OPERATION_VALIDATION)
Modified: trunk/Source/WTF/wtf/PlatformCallingConventions.h (294787 => 294788)
--- trunk/Source/WTF/wtf/PlatformCallingConventions.h 2022-05-25 04:03:14 UTC (rev 294787)
+++ trunk/Source/WTF/wtf/PlatformCallingConventions.h 2022-05-25 04:43:31 UTC (rev 294788)
@@ -86,16 +86,14 @@
#if ENABLE(JIT_OPERATION_VALIDATION) || ENABLE(JIT_OPERATION_DISASSEMBLY)
-#if ENABLE(JIT_OPERATION_VALIDATION) && ENABLE(JIT_OPERATION_DISASSEMBLY)
-#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction, name) (void*)validateFunction, name
-#elif ENABLE(JIT_OPERATION_VALIDATION)
-#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction, name) (void*)validateFunction
-#else // ENABLE(JIT_OPERATION_DISASSEMBLY)
-#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction, name) name
+#if ENABLE(JIT_OPERATION_VALIDATION)
+#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction) (void*)validateFunction
+#else
+#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction)
#endif
#define JSC_ANNOTATE_JIT_OPERATION_INTERNAL(function) \
- constexpr JSC::JITOperationAnnotation _JITTargetID_##function __attribute__((used, section("__DATA_CONST,__jsc_ops"))) = { (void*)function, JSC_ANNOTATE_JIT_OPERATION_EXTRAS(function##Validate, #function) };
+ constexpr JSC::JITOperationAnnotation _JITTargetID_##function __attribute__((used, section("__DATA_CONST,__jsc_ops"))) = { (void*)function, JSC_ANNOTATE_JIT_OPERATION_EXTRAS(function##Validate) };
#define JSC_ANNOTATE_JIT_OPERATION(function) \
JSC_DECLARE_AND_DEFINE_JIT_OPERATION_VALIDATION(function); \
Modified: trunk/Source/WTF/wtf/PlatformEnable.h (294787 => 294788)
--- trunk/Source/WTF/wtf/PlatformEnable.h 2022-05-25 04:03:14 UTC (rev 294787)
+++ trunk/Source/WTF/wtf/PlatformEnable.h 2022-05-25 04:43:31 UTC (rev 294788)
@@ -849,7 +849,7 @@
#define ENABLE_JIT_OPERATION_VALIDATION 1
#endif
-#if USE(APPLE_INTERNAL_SDK) && ENABLE(DISASSEMBLER) && CPU(ARM64E) && !ASAN_ENABLED
+#if USE(APPLE_INTERNAL_SDK) && ENABLE(DISASSEMBLER) && CPU(ARM64E) && HAVE(DLADDR)
#define ENABLE_JIT_OPERATION_DISASSEMBLY 1
#endif