|
From: Paul F. <pa...@so...> - 2025-12-17 18:45:06
|
https://sourceware.org/cgit/valgrind/commit/?id=d3cd66160c7e62f611c23a5916b6025a835e857f commit d3cd66160c7e62f611c23a5916b6025a835e857f Author: Paul Floyd <pj...@wa...> Date: Sun Dec 14 21:04:08 2025 +0100 Darwin: add macOS 10.15 support == 721 tests, 46 stderr failures, 6 stdout failures, 0 stderrB failures, 0 stdoutB failures, 4 post failures == A couple more failures in none (empty-exe and scripts/shell). Otherwise quite like macOS 10.14. Much of the code merged from Louis Brunner's git repo. Many thanks once again Louis. Diff: --- NEWS | 2 +- configure.ac | 6 +- coregrind/Makefile.am | 1 + coregrind/m_debuginfo/debuginfo.c | 20 ++- coregrind/m_debuginfo/readmacho.c | 6 +- coregrind/m_initimg/initimg-darwin.c | 9 +- coregrind/m_mach/mig_strncpy.c | 121 +++++++++++++++++ coregrind/m_syswrap/priv_syswrap-darwin.h | 11 ++ coregrind/m_syswrap/syswrap-darwin.c | 144 ++++++++++++++++++++- darwin-drd.supp | 21 +++ darwin-helgrind.supp | 26 ++++ darwin.supp | 43 ++---- include/vki/vki-darwin.h | 3 + include/vki/vki-scnums-darwin.h | 11 ++ massif/tests/alloc-fns-A.vgtest | 2 + massif/tests/alloc-fns-B.vgtest | 2 + massif/tests/basic.vgtest | 2 + massif/tests/basic2.vgtest | 2 + massif/tests/big-alloc.vgtest | 2 + massif/tests/bug469146.vgtest | 2 + massif/tests/culling1.stderr.exp | 5 + massif/tests/culling1.vgtest | 2 + massif/tests/culling2.stderr.exp | 5 + massif/tests/culling2.vgtest | 2 + massif/tests/custom_alloc.vgtest | 2 + massif/tests/deep-A.vgtest | 2 + massif/tests/deep-B.stderr.exp | 5 + massif/tests/deep-B.vgtest | 2 + massif/tests/deep-C.stderr.exp | 5 + massif/tests/deep-C.vgtest | 2 + massif/tests/deep-D.vgtest | 2 + massif/tests/filter_ignore_fn | 6 +- massif/tests/ignored.vgtest | 2 + massif/tests/ignoring.vgtest | 2 + massif/tests/inlinfomalloc.vgtest | 2 + massif/tests/insig.vgtest | 2 + massif/tests/long-names.vgtest | 2 + massif/tests/long-time.vgtest | 2 + massif/tests/new-cpp.vgtest | 2 + massif/tests/null.vgtest | 2 + massif/tests/one.vgtest | 2 + massif/tests/overloaded-new.vgtest | 2 + massif/tests/peak.vgtest | 2 + massif/tests/peak2.stderr.exp | 5 + massif/tests/peak2.vgtest | 2 + massif/tests/realloc.stderr.exp | 5 + massif/tests/realloc.vgtest | 2 + massif/tests/thresholds_0_0.vgtest | 2 + massif/tests/thresholds_0_10.vgtest | 2 + massif/tests/thresholds_10_0.vgtest | 2 + massif/tests/thresholds_10_10.vgtest | 2 + massif/tests/thresholds_5_0.vgtest | 2 + massif/tests/thresholds_5_10.vgtest | 2 + massif/tests/zero1.vgtest | 2 + massif/tests/zero2.vgtest | 2 + memcheck/tests/Makefile.am | 2 + .../duplicate_align_size_errors.stderr.exp-darwin2 | 27 ++++ memcheck/tests/memalign_args.stderr.exp-darwin2 | 12 ++ 58 files changed, 529 insertions(+), 40 deletions(-) diff --git a/NEWS b/NEWS index 53768ece3f..06bf59ebbf 100644 --- a/NEWS +++ b/NEWS @@ -6,7 +6,7 @@ PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux, MIPS64/Linux, RISCV64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android, X86/Solaris, AMD64/Solaris, X86/macOS, AMD64/macOS. X86/FreeBSD, AMD64/FreeBSD and ARM64/FreeBSD. There is preliminary support -for nanoMIPS/Linux. macOS is supported up to version 10.14 Mojave. +for nanoMIPS/Linux. macOS is supported up to version 10.15 Catalina. * ==================== CORE CHANGES =================== diff --git a/configure.ac b/configure.ac index 5deb338fa3..81e7178b53 100644 --- a/configure.ac +++ b/configure.ac @@ -546,9 +546,13 @@ case "${host_os}" in AC_MSG_RESULT([Darwin 18.x (${kernel}) / macOS 10.14 Mojave]) DARWIN_VERS=$DARWIN_10_14 ;; + 19.*) + AC_MSG_RESULT([Darwin 19.x (${kernel}) / macOS 10.15 Catalina]) + DARWIN_VERS=$DARWIN_10_15 + ;; *) AC_MSG_RESULT([unsupported (${darwin_platform} ${kernel})]) - AC_MSG_ERROR([Valgrind works on Darwin 10.x-25.x (Mac OS X 10.8-10.11, macOS 10.12-10.13)]) + AC_MSG_ERROR([Valgrind works on Darwin 12.x-19.x (Mac OS X 10.8-10.11, macOS 10.12-10.15)]) ;; esac diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am index 65369ebcd2..90d921db28 100644 --- a/coregrind/Makefile.am +++ b/coregrind/Makefile.am @@ -432,6 +432,7 @@ COREGRIND_SOURCES_COMMON = \ m_mach/mach_msg.c \ m_mach/mach_traps-x86-darwin.S \ m_mach/mach_traps-amd64-darwin.S \ + m_mach/mig_strncpy.c \ m_replacemalloc/replacemalloc_core.c \ m_scheduler/sched-lock.c \ m_scheduler/sched-lock-generic.c \ diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c index 3daa38a3a9..66430668b5 100644 --- a/coregrind/m_debuginfo/debuginfo.c +++ b/coregrind/m_debuginfo/debuginfo.c @@ -555,9 +555,26 @@ static Bool ranges_overlap (Addr s1, SizeT len1, Addr s2, SizeT len2 ) /* Do the basic mappings of the two DebugInfos overlap in any way? */ static Bool do_DebugInfos_overlap ( const DebugInfo* di1, const DebugInfo* di2 ) { - Word i, j; vg_assert(di1); vg_assert(di2); +#if defined(VGO_darwin) && DARWIN_VERS >= DARWIN_10_15 + // FIXME: This is probably wrong but the other methods returns too many false positives + // as it doesn't account for munmap being called on one of these maps. + // dyld will mmap and then munmap every library ro_map at the same address thus every library shows + // an overlap and only the last is retained, making most debug UNKNOW_FUNCTION UNKNOWN_OBJECT. + // Seeing how discard_syms_in_range relies exclusively on text_* to check conflicts, let's do the same here + + // Sanity check needed by discard_DebugInfos_which_overlap_with + if (di1 == di2) { + return True; + } + if (!di1->text_present || !di2->text_present) { + return False; + } + return ranges_overlap(di1->text_avma, di1->text_size, di2->text_avma, di2->text_size); +#else + Word i, j; + for (i = 0; i < VG_(sizeXA)(di1->fsm.maps); i++) { const DebugInfoMapping* map1 = VG_(indexXA)(di1->fsm.maps, i); for (j = 0; j < VG_(sizeXA)(di2->fsm.maps); j++) { @@ -569,6 +586,7 @@ static Bool do_DebugInfos_overlap ( const DebugInfo* di1, const DebugInfo* di2 ) } return False; +#endif } diff --git a/coregrind/m_debuginfo/readmacho.c b/coregrind/m_debuginfo/readmacho.c index 2c59d09deb..6224feea38 100644 --- a/coregrind/m_debuginfo/readmacho.c +++ b/coregrind/m_debuginfo/readmacho.c @@ -92,8 +92,8 @@ static Int count_rw_loads(const struct load_command* macho_load_commands, unsign if (lc->cmd == LC_SEGMENT_CMD) { const struct SEGMENT_COMMAND* sc = (const struct SEGMENT_COMMAND*)lc; if (sc->initprot == 3 && sc->filesize -#if DARWIN_VERS >= DARWIN_13_00 -// FIXME: somehow __DATA_CONST appears as rw- in most binaries in macOS 13 and later (not sure when that started) +#if DARWIN_VERS >= DARWIN_10_15 +// FIXME: somehow __DATA_CONST appears as rw- in most binaries in macOS 10.15 // so we ignore it otherwise some binaries don't get symbols && VG_(strcmp)(sc->segname, "__DATA_CONST") != 0 #endif @@ -1010,7 +1010,7 @@ Bool ML_(read_macho_debug_info)( struct _DebugInfo* di ) di->data_present = True; di->data_svma = (Addr)seg.vmaddr; di->data_avma = rw_map->avma; -#if defined(VGA_arm64) +#if defined(VGO_darwin) && (DARWIN_VERS >= DARWIN_10_15) // FIXME: the same mmap contains both __DATA_CONST, __DATA and __DATA_DIRTY // this means that symbols in __DATA/__DATA_DIRTY are offset by the size of __DATA_CONST // not sure when this started to be an issue so I am going to gate this under arm64 for now diff --git a/coregrind/m_initimg/initimg-darwin.c b/coregrind/m_initimg/initimg-darwin.c index d4257c9544..c15c023723 100644 --- a/coregrind/m_initimg/initimg-darwin.c +++ b/coregrind/m_initimg/initimg-darwin.c @@ -160,7 +160,11 @@ static HChar** setup_client_env ( HChar** origenv, const HChar* toolname) /* Allocate a new space */ ret = VG_(malloc) ("initimg-darwin.sce.3", +#if DARWIN_VERS >= DARWIN_10_15 + sizeof(HChar *) * (envc+3+1)); /* 3 new entries + NULL */ +#else sizeof(HChar *) * (envc+2+1)); /* 2 new entries + NULL */ +#endif /* copy it over */ for (cpp = ret; *origenv; ) @@ -211,7 +215,10 @@ static HChar** setup_client_env ( HChar** origenv, const HChar* toolname) ret[envc++] = cp; } - +#if DARWIN_VERS >= DARWIN_10_15 + // pthread really wants a non-zero value for ptr_munge + ret[envc++] = VG_(strdup)("initimg-darwin.sce.6", "PTHREAD_PTR_MUNGE_TOKEN=0x00000001"); +#endif /* ret[0 .. envc-1] is live now. */ /* Find and remove a binding for VALGRIND_LAUNCHER. */ diff --git a/coregrind/m_mach/mig_strncpy.c b/coregrind/m_mach/mig_strncpy.c new file mode 100644 index 0000000000..9e07e8c85c --- /dev/null +++ b/coregrind/m_mach/mig_strncpy.c @@ -0,0 +1,121 @@ +/* + This file is part of Valgrind, a dynamic binary instrumentation + framework. + + Copyright (c) 2020-2025 Louis Brunner <lou...@gm...> + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + The GNU General Public License is contained in the file COPYING. +*/ +/* + * This file contains mig_strncpy and mig_strncpy_zerofill reimplemented + * from comments left by Joshua Block in the original file + * `xnu/libsyscall/mach/mig_strncpy.c` + * + * Here they are for reference: + */ +/* + * mig_strncpy.c - by Joshua Block + * + * mig_strncpy -- Bounded string copy. Does what the library routine strncpy + * OUGHT to do: Copies the (null terminated) string in src into dest, a + * buffer of length len. Assures that the copy is still null terminated + * and doesn't overflow the buffer, truncating the copy if necessary. + * + * Parameters: + * + * dest - Pointer to destination buffer. + * + * src - Pointer to source string. + * + * len - Length of destination buffer. + * + * Result: + * length of string copied, INCLUDING the trailing 0. + * + * mig_strncpy_zerofill -- Bounded string copy. Does what the + * library routine strncpy OUGHT to do: Copies the (null terminated) + * string in src into dest, a buffer of length len. Assures that + * the copy is still null terminated and doesn't overflow the buffer, + * truncating the copy if necessary. If the string in src is smaller + * than given length len, it will zero fill the remaining bytes in dest. + * + * Parameters: + * + * dest - Pointer to destination buffer. + * + * src - Pointer to source string. + * + * len - Length of destination buffer. + * + * Result: + * length of string copied, INCLUDING the trailing 0. + */ + +#if defined(VGO_darwin) + +#include <mach/mig_errors.h> + +int mig_strncpy(char *dest, const char *src, int len) +{ + int i; + int src_len; + + for (src_len = 0; src[src_len]; ++src_len); + + if (len > src_len) { + for (i = 0; i < src_len; ++i) { + dest[i] = src[i]; + } + dest[i] = '\0'; + return i + 1; + } + + for (i = 0; i < len; ++i) { + dest[i] = src[i]; + } + dest[i - 1] = '\0'; + return i; +} + +int mig_strncpy_zerofill(char *dest, const char *src, int len) +{ + int i; + int src_len; + + for (src_len = 0; src[src_len]; ++src_len); + + if (len > src_len) { + for (i = 0; i < src_len; ++i) { + dest[i] = src[i]; + } + for (; i < len; ++i) { + dest[i] = '\0'; + } + return len; + } + + for (i = 0; i < len; ++i) { + dest[i] = src[i]; + } + dest[i - 1] = '\0'; + return len; +} + +#endif // defined(VGO_darwin) + +/*--------------------------------------------------------------------*/ +/*--- end ---*/ +/*--------------------------------------------------------------------*/ diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index a96ce36b49..7ffc4f88f3 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -650,6 +650,11 @@ DECL_TEMPLATE(darwin, abort_with_payload); // 521 // NYI kqueue_workloop_ctl // 530 // NYI __mach_bridge_remote_time // 531 #endif /* DARWIN_VERS >= DARWIN_10_14 */ +#if DARWIN_VERS >= DARWIN_10_15 +// NYI coalition_ledger // 532 +// NYI log_data // 533 +// NYI memorystatus_available_memory // 534 +#endif // Mach message helpers DECL_TEMPLATE(darwin, mach_port_set_context); @@ -794,6 +799,12 @@ DECL_TEMPLATE(darwin, swtch_pri); DECL_TEMPLATE(darwin, kernelrpc_mach_port_get_attributes_trap); #endif /* DARWIN_VERS >= DARWIN_10_14 */ +#if DARWIN_VERS >= DARWIN_10_15 +DECL_TEMPLATE(darwin, task_restartable_ranges_register); +DECL_TEMPLATE(darwin, kernelrpc_mach_port_type_trap); +DECL_TEMPLATE(darwin, kernelrpc_mach_port_request_notification_trap); +#endif /* DARWIN_VERS >= DARWIN_10_15 */ + // Machine-dependent traps DECL_TEMPLATE(darwin, thread_fast_set_cthread_self); diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 80bd013f36..09c1338cfa 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -1779,6 +1779,9 @@ static const HChar *name_for_fcntl(UWord cmd) { # endif # if DARWIN_VERS >= DARWIN_10_14 F(F_CHECK_LV); +# endif +# if DARWIN_VERS >= DARWIN_10_15 + F(F_SPECULATIVE_READ); # endif default: return "UNKNOWN"; @@ -1985,6 +1988,29 @@ PRE(fcntl) break; # endif +# if DARWIN_VERS >= DARWIN_10_15 + case VKI_F_SPECULATIVE_READ: /* Synchronous advisory read fcntl for regular and compressed file */ + PRINT("fcntl ( %lu, %s, %#lx )", ARG1, name_for_fcntl(ARG2), ARG3); + PRE_REG_READ3(long, "fcntl", + unsigned int, fd, unsigned int, cmd, + fspecread_t *, args); + + { + fspecread_t *fspecread = (fspecread_t *)ARG3; + PRE_FIELD_READ( "fcntl(VKI_F_SPECULATIVE_READ, fspecread->fsr_flags)", + fspecread->fsr_flags); + PRE_FIELD_READ( "fcntl(VKI_F_SPECULATIVE_READ, fspecread->fsr_offset)", + fspecread->fsr_offset); + PRE_FIELD_READ( "fcntl(VKI_F_SPECULATIVE_READ, fspecread->fsr_length)", + fspecread->fsr_length); + + if (fspecread->fsr_offset < 0 || fspecread->fsr_length < 0) { + SET_STATUS_Failure( VKI_EINVAL ); + } + } + break; +# endif + default: PRINT("fcntl ( %lu, %lu [??] )", ARG1, ARG2); log_decaying("UNKNOWN fcntl %lu!", ARG2); @@ -3399,8 +3425,13 @@ static void scan_attrlist(ThreadId tid, struct vki_attrlist *attrList, { ATTR_CMN_OWNERID, sizeof(uid_t) }, { ATTR_CMN_GRPID, sizeof(gid_t) }, { ATTR_CMN_ACCESSMASK, sizeof(uint32_t) }, +#if DARWIN_VERS >= DARWIN_10_15 + { ATTR_CMN_GEN_COUNT, sizeof(uint32_t) }, + { ATTR_CMN_DOCUMENT_ID, sizeof(uint32_t) }, +#else { ATTR_CMN_NAMEDATTRCOUNT, sizeof(uint32_t) }, { ATTR_CMN_NAMEDATTRLIST, -1 }, +#endif { ATTR_CMN_FLAGS, sizeof(uint32_t) }, { ATTR_CMN_USERACCESS, sizeof(uint32_t) }, { ATTR_CMN_EXTENDED_SECURITY, -1 }, @@ -3413,6 +3444,10 @@ static void scan_attrlist(ThreadId tid, struct vki_attrlist *attrList, #endif #if DARWIN_VERS >= DARWIN_10_8 { ATTR_CMN_ADDEDTIME, -1 }, +#endif +#if DARWIN_VERS >= DARWIN_10_15 + { ATTR_CMN_ERROR, sizeof(uint32_t) }, + { ATTR_CMN_DATA_PROTECT_FLAGS, sizeof(uint32_t) }, #endif { 0, 0 } }; @@ -3439,6 +3474,10 @@ static void scan_attrlist(ThreadId tid, struct vki_attrlist *attrList, { ATTR_VOL_CAPABILITIES, sizeof(vol_capabilities_attr_t) }, #if DARWIN_VERS >= DARWIN_10_6 { ATTR_VOL_UUID, sizeof(uuid_t) }, +#endif +#if DARWIN_VERS >= DARWIN_10_15 + { ATTR_VOL_QUOTA_SIZE, sizeof(off_t) }, + { ATTR_VOL_RESERVED_SIZE, sizeof(off_t) }, #endif { ATTR_VOL_ATTRIBUTES, sizeof(vol_attributes_attr_t) }, { 0, 0 } @@ -3448,6 +3487,11 @@ static void scan_attrlist(ThreadId tid, struct vki_attrlist *attrList, { ATTR_DIR_LINKCOUNT, sizeof(uint32_t) }, { ATTR_DIR_ENTRYCOUNT, sizeof(uint32_t) }, { ATTR_DIR_MOUNTSTATUS, sizeof(uint32_t) }, +#if DARWIN_VERS >= DARWIN_10_15 + { ATTR_DIR_ALLOCSIZE, sizeof(off_t) }, + { ATTR_DIR_IOBLOCKSIZE, sizeof(uint32_t) }, + { ATTR_DIR_DATALENGTH, sizeof(off_t) }, +#endif { 0, 0 } }; static const attrspec fileattr[] = { @@ -3473,6 +3517,16 @@ static void scan_attrlist(ThreadId tid, struct vki_attrlist *attrList, // This order is important. { ATTR_FORK_TOTALSIZE, sizeof(off_t) }, { ATTR_FORK_ALLOCSIZE, sizeof(off_t) }, +#if DARWIN_VERS >= DARWIN_10_15 + { ATTR_CMNEXT_RELPATH, sizeof(struct attrreference) }, + { ATTR_CMNEXT_PRIVATESIZE, sizeof(off_t) }, + { ATTR_CMNEXT_LINKID, sizeof(uint64_t) }, + { ATTR_CMNEXT_NOFIRMLINKPATH, sizeof(struct attrreference) }, + { ATTR_CMNEXT_REALDEVID, sizeof(uint32_t) }, + { ATTR_CMNEXT_REALFSID, sizeof(fsid_t) }, + { ATTR_CMNEXT_CLONEID, sizeof(uint64_t) }, + { ATTR_CMNEXT_EXT_FLAGS, sizeof(uint64_t) }, +#endif { 0, 0 } }; @@ -8643,6 +8697,12 @@ PRE(mach_msg_task) CALL_PRE(mach_vm_purgable_control); return; +#if DARWIN_VERS >= DARWIN_10_15 + case 8000: + CALL_PRE(task_restartable_ranges_register); + return; +#endif + default: // unknown message to task self log_decaying("UNKNOWN task message [id %d, to %s, reply 0x%x]", @@ -10949,6 +11009,79 @@ PRE(kernelrpc_mach_port_get_attributes_trap) } } #endif /* DARWIN_VERS >= DARWIN_10_14 */ + + +/* --------------------------------------------------------------------- + Added for macOS 10.15 (Catalina) + ------------------------------------------------------------------ */ + +#if DARWIN_VERS >= DARWIN_10_15 + +PRE(task_restartable_ranges_register) +{ + PRINT("task_restartable_ranges_register(%s, %#lx, %ld)", name_for_port(ARG1), ARG2, SARG3); +} + +POST(task_restartable_ranges_register) +{ +#pragma pack(4) + typedef struct { + mach_msg_header_t Head; + NDR_record_t NDR; + kern_return_t RetCode; + } Reply; +#pragma pack() + + Reply *reply = (Reply *)ARG1; + + if (!reply->RetCode) { + } else { + PRINT("mig return %d", reply->RetCode); + } +} + +PRE(kernelrpc_mach_port_request_notification_trap) +{ + PRINT("kernelrpc_mach_port_request_notification_trap(%s, %s, %ld, %ld, %s, %ld, %#lx)", + name_for_port(ARG1), name_for_port(ARG2), SARG3, SARG4, name_for_port(ARG5), SARG6, ARG7); + PRE_REG_READ7(kern_return_t, "kernelrpc_mach_port_request_notification_trap", + ipc_space_t, task, mach_port_name_t, name, mach_msg_id_t, msgid, + mach_port_mscount_t, sync, mach_port_name_t, notify, mach_msg_type_name_t, notifyPoly, + mach_port_name_t*, previous); + if (ARG7 != 0) { + PRE_MEM_WRITE("kernelrpc_mach_port_request_notification_trap(previous)", ARG7, sizeof(mach_port_name_t)); + } +} + +POST(kernelrpc_mach_port_request_notification_trap) +{ + if (RES == 0 && ARG7 != 0) { + POST_MEM_WRITE(ARG7, sizeof(mach_port_name_t)); + PRINT("-> previous:%s", name_for_port(*(mach_port_name_t*)ARG7)); + } +} + +PRE(kernelrpc_mach_port_type_trap) +{ + PRINT("kernelrpc_mach_port_type_trap(%s, %s, %#lx)", + name_for_port(ARG1), name_for_port(ARG2), ARG3); + PRE_REG_READ3(kern_return_t, "kernelrpc_mach_port_type_trap", + ipc_space_t, task, mach_port_name_t, name, mach_port_type_t*, ptype); + if (ARG3 != 0) { + PRE_MEM_WRITE("kernelrpc_mach_port_type_trap(ptype)", ARG3, sizeof(mach_port_type_t)); + } +} + +POST(kernelrpc_mach_port_type_trap) +{ + if (RES == 0 && ARG3 != 0) { + POST_MEM_WRITE(ARG3, sizeof(mach_port_type_t)); + PRINT("-> ptype:%#x", *(mach_port_type_t*)ARG3); + } +} + +#endif /* DARWIN_VERS >= DARWIN_10_15 */ + /* --------------------------------------------------------------------- syscall tables ------------------------------------------------------------------ */ @@ -11576,7 +11709,11 @@ const SyscallTableEntry ML_(syscall_table)[] = { // _____(__NR_kqueue_workloop_ctl), // 530 // _____(__NR___mach_bridge_remote_time), // 531 #endif - +#if DARWIN_VERS >= DARWIN_10_15 +// _____(__NR_coalition_ledger), // 532 +// _____(__NR_log_data), // 533 +// _____(__NR_memorystatus_available_memory), // 534 +#endif MACX_(__NR_darwin_fake_sigreturn, fake_sigreturn) }; @@ -11744,8 +11881,13 @@ const SyscallTableEntry ML_(mach_trap_table)[] = { _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(73)), _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(74)), _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(75)), +#if DARWIN_VERS >= DARWIN_10_15 + MACXY(__NR_kernelrpc_mach_port_type_trap, kernelrpc_mach_port_type_trap), + MACXY(__NR_kernelrpc_mach_port_request_notification_trap, kernelrpc_mach_port_request_notification_trap), +#else _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(76)), _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(77)), +#endif _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(78)), _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(79)), _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(80)), // -80 diff --git a/darwin-drd.supp b/darwin-drd.supp index 39f9b9b638..35f036ca06 100644 --- a/darwin-drd.supp +++ b/darwin-drd.supp @@ -420,3 +420,24 @@ ... fun:_ZN4dyld4loadEPKcRKNS_11LoadContextERj } + +{ + macOS1015:_CFInitialize + drd:ConflictingAccess + ... + fun:__CFInitialize +} + +{ + macOS1015:cache_validate_item + drd:ConflictingAccess + ... + fun:cache_validate_item +} + +{ + macOS1015:ds_user_byuid + drd:ConflictingAccess + ... + fun:ds_user_byuid +} diff --git a/darwin-helgrind.supp b/darwin-helgrind.supp index e4f628997a..1bd4175235 100644 --- a/darwin-helgrind.supp +++ b/darwin-helgrind.supp @@ -190,3 +190,29 @@ ... fun:_objc_msgSend_uncached } + +{ + macOS1015:NXMapInsert + Helgrind:Race + fun:NXMapInsert +} + +{ + macOS1015:notify_monitor_file + Helgrind:Race + fun:notify_monitor_file +} + +{ + macOS1015:_xpc_asprintf + Helgrind:Race + ... + fun:_xpc_asprintf +} + +{ + macOS1015:lookUpImpOrForward + Helgrind:Race + ... + fun:lookUpImpOrForward +} diff --git a/darwin.supp b/darwin.supp index 1fd1948115..1f693d6b22 100644 --- a/darwin.supp +++ b/darwin.supp @@ -54,21 +54,9 @@ { OSX1013:6-Leak Memcheck:Leak - match-leak-kinds: reachable - fun:malloc_zone_?alloc - ... - fun:map_images_nolock - fun:map_2_images -} - -{ - OSX1013:7-Leak - Memcheck:Leak - match-leak-kinds: possible - fun:malloc_zone_?alloc + match-leak-kinds: all ... fun:map_images_nolock - fun:map_2_images } { @@ -740,15 +728,6 @@ fun:NXCreate*TableFromZone } -{ - OSX1013:map_images-2 - Memcheck:Leak - match-leak-kinds: possible - fun:calloc - fun:map_images_nolock - fun:map_images -} - { OSX1013:map_images-3 Memcheck:Leak @@ -756,18 +735,11 @@ fun:calloc fun:_ZL12realizeClassP10objc_class } -{ - OSX1013:map_images-4 - Memcheck:Leak - match-leak-kinds: indirect - fun:malloc_zone_malloc - ... - fun:map_images_nolock -} + { OSX1013:map_images-5 Memcheck:Leak - match-leak-kinds: indirect + match-leak-kinds: all fun:malloc_zone_calloc fun:*NXHash* } @@ -807,3 +779,12 @@ fun:malloc_zone_calloc fun:_NXHashRehashToCapacity } + +# I suppose that this is deliberate +# and that Apple know what they are doing? +{ + masOS1015:__chkstk_darwin_probe + Memcheck:Addr8 + fun:__chkstk_darwin_probe +} + diff --git a/include/vki/vki-darwin.h b/include/vki/vki-darwin.h index 5e381ab4c6..5acd38a4f5 100644 --- a/include/vki/vki-darwin.h +++ b/include/vki/vki-darwin.h @@ -411,6 +411,9 @@ typedef uint32_t vki_u32; #if DARWIN_VERS >= DARWIN_10_14 # define VKI_F_CHECK_LV F_CHECK_LV #endif +#if DARWIN_VERS >= DARWIN_10_15 +# define VKI_F_SPECULATIVE_READ F_SPECULATIVE_READ +#endif #define VKI_F_FULLFSYNC F_FULLFSYNC #define VKI_F_PATHPKG_CHECK F_PATHPKG_CHECK #define VKI_F_FREEZE_FS F_FREEZE_FS diff --git a/include/vki/vki-scnums-darwin.h b/include/vki/vki-scnums-darwin.h index 70b110e816..3f378d3018 100644 --- a/include/vki/vki-scnums-darwin.h +++ b/include/vki/vki-scnums-darwin.h @@ -218,6 +218,11 @@ #define __NR_host_create_mach_voucher_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(70) #endif +#if DARWIN_VERS >= DARWIN_10_15 +#define __NR_kernelrpc_mach_port_type_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(76) +#define __NR_kernelrpc_mach_port_request_notification_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(77) +#endif + #define __NR_mach_voucher_extract_attr_recipe_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(72) #define __NR_mach_timebase_info VG_DARWIN_SYSCALL_CONSTRUCT_MACH(89) @@ -859,6 +864,12 @@ #define __NR___mach_bridge_remote_time VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(531) #endif /* DARWIN_VERS >= DARWIN_10_14 */ +#if DARWIN_VERS >= DARWIN_10_15 +#define __NR_coalition_ledger VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(532) +#define __NR_log_data VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(533) +#define __NR_memorystatus_available_memory VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(534) +#endif + #define __NR_darwin_fake_sigreturn VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(1000) #endif diff --git a/massif/tests/alloc-fns-A.vgtest b/massif/tests/alloc-fns-A.vgtest index c9163223d4..ba3e87d196 100644 --- a/massif/tests/alloc-fns-A.vgtest +++ b/massif/tests/alloc-fns-A.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/alloc-fns-B.vgtest b/massif/tests/alloc-fns-B.vgtest index e7329a378a..2456604c6f 100644 --- a/massif/tests/alloc-fns-B.vgtest +++ b/massif/tests/alloc-fns-B.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/basic.vgtest b/massif/tests/basic.vgtest index 87c3a64444..0a3bc1054c 100644 --- a/massif/tests/basic.vgtest +++ b/massif/tests/basic.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/basic2.vgtest b/massif/tests/basic2.vgtest index 1dce7706f4..950b57e5b8 100644 --- a/massif/tests/basic2.vgtest +++ b/massif/tests/basic2.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/big-alloc.vgtest b/massif/tests/big-alloc.vgtest index 7f9149d912..b2520b997e 100644 --- a/massif/tests/big-alloc.vgtest +++ b/massif/tests/big-alloc.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/bug469146.vgtest b/massif/tests/bug469146.vgtest index 3bf1b60c10..2004bf2688 100644 --- a/massif/tests/bug469146.vgtest +++ b/massif/tests/bug469146.vgtest @@ -8,5 +8,7 @@ vgopts: --ignore-fn=filter_function1 --ignore-fn="filter_function2(int)" --ignor vgopts: --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn=map_images_nolock --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInser --ignore-fn=add_class_to_loadable_list --ignore-fn=NXHashInsert --ignore-fn=class_createInstance --ignore-fn=_xpc_malloc --ignore-fn=strdup --ignore-fn=_xpc_calloc # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | sed 's/gcc[0-9]*/gcc/' | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/culling1.stderr.exp b/massif/tests/culling1.stderr.exp index e277dc60ea..eaa4e72944 100644 --- a/massif/tests/culling1.stderr.exp +++ b/massif/tests/culling1.stderr.exp @@ -39,6 +39,11 @@ Massif: 15: xpc_array_create Massif: 16: _NXMapRehash(_NXMapTable*) Massif: 17: arc4_init Massif: 18: realizeClassWithoutSwift(objc_class*) +Massif: 19: _objc_init +Massif: 20: objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int) +Massif: 21: realizeClassWithoutSwift(objc_class*, objc_class*) +Massif: 22: schedule_class_load(objc_class*) +Massif: 23: objc::SafeRanges::add(unsigned long, unsigned long) Massif: startup S. 0 (t:0, hp:0, ex:0, st:0) Massif: alloc S. 1 (t:32, hp:16, ex:16, st:0) Massif: alloc S. 2 (t:64, hp:32, ex:32, st:0) diff --git a/massif/tests/culling1.vgtest b/massif/tests/culling1.vgtest index 5247e1b711..9dbfa6665a 100644 --- a/massif/tests/culling1.vgtest +++ b/massif/tests/culling1.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" stderr_filter: filter_verbose cleanup: rm massif.out diff --git a/massif/tests/culling2.stderr.exp b/massif/tests/culling2.stderr.exp index 599d0f0aa6..2d77d0461a 100644 --- a/massif/tests/culling2.stderr.exp +++ b/massif/tests/culling2.stderr.exp @@ -39,6 +39,11 @@ Massif: 15: xpc_array_create Massif: 16: _NXMapRehash(_NXMapTable*) Massif: 17: arc4_init Massif: 18: realizeClassWithoutSwift(objc_class*) +Massif: 19: _objc_init +Massif: 20: objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int) +Massif: 21: realizeClassWithoutSwift(objc_class*, objc_class*) +Massif: 22: schedule_class_load(objc_class*) +Massif: 23: objc::SafeRanges::add(unsigned long, unsigned long) Massif: startup S. 0 (t:0, hp:0, ex:0, st:0) Massif: alloc S. 1 (t:16, hp:0, ex:16, st:0) Massif: alloc S. 2 (t:432, hp:400, ex:32, st:0) diff --git a/massif/tests/culling2.vgtest b/massif/tests/culling2.vgtest index 847010e1ef..a5b4771a71 100644 --- a/massif/tests/culling2.vgtest +++ b/massif/tests/culling2.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" stderr_filter: filter_verbose cleanup: rm massif.out diff --git a/massif/tests/custom_alloc.vgtest b/massif/tests/custom_alloc.vgtest index c651534da5..6db7e483b1 100644 --- a/massif/tests/custom_alloc.vgtest +++ b/massif/tests/custom_alloc.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/deep-A.vgtest b/massif/tests/deep-A.vgtest index 77fc9d0e3d..cd80c108da 100644 --- a/massif/tests/deep-A.vgtest +++ b/massif/tests/deep-A.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/deep-B.stderr.exp b/massif/tests/deep-B.stderr.exp index 7f7c332b92..f3fd39d2ae 100644 --- a/massif/tests/deep-B.stderr.exp +++ b/massif/tests/deep-B.stderr.exp @@ -46,6 +46,11 @@ Massif: 15: xpc_array_create Massif: 16: _NXMapRehash(_NXMapTable*) Massif: 17: arc4_init Massif: 18: realizeClassWithoutSwift(objc_class*) +Massif: 19: _objc_init +Massif: 20: objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int) +Massif: 21: realizeClassWithoutSwift(objc_class*, objc_class*) +Massif: 22: schedule_class_load(objc_class*) +Massif: 23: objc::SafeRanges::add(unsigned long, unsigned long) Massif: startup S. 0 (t:0, hp:0, ex:0, st:0) Massif: alloc S. 1 (t:408, hp:400, ex:8, st:0) Massif: alloc S. 2 (t:816, hp:800, ex:16, st:0) diff --git a/massif/tests/deep-B.vgtest b/massif/tests/deep-B.vgtest index 0328353b37..ddbd32c341 100644 --- a/massif/tests/deep-B.vgtest +++ b/massif/tests/deep-B.vgtest @@ -6,5 +6,7 @@ vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=ma # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" stderr_filter: filter_verbose +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/deep-C.stderr.exp b/massif/tests/deep-C.stderr.exp index 39b35f139b..154c757c29 100644 --- a/massif/tests/deep-C.stderr.exp +++ b/massif/tests/deep-C.stderr.exp @@ -49,6 +49,11 @@ Massif: 15: xpc_array_create Massif: 16: _NXMapRehash(_NXMapTable*) Massif: 17: arc4_init Massif: 18: realizeClassWithoutSwift(objc_class*) +Massif: 19: _objc_init +Massif: 20: objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int) +Massif: 21: realizeClassWithoutSwift(objc_class*, objc_class*) +Massif: 22: schedule_class_load(objc_class*) +Massif: 23: objc::SafeRanges::add(unsigned long, unsigned long) Massif: startup S. 0 (t:0, hp:0, ex:0, st:0) Massif: alloc S. 1 (t:408, hp:400, ex:8, st:0) Massif: alloc S. 2 (t:816, hp:800, ex:16, st:0) diff --git a/massif/tests/deep-C.vgtest b/massif/tests/deep-C.vgtest index b21e5df8b1..ef8b558a11 100644 --- a/massif/tests/deep-C.vgtest +++ b/massif/tests/deep-C.vgtest @@ -5,6 +5,8 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" stderr_filter: filter_verbose post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/deep-D.vgtest b/massif/tests/deep-D.vgtest index 374f2afc29..d669fdf9a2 100644 --- a/massif/tests/deep-D.vgtest +++ b/massif/tests/deep-D.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ../../tests/filter_libc | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/filter_ignore_fn b/massif/tests/filter_ignore_fn index 2b524f08ba..3cbc224078 100755 --- a/massif/tests/filter_ignore_fn +++ b/massif/tests/filter_ignore_fn @@ -1,5 +1,9 @@ #! /bin/sh -awk '/Massif arguments/{gsub(/ unsigned int/, "uint")}{print}' | +awk '/Massif arguments/{gsub(/ ?unsigned int/, "uint")}{print}' | +awk '/Massif arguments/{gsub(/ ?unsigned long/, "ulong")}{print}' | +awk '/Massif arguments/{gsub(/char const/, "char_const")}{print}' | +awk '/Massif arguments/{gsub(/ objc/, "_objc")}{print}' | +awk '/Massif arguments/{gsub(/> >/, ">>")}{print}' | # unmangled C++ names can contain spaces so the above filter removes themn first awk '{gsub(/ --ignore-fn=[^ ]*/, ""); print}' diff --git a/massif/tests/ignored.vgtest b/massif/tests/ignored.vgtest index 7f9448156e..805a36eb43 100644 --- a/massif/tests/ignored.vgtest +++ b/massif/tests/ignored.vgtest @@ -6,5 +6,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/ignoring.vgtest b/massif/tests/ignoring.vgtest index 7181f3435a..c3d7a13658 100644 --- a/massif/tests/ignoring.vgtest +++ b/massif/tests/ignoring.vgtest @@ -5,5 +5,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/inlinfomalloc.vgtest b/massif/tests/inlinfomalloc.vgtest index 8f5c401e4d..8df84d2015 100644 --- a/massif/tests/inlinfomalloc.vgtest +++ b/massif/tests/inlinfomalloc.vgtest @@ -6,5 +6,7 @@ vgopts: --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClas # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" stderr_filter: filter_verbose +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignore-fn="schedule_class_load(objc_class*)" --ignore-fn="objc::SafeRanges::add(unsigned long, unsigned long)" post: perl ../../massif/ms_print --threshold=0 massif.out | ../../tests/filter_addresses | ./filter_ignore_fn cleanup: rm massif.out diff --git a/massif/tests/insig.vgtest b/massif/tests/insig.vgtest index a2994b5244..ba307adabc 100644 --- a/massif/tests/insig.vgtest +++ b/massif/tests/insig.vgtest @@ -6,5 +6,7 @@ vgopts: --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-f vgopts: --alloc-fn=_xpc_malloc --ignore-fn=_xpc_dictionary_insert --ignore-fn=map_images_nolock --ignore-fn="allocBuckets(void*, unsigned int)" --ignore-fn="realizeClass(objc_class*)" --ignore-fn=_NXHashRehashToCapacity --ignore-fn=NXCreateHashTableFromZone --ignore-fn=NXCreateMapTableFromZone --ignore-fn=NXHashInsert --ignore-fn=add_class_to_loadable_list --ignore-fn=class_createInstance --ignore-fn=xpc_string_create --alloc-fn=strdup --alloc-fn=_xpc_calloc --ignore-fn=xpc_array_create # Darwin ignore functions, for macOS 10.14 vgopts: --ignore-fn="_NXMapRehash(_NXMapTable*)" --ignore-fn=arc4_init --ignore-fn="realizeClassWithoutSwift(objc_class*)" +# Darwin ignore functions, for macOS 10.15 +vgopts: --ignore-fn=_objc_init --ignore-fn-"objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="objc::DenseMap<char const*, objc::detail::DenseSetEmpty, objc::DenseMapValueInfo<objc::detail::DenseSetEmpty>, objc::DenseMapInfo<char const*>, objc::detail::DenseSetPair<char const*> >::grow(unsigned int)" --ignore-fn="realizeClassWithoutSwift(objc_class*, objc_class*)" --ignor... [truncated message content] |