Skip to content

Commit 1768e5e

Browse files
author
Mark Lam
committed
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/JavaScriptCore/assembler/JITOperationList.cpp: (JSC::JITOperationList::addDisassemblyLabels): * Source/JavaScriptCore/assembler/JITOperationValidation.h: * Source/WTF/wtf/PlatformCallingConventions.h: * Source/WTF/wtf/PlatformEnable.h: Canonical link: https://commits.webkit.org/250947@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@294788 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent cd44c39 commit 1768e5e

4 files changed

Lines changed: 21 additions & 21 deletions

File tree

Source/JavaScriptCore/assembler/JITOperationList.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
3333
#include "Opcode.h"
3434
#include "Options.h"
3535

36+
#if HAVE(DLADDR)
37+
#include <cxxabi.h>
38+
#include <dlfcn.h>
39+
#endif
40+
3641
namespace JSC {
3742

3843
#if ENABLE(JIT_OPERATION_VALIDATION) || ENABLE(JIT_OPERATION_DISASSEMBLY)
@@ -114,28 +119,26 @@ LLINT_DECLARE_ROUTINE_VALIDATE(checkpoint_osr_exit_from_inlined_call_trampoline)
114119
LLINT_DECLARE_ROUTINE_VALIDATE(normal_osr_exit_trampoline);
115120
LLINT_DECLARE_ROUTINE_VALIDATE(fuzzer_return_early_from_loop_hint);
116121

117-
#if ENABLE(JIT_OPERATION_VALIDATION) && ENABLE(JIT_OPERATION_DISASSEMBLY)
118-
#define LLINT_OP_EXTRAS(validateLabel, nameStr) bitwise_cast<void*>(validateLabel), nameStr
119-
#elif ENABLE(JIT_OPERATION_VALIDATION)
120-
#define LLINT_OP_EXTRAS(validateLabel, nameStr) bitwise_cast<void*>(validateLabel)
122+
#if ENABLE(JIT_OPERATION_VALIDATION)
123+
#define LLINT_OP_EXTRAS(validateLabel) bitwise_cast<void*>(validateLabel)
121124
#else // ENABLE(JIT_OPERATION_DISASSEMBLY)
122-
#define LLINT_OP_EXTRAS(validateLabel, nameStr) nameStr
125+
#define LLINT_OP_EXTRAS(validateLabel)
123126
#endif
124127

125128
#define LLINT_ROUTINE(functionName) { \
126129
bitwise_cast<void*>(LLInt::getCodeFunctionPtr<CFunctionPtrTag>(functionName)), \
127-
LLINT_OP_EXTRAS(LLINT_ROUTINE_VALIDATE(functionName), #functionName) \
130+
LLINT_OP_EXTRAS(LLINT_ROUTINE_VALIDATE(functionName)) \
128131
},
129132

130133
#define LLINT_OP(name) { \
131134
bitwise_cast<void*>(LLInt::getCodeFunctionPtr<CFunctionPtrTag>(name)), \
132-
LLINT_OP_EXTRAS(LLINT_RETURN_VALIDATE(name), #name) \
135+
LLINT_OP_EXTRAS(LLINT_RETURN_VALIDATE(name)) \
133136
}, { \
134137
bitwise_cast<void*>(LLInt::getWide16CodeFunctionPtr<CFunctionPtrTag>(name)), \
135-
LLINT_OP_EXTRAS(LLINT_RETURN_WIDE16_VALIDATE(name), #name " [wide16]") \
138+
LLINT_OP_EXTRAS(LLINT_RETURN_WIDE16_VALIDATE(name)) \
136139
}, { \
137140
bitwise_cast<void*>(LLInt::getWide32CodeFunctionPtr<CFunctionPtrTag>(name)), \
138-
LLINT_OP_EXTRAS(LLINT_RETURN_WIDE32_VALIDATE(name), #name " [wide32]") \
141+
LLINT_OP_EXTRAS(LLINT_RETURN_WIDE32_VALIDATE(name)) \
139142
},
140143

141144
#define LLINT_RETURN_LOCATION(name, ...) \
@@ -231,7 +234,9 @@ SUPPRESS_ASAN void JITOperationList::addDisassemblyLabels(const JITOperationAnno
231234
#else
232235
auto* operation = current->operation;
233236
#endif
234-
registerLabel(removeCodePtrTag(operation), current->name);
237+
Dl_info info;
238+
if (dladdr(operation, &info) && info.dli_sname)
239+
registerLabel(removeCodePtrTag(operation), info.dli_sname);
235240
}
236241
}
237242

Source/JavaScriptCore/assembler/JITOperationValidation.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ struct JITOperationAnnotation {
5252
#if ENABLE(JIT_OPERATION_VALIDATION)
5353
void* operationWithValidation;
5454
#endif
55-
#if ENABLE(JIT_OPERATION_DISASSEMBLY)
56-
const char* name;
57-
#endif
5855
};
5956

6057
#if ENABLE(JIT_OPERATION_VALIDATION)

Source/WTF/wtf/PlatformCallingConventions.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,14 @@
8686

8787
#if ENABLE(JIT_OPERATION_VALIDATION) || ENABLE(JIT_OPERATION_DISASSEMBLY)
8888

89-
#if ENABLE(JIT_OPERATION_VALIDATION) && ENABLE(JIT_OPERATION_DISASSEMBLY)
90-
#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction, name) (void*)validateFunction, name
91-
#elif ENABLE(JIT_OPERATION_VALIDATION)
92-
#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction, name) (void*)validateFunction
93-
#else // ENABLE(JIT_OPERATION_DISASSEMBLY)
94-
#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction, name) name
89+
#if ENABLE(JIT_OPERATION_VALIDATION)
90+
#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction) (void*)validateFunction
91+
#else
92+
#define JSC_ANNOTATE_JIT_OPERATION_EXTRAS(validateFunction)
9593
#endif
9694

9795
#define JSC_ANNOTATE_JIT_OPERATION_INTERNAL(function) \
98-
constexpr JSC::JITOperationAnnotation _JITTargetID_##function __attribute__((used, section("__DATA_CONST,__jsc_ops"))) = { (void*)function, JSC_ANNOTATE_JIT_OPERATION_EXTRAS(function##Validate, #function) };
96+
constexpr JSC::JITOperationAnnotation _JITTargetID_##function __attribute__((used, section("__DATA_CONST,__jsc_ops"))) = { (void*)function, JSC_ANNOTATE_JIT_OPERATION_EXTRAS(function##Validate) };
9997

10098
#define JSC_ANNOTATE_JIT_OPERATION(function) \
10199
JSC_DECLARE_AND_DEFINE_JIT_OPERATION_VALIDATION(function); \

Source/WTF/wtf/PlatformEnable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -849,7 +849,7 @@
849849
#define ENABLE_JIT_OPERATION_VALIDATION 1
850850
#endif
851851

852-
#if USE(APPLE_INTERNAL_SDK) && ENABLE(DISASSEMBLER) && CPU(ARM64E) && !ASAN_ENABLED
852+
#if USE(APPLE_INTERNAL_SDK) && ENABLE(DISASSEMBLER) && CPU(ARM64E) && HAVE(DLADDR)
853853
#define ENABLE_JIT_OPERATION_DISASSEMBLY 1
854854
#endif
855855

0 commit comments

Comments
 (0)