[MacPorts] #37418: webkit-gtk build failure
MacPorts
noreply at macports.org
Mon Jan 7 21:57:30 PST 2013
#37418: webkit-gtk build failure
----------------------------+------------------------
Reporter: enekogotzon@… | Owner: jeremyhu@…
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version: 2.1.2
Resolution: | Keywords: leopard
Port: webkit-gtk |
----------------------------+------------------------
Comment (by ryandesign@…):
Replying to [comment:8 jeremyhu@…]:
> It's a private struct that changes with each update of the OS.
Ok, I see malloc_introspection_t is defined in
/usr/include/malloc/malloc.h. In Tiger and Leopard it's defined as:
{{{
typedef struct malloc_introspection_t {
kern_return_t (*enumerator)(task_t task, void *, unsigned type_mask,
vm_address_t zone_address, memory_reader_t reader, vm_range_recorder_t
recorder); /* enumerates all the malloc pointers in use */
size_t (*good_size)(malloc_zone_t *zone, size_t size);
boolean_t (*check)(malloc_zone_t *zone); /* Consistency checker */
void (*print)(malloc_zone_t *zone, boolean_t verbose); /*
Prints zone */
void (*log)(malloc_zone_t *zone, void *address); /* Enables
logging of activity */
void (*force_lock)(malloc_zone_t *zone); /* Forces locking zone
*/
void (*force_unlock)(malloc_zone_t *zone); /* Forces unlocking
zone */
void (*statistics)(malloc_zone_t *zone, malloc_statistics_t
*stats); /* Fills statistics */
} malloc_introspection_t;
}}}
In Snow Leopard, zone_locked is added:
{{{
typedef struct malloc_introspection_t {
kern_return_t (*enumerator)(task_t task, void *, unsigned type_mask,
vm_address_t zone_address, memory_reader_t reader, vm_range_recorder_t
recorder); /* enumerates all the malloc pointers in use */
size_t (*good_size)(malloc_zone_t *zone, size_t size);
boolean_t (*check)(malloc_zone_t *zone); /* Consistency checker */
void (*print)(malloc_zone_t *zone, boolean_t verbose); /*
Prints zone */
void (*log)(malloc_zone_t *zone, void *address); /* Enables
logging of activity */
void (*force_lock)(malloc_zone_t *zone); /* Forces locking zone
*/
void (*force_unlock)(malloc_zone_t *zone); /* Forces unlocking
zone */
void (*statistics)(malloc_zone_t *zone, malloc_statistics_t
*stats); /* Fills statistics */
boolean_t (*zone_locked)(malloc_zone_t *zone); /* Are any zone locks
held */
} malloc_introspection_t;
}}}
In Lion and Mountain, discharge checking is added:
{{{
typedef struct malloc_introspection_t {
kern_return_t (*enumerator)(task_t task, void *, unsigned type_mask,
vm_address_t zone_address, memory_reader_t reader, vm_range_recorder_t
recorder); /* enumerates all the malloc pointers in use */
size_t (*good_size)(malloc_zone_t *zone, size_t size);
boolean_t (*check)(malloc_zone_t *zone); /* Consistency checker */
void (*print)(malloc_zone_t *zone, boolean_t verbose); /*
Prints zone */
void (*log)(malloc_zone_t *zone, void *address); /* Enables
logging of activity */
void (*force_lock)(malloc_zone_t *zone); /* Forces locking zone
*/
void (*force_unlock)(malloc_zone_t *zone); /* Forces unlocking
zone */
void (*statistics)(malloc_zone_t *zone, malloc_statistics_t
*stats); /* Fills statistics */
boolean_t (*zone_locked)(malloc_zone_t *zone); /* Are any zone locks
held */
/* Discharge checking. Present in version >= 7. */
boolean_t (*enable_discharge_checking)(malloc_zone_t *zone);
void (*disable_discharge_checking)(malloc_zone_t *zone);
void (*discharge)(malloc_zone_t *zone, void *memory);
#ifdef __BLOCKS__
void (*enumerate_discharged_pointers)(malloc_zone_t *zone, void
(^report_discharged)(void *memory, void *info));
#else
void *enumerate_unavailable_without_blocks;
#endif /* __BLOCKS__ */
} malloc_introspection_t;
}}}
> That code is probably just doing something like:
> {{{
> if building for earlier than Lion {
> do it the Snow Leopard Way
> } else if Lion {
> do it the Lion Way
> } else {
> do it the Mountain Lion Way
> }
> }}}
>
> ...
>
> so you need to see what changed in that struct between Leopard and SL
and update it accordingly.
The code in webkit-gtk 1.10.2 in Source/WTF/wtf/FastMalloc.cpp, which is
the only place malloc_introspection_t is used, uses it this way:
{{{
extern "C" {
malloc_introspection_t jscore_fastmalloc_introspection = {
&FastMallocZone::enumerate, &FastMallocZone::goodSize,
&FastMallocZone::check, &FastMallocZone::print,
&FastMallocZone::log, &FastMallocZone::forceLock,
&FastMallocZone::forceUnlock, &FastMallocZone::statistics
#if OS(IOS) || __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
, 0 // zone_locked will not be called on the zone unless it advertises
itself as version five or higher.
#endif
#if OS(IOS) || __MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
, 0, 0, 0, 0 // These members will not be used unless the zone
advertises itself as version seven or higher.
#endif
};
}
}}}
To me that looks correct for all versions of OS X. But it does depend on
`__MAC_OS_X_VERSION_MAX_ALLOWED`. How can I check to see what value that
has?
--
Ticket URL: <https://trac.macports.org/ticket/37418#comment:10>
MacPorts <http://www.macports.org/>
Ports system for Mac OS
More information about the macports-tickets
mailing list