Skip to content
Permalink
Browse files
Fix testbmalloc build
https://bugs.webkit.org/show_bug.cgi?id=195660

Patch by Sam Weinig <sam@webkit.org> on 2019-03-13
Reviewed by Geoffrey Garen.

* bmalloc.xcodeproj/project.pbxproj:
Link Foundation in when building testbmalloc. Since bmalloc requires Foundation, and is a static
library, all clients of bmalloc are required to link it themselves.

* bmalloc/IsoPageInlines.h:
* bmalloc/StdLibExtras.h: Added.
(bmalloc::bitwise_cast):
Add bitwise_cast implementation, and use it in IsoPageInlines.h. It is a layering violation
to expect the one from WTF to be available, as seems to have been the case.

Canonical link: https://commits.webkit.org/209983@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242892 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
Sam Weinig authored and webkit-commit-queue committed Mar 13, 2019
1 parent 033d8a8 commit 4c85f07ec49f8f460848f8fdb20c2bd0bdd8d92a
Showing 4 changed files with 75 additions and 0 deletions.
@@ -1,3 +1,20 @@
2019-03-13 Sam Weinig <sam@webkit.org>

Fix testbmalloc build
https://bugs.webkit.org/show_bug.cgi?id=195660

Reviewed by Geoffrey Garen.

* bmalloc.xcodeproj/project.pbxproj:
Link Foundation in when building testbmalloc. Since bmalloc requires Foundation, and is a static
library, all clients of bmalloc are required to link it themselves.

* bmalloc/IsoPageInlines.h:
* bmalloc/StdLibExtras.h: Added.
(bmalloc::bitwise_cast):
Add bitwise_cast implementation, and use it in IsoPageInlines.h. It is a layering violation
to expect the one from WTF to be available, as seems to have been the case.

2019-03-12 Robin Morisset <rmorisset@apple.com>

A lot more classes have padding that can be reduced by reordering their fields
@@ -137,6 +137,8 @@
6599C5CD1EC3F15900A2F7BB /* AvailableMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6599C5CB1EC3F15900A2F7BB /* AvailableMemory.h */; settings = {ATTRIBUTES = (Private, ); }; };
7939885B2076EEB60074A2E7 /* BulkDecommit.h in Headers */ = {isa = PBXBuildFile; fileRef = 7939885A2076EEB50074A2E7 /* BulkDecommit.h */; settings = {ATTRIBUTES = (Private, ); }; };
795AB3C7206E0D340074FE76 /* PhysicalPageMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 795AB3C6206E0D250074FE76 /* PhysicalPageMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C571EFF22388B080077A3C7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 142FC6212096409E00A99362 /* Foundation.framework */; };
7C571F0122388B840077A3C7 /* StdLibExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C571F0022388B840077A3C7 /* StdLibExtras.h */; settings = {ATTRIBUTES = (Private, ); }; };
AD0934331FCF406D00E85EB5 /* BCompiler.h in Headers */ = {isa = PBXBuildFile; fileRef = AD0934321FCF405000E85EB5 /* BCompiler.h */; settings = {ATTRIBUTES = (Private, ); }; };
AD14AD29202529C400890E3B /* ProcessCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = AD14AD27202529A600890E3B /* ProcessCheck.h */; };
AD14AD2A202529C700890E3B /* ProcessCheck.mm in Sources */ = {isa = PBXBuildFile; fileRef = AD14AD28202529B000890E3B /* ProcessCheck.mm */; };
@@ -301,6 +303,7 @@
6599C5CB1EC3F15900A2F7BB /* AvailableMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AvailableMemory.h; path = bmalloc/AvailableMemory.h; sourceTree = "<group>"; };
7939885A2076EEB50074A2E7 /* BulkDecommit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BulkDecommit.h; path = bmalloc/BulkDecommit.h; sourceTree = "<group>"; };
795AB3C6206E0D250074FE76 /* PhysicalPageMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PhysicalPageMap.h; path = bmalloc/PhysicalPageMap.h; sourceTree = "<group>"; };
7C571F0022388B840077A3C7 /* StdLibExtras.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = StdLibExtras.h; path = bmalloc/StdLibExtras.h; sourceTree = "<group>"; };
A1B89B86221DFFEE00EB4CEA /* SDKVariant.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SDKVariant.xcconfig; sourceTree = "<group>"; };
AD0934321FCF405000E85EB5 /* BCompiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BCompiler.h; path = bmalloc/BCompiler.h; sourceTree = "<group>"; };
AD14AD27202529A600890E3B /* ProcessCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProcessCheck.h; path = bmalloc/ProcessCheck.h; sourceTree = "<group>"; };
@@ -313,6 +316,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7C571EFF22388B080077A3C7 /* Foundation.framework in Frameworks */,
0F7EB7FA1F95414C00F1ABCB /* libbmalloc.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -548,6 +552,7 @@
144469FD17A61F1F00F9EA1D /* PerThread.h */,
145F6878179E3A4400D65598 /* Range.h */,
148EFAE61D6B953B008E721E /* ScopeExit.h */,
7C571F0022388B840077A3C7 /* StdLibExtras.h */,
1417F64F18B7280C0076FA3F /* Syscall.h */,
1479E21217A1A255006D4E9D /* Vector.h */,
1479E21417A1A63E006D4E9D /* VMAllocate.h */,
@@ -660,6 +665,7 @@
14DD789018F48CEB00950702 /* Sizes.h in Headers */,
14DD78BC18F48D6B00950702 /* SmallLine.h in Headers */,
14DD78BD18F48D6B00950702 /* SmallPage.h in Headers */,
7C571F0122388B840077A3C7 /* StdLibExtras.h in Headers */,
14DD78CE18F48D7500950702 /* Syscall.h in Headers */,
14DD78CF18F48D7500950702 /* Vector.h in Headers */,
14DD78D018F48D7500950702 /* VMAllocate.h in Headers */,
@@ -28,6 +28,7 @@
#include "CryptoRandom.h"
#include "IsoDirectory.h"
#include "IsoPage.h"
#include "StdLibExtras.h"
#include "VMAllocate.h"

namespace bmalloc {
@@ -0,0 +1,51 @@
/*
* Copyright (C) 2019 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef StdLibExtras_h
#define StdLibExtras_h

#include "BCompiler.h"
#include <memory>
#include <type_traits>

namespace bmalloc {

template<typename ToType, typename FromType>
inline ToType bitwise_cast(FromType from)
{
static_assert(sizeof(FromType) == sizeof(ToType), "bitwise_cast size of FromType and ToType must be equal!");
#if BCOMPILER_HAS_CLANG_FEATURE(is_trivially_copyable)
// Not all recent STL implementations support the std::is_trivially_copyable type trait. Work around this by only checking on toolchains which have the equivalent compiler intrinsic.
static_assert(__is_trivially_copyable(ToType), "bitwise_cast of non-trivially-copyable type!");
static_assert(__is_trivially_copyable(FromType), "bitwise_cast of non-trivially-copyable type!");
#endif
typename std::remove_const<ToType>::type to { };
std::memcpy(static_cast<void*>(&to), static_cast<void*>(&from), sizeof(to));
return to;
}

} // namespace bmalloc

#endif // StdLibExtras_h

0 comments on commit 4c85f07

Please sign in to comment.