Changeset 276482 in webkit
- Timestamp:
- Apr 22, 2021, 8:23:14 PM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
Shared/mac/MediaFormatReader/CoreMediaWrapped.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r276480 r276482 1 2021-04-22 Jer Noble <jer.noble@apple.com> 2 3 [Mac] CMBaseClass object pointers can become unaligned on x86 4 https://bugs.webkit.org/show_bug.cgi?id=224950 5 <rdar://77020922> 6 7 Reviewed by Eric Carlson. 8 9 CMBaseClass has a 4-byte version member before its 8-byte pointers on x86. Deal with this 10 the same way we do with other pointer-bearing, static, CM-type objects: enforce a 4-byte 11 packing, and prepend the struct with another 4-byte object in order to force the pointers 12 into 8-byte alignment. 13 14 * Shared/mac/MediaFormatReader/CoreMediaWrapped.h: 15 (WebKit::CoreMediaWrapped<Wrapped>::vTable): 16 1 17 2021-04-22 Wenson Hsieh <wenson_hsieh@apple.com> 2 18 -
trunk/Source/WebKit/Shared/mac/MediaFormatReader/CoreMediaWrapped.h
r271253 r276482 143 143 const typename CoreMediaWrapped<Wrapped>::WrapperVTable& CoreMediaWrapped<Wrapped>::vTable() 144 144 { 145 static constexpr CMBaseClass baseClass = wrapperClass<sizeof(Wrapped)>(); 146 static constexpr WrapperClass derivedClass = Wrapped::wrapperClass(); 145 // CMBaseClass contains 64-bit pointers that aren't 8-byte aligned. To suppress the linker 146 // warning about this, we prepend 4 bytes of padding when building. 147 #if CPU(X86_64) 148 constexpr size_t padSize = 4; 149 #else 150 constexpr size_t padSize = 0; 151 #endif 152 153 #pragma pack(push, 4) 154 static constexpr struct { uint8_t pad[padSize]; CMBaseClass baseClass; } baseClass { { }, wrapperClass<sizeof(Wrapped)>() }; 155 static constexpr struct { uint8_t pad[padSize]; WrapperClass derivedClass; } derivedClass { { }, Wrapped::wrapperClass() }; 156 #pragma pack(pop) 157 147 158 IGNORE_WARNINGS_BEGIN("missing-field-initializers") 148 159 static constexpr WrapperVTable vTable { 149 { nullptr, &baseClass },150 &derivedClass ,160 { nullptr, &baseClass.baseClass }, 161 &derivedClass.derivedClass, 151 162 }; 152 163 IGNORE_WARNINGS_END
Note:
See TracChangeset
for help on using the changeset viewer.