Diff
Modified: trunk/Source/bmalloc/ChangeLog (292406 => 292407)
--- trunk/Source/bmalloc/ChangeLog 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/ChangeLog 2022-04-05 18:45:09 UTC (rev 292407)
@@ -1,3 +1,21 @@
+2022-04-05 Basuke Suzuki <basuke.suz...@sony.com>
+
+ [PlayStation] Enable libpas.
+ https://bugs.webkit.org/show_bug.cgi?id=238753
+
+ Reviewed by Yusuke Suzuki.
+
+ PlayStation platform is ready to enable it finally.
+
+ * PlatformPlayStation.cmake:
+ * bmalloc/BPlatform.h:
+ * libpas/src/libpas/pas_config.h:
+ * libpas/src/libpas/pas_page_malloc.c:
+ (pas_page_malloc_try_allocate_without_deallocating_padding):
+ (commit_impl):
+ * libpas/src/libpas/pas_platform.h:
+ * libpas/src/libpas/pas_thread_local_cache.c:
+
2022-04-04 Yusuke Suzuki <ysuz...@apple.com>
[libpas] Do not need to call pthread_set_qos_class_self_np repeatedly
Modified: trunk/Source/bmalloc/PlatformPlayStation.cmake (292406 => 292407)
--- trunk/Source/bmalloc/PlatformPlayStation.cmake 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/PlatformPlayStation.cmake 2022-04-05 18:45:09 UTC (rev 292407)
@@ -1,8 +1,15 @@
+WEBKIT_APPEND_GLOBAL_COMPILER_FLAGS(
+ -Wno-typedef-redefinition)
+
if (${CMAKE_GENERATOR} MATCHES "Visual Studio")
+ set(bmalloc_C_SOURCES ${bmalloc_SOURCES})
+ list(FILTER bmalloc_C_SOURCES INCLUDE REGEX "\\.c$")
+
# With the VisualStudio generator, the compiler complains about -std=c++* for C sources.
set_source_files_properties(
- ${bmalloc_SOURCES}
- PROPERTIES LANGUAGE CXX
+ ${bmalloc_C_SOURCES}
+ PROPERTIES LANGUAGE C
+ COMPILE_OPTIONS --std=gnu17
)
endif ()
Modified: trunk/Source/bmalloc/bmalloc/BPlatform.h (292406 => 292407)
--- trunk/Source/bmalloc/bmalloc/BPlatform.h 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/bmalloc/BPlatform.h 2022-04-05 18:45:09 UTC (rev 292407)
@@ -324,7 +324,7 @@
/* BENABLE(LIBPAS) is enabling libpas build. But this does not mean we use libpas for bmalloc replacement. */
#if !defined(BENABLE_LIBPAS)
-#if BCPU(ADDRESS64) && (BOS(DARWIN) || (BOS(LINUX) && !BPLATFORM(GTK) && !BPLATFORM(WPE)))
+#if BCPU(ADDRESS64) && (BOS(DARWIN) || (BOS(LINUX) && !BPLATFORM(GTK) && !BPLATFORM(WPE))) || BPLATFORM(PLAYSTATION)
#define BENABLE_LIBPAS 1
#ifndef PAS_BMALLOC
#define PAS_BMALLOC 1
Modified: trunk/Source/bmalloc/libpas/src/libpas/pas_config.h (292406 => 292407)
--- trunk/Source/bmalloc/libpas/src/libpas/pas_config.h 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/libpas/src/libpas/pas_config.h 2022-04-05 18:45:09 UTC (rev 292407)
@@ -38,7 +38,7 @@
#endif
#endif
-#if PAS_OS(DARWIN) && __PAS_ARM64 && !__PAS_ARM64E && defined(NDEBUG)
+#if ((PAS_OS(DARWIN) && __PAS_ARM64 && !__PAS_ARM64E) || PAS_PLATFORM(PLAYSTATION)) && defined(NDEBUG)
#define PAS_ENABLE_ASSERT 0
#else
#define PAS_ENABLE_ASSERT 1
@@ -54,7 +54,7 @@
#define PAS_ADDRESS_BITS 48
-#if PAS_ARM
+#if PAS_ARM || PAS_PLATFORM(PLAYSTATION)
#define PAS_MAX_GRANULES 256
#else
#define PAS_MAX_GRANULES 1024
Modified: trunk/Source/bmalloc/libpas/src/libpas/pas_page_malloc.c (292406 => 292407)
--- trunk/Source/bmalloc/libpas/src/libpas/pas_page_malloc.c 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/libpas/src/libpas/pas_page_malloc.c 2022-04-05 18:45:09 UTC (rev 292407)
@@ -120,8 +120,13 @@
return result;
}
+#if PAS_PLATFORM(PLAYSTATION)
+ mmap_result = mmap_np(NULL, mapped_size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON | PAS_NORESERVE, PAS_VM_TAG, 0, "SceNKLibpas");
+#else
mmap_result = mmap(NULL, mapped_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON | PAS_NORESERVE, PAS_VM_TAG, 0);
+#endif
if (mmap_result == MAP_FAILED) {
errno = 0; /* Clear the error so that we don't leak errno in those
cases where we handle the allocation failure
@@ -210,6 +215,10 @@
#if PAS_OS(LINUX)
PAS_SYSCALL(madvise(ptr, size, MADV_DODUMP));
+#elif PAS_PLATFORM(PLAYSTATION)
+ // We don't need to call madvise to map page.
+#elif PAS_OS(FREEBSD)
+ PAS_SYSCALL(madvise(ptr, size, MADV_NORMAL));
#endif
}
Modified: trunk/Source/bmalloc/libpas/src/libpas/pas_segmented_vector.h (292406 => 292407)
--- trunk/Source/bmalloc/libpas/src/libpas/pas_segmented_vector.h 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/libpas/src/libpas/pas_segmented_vector.h 2022-04-05 18:45:09 UTC (rev 292407)
@@ -107,7 +107,7 @@
PAS_ASSERT(!segment_index); \
\
segment = (type*)pas_immortal_heap_allocate_with_alignment_and_heap_lock_hold_mode( \
- (segment_size) * sizeof(type), alignof(type), \
+ (segment_size) * sizeof(type), PAS_ALIGNOF(type), \
#name "/segment", pas_object_allocation, \
heap_lock_hold_mode); \
pas_zero_memory(segment, (segment_size) * sizeof(type)); \
Modified: trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_heap.c (292406 => 292407)
--- trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_heap.c 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_heap.c 2022-04-05 18:45:09 UTC (rev 292407)
@@ -2093,7 +2093,7 @@
new_directories = pas_compact_expendable_memory_allocate(
sizeof(pas_segregated_heap_medium_directory_tuple) * new_capacity,
- alignof(pas_segregated_heap_medium_directory_tuple),
+ PAS_ALIGNOF(pas_segregated_heap_medium_directory_tuple),
"pas_segregated_heap_rare_data/medium_directories");
memcpy(new_directories, medium_directories,
Modified: trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.c (292406 => 292407)
--- trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.c 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.c 2022-04-05 18:45:09 UTC (rev 292407)
@@ -83,7 +83,7 @@
} else {
result = pas_immortal_heap_allocate_with_alignment(
sizeof(pas_segregated_size_directory) + sizeof(pas_bitfit_size_class),
- PAS_MAX(alignof(pas_segregated_size_directory), alignof(pas_bitfit_size_class)),
+ PAS_MAX(PAS_ALIGNOF(pas_segregated_size_directory), PAS_ALIGNOF(pas_bitfit_size_class)),
"pas_segregated_size_directory+pas_bitfit_size_class",
pas_object_allocation);
}
Modified: trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.h (292406 => 292407)
--- trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.h 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.h 2022-04-05 18:45:09 UTC (rev 292407)
@@ -268,7 +268,7 @@
uintptr_t result;
PAS_TESTING_ASSERT(pas_segregated_size_directory_is_bitfit(directory));
result = (uintptr_t)(directory + 1);
- PAS_TESTING_ASSERT(pas_is_aligned(result, alignof(pas_bitfit_size_class)));
+ PAS_TESTING_ASSERT(pas_is_aligned(result, PAS_ALIGNOF(pas_bitfit_size_class)));
return (pas_bitfit_size_class*)result;
}
Modified: trunk/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.c (292406 => 292407)
--- trunk/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.c 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.c 2022-04-05 18:45:09 UTC (rev 292407)
@@ -47,6 +47,9 @@
#if PAS_OS(DARWIN)
#include <mach/thread_act.h>
#endif
+#if PAS_PLATFORM(PLAYSTATION)
+#include <pthread_np.h>
+#endif
PAS_BEGIN_EXTERN_C;
@@ -194,6 +197,7 @@
{
uint64_t thread_id;
char thread_name[256];
+ int getname_result;
PAS_UNUSED_PARAM(thread_id);
#if PAS_OS(DARWIN)
if (!pthread_threadid_np(thread, &thread_id))
@@ -201,7 +205,12 @@
else
pas_log("[%d] thread %p does not have id\n", getpid(), thread);
#endif
- if (!pthread_getname_np(thread, thread_name, sizeof(thread_name)))
+#if PAS_PLATFORM(PLAYSTATION)
+ getname_result = pthread_get_name_np(thread, thread_name);
+#else
+ getname_result = pthread_getname_np(thread, thread_name, sizeof(thread_name));
+#endif
+ if (!getname_result)
pas_log("[%d] thread %p has name %s\n", getpid(), (void*)thread, thread_name);
else
pas_log("[%d] thread %p does not have name\n", getpid(), (void*)thread);
Modified: trunk/Source/bmalloc/libpas/src/libpas/pas_utils.h (292406 => 292407)
--- trunk/Source/bmalloc/libpas/src/libpas/pas_utils.h 2022-04-05 18:25:27 UTC (rev 292406)
+++ trunk/Source/bmalloc/libpas/src/libpas/pas_utils.h 2022-04-05 18:45:09 UTC (rev 292407)
@@ -66,6 +66,12 @@
#define PAS_ALIGNED(amount) __attribute__((aligned(amount)))
+#if PAS_PLATFORM(PLAYSTATION) && !defined(alignof)
+#define PAS_ALIGNOF(type) _Alignof(type)
+#else
+#define PAS_ALIGNOF(type) alignof(type)
+#endif
+
#define PAS_FORMAT_PRINTF(fmt, args) __attribute__((format(__printf__, fmt, args)))
#define PAS_UNUSED __attribute__((unused))