Changeset 46247 in webkit for trunk/JavaScriptCore/jit/ExecutableAllocator.h
- Timestamp:
- Jul 22, 2009, 3:17:10 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/ExecutableAllocator.h
r46059 r46247 157 157 } 158 158 159 #if ENABLE(ASSEMBLER_WX_EXCLUSIVE) || !(PLATFORM(X86) || PLATFORM(X86_64))159 #if ENABLE(ASSEMBLER_WX_EXCLUSIVE) 160 160 static void makeWritable(void* start, size_t size) 161 161 { … … 166 166 { 167 167 reprotectRegion(start, size, Executable); 168 cacheFlush(start, size); 169 } 170 171 // If ASSEMBLER_WX_EXCLUSIVE protection is turned on, or on non-x86 platforms, 172 // we need to track start & size so we can makeExecutable/cacheFlush at the end. 173 class MakeWritable { 174 public: 175 MakeWritable(void* start, size_t size) 176 : m_start(start) 177 , m_size(size) 178 { 179 makeWritable(start, size); 180 } 181 182 ~MakeWritable() 183 { 184 makeExecutable(m_start, m_size); 185 } 186 187 private: 188 void* m_start; 189 size_t m_size; 190 }; 168 } 191 169 #else 192 170 static void makeWritable(void*, size_t) {} 193 171 static void makeExecutable(void*, size_t) {} 194 195 // On x86, without ASSEMBLER_WX_EXCLUSIVE, there is nothing to do here. 196 class MakeWritable { public: MakeWritable(void*, size_t) {} }; 197 #endif 198 199 private: 200 201 #if ENABLE(ASSEMBLER_WX_EXCLUSIVE) || !(PLATFORM(X86) || PLATFORM(X86_64)) 202 #if ENABLE(ASSEMBLER_WX_EXCLUSIVE) 203 static void reprotectRegion(void*, size_t, ProtectionSeting); 204 #else 205 static void reprotectRegion(void*, size_t, ProtectionSeting) {} 206 #endif 207 208 static void cacheFlush(void* code, size_t size) 209 { 172 #endif 173 174 210 175 #if PLATFORM(X86) || PLATFORM(X86_64) 211 UNUSED_PARAM(code); 212 UNUSED_PARAM(size); 176 static void cacheFlush(void*, size_t) 177 { 178 } 213 179 #elif PLATFORM_ARM_ARCH(7) && PLATFORM(IPHONE) 180 static void cacheFlush(void* code, size_t size) 181 { 214 182 sys_dcache_flush(code, size); 215 183 sys_icache_invalidate(code, size); 184 } 216 185 #elif PLATFORM(ARM) 186 static void cacheFlush(void* code, size_t size) 187 { 217 188 #if COMPILER(GCC) && (GCC_VERSION >= 30406) 218 189 __clear_cache(reinterpret_cast<char*>(code), reinterpret_cast<char*>(code) + size); … … 229 200 : "r0", "r1", "r7"); 230 201 #endif // COMPILER(GCC) && (GCC_VERSION >= 30406) 231 #else 232 #error "ExecutableAllocator::cacheFlush not implemented on this platform." 233 #endif 234 } 202 } 203 #endif 204 205 private: 206 207 #if ENABLE(ASSEMBLER_WX_EXCLUSIVE) 208 static void reprotectRegion(void*, size_t, ProtectionSeting); 235 209 #endif 236 210
Note:
See TracChangeset
for help on using the changeset viewer.