Revision: 23519 http://trac.macosforge.org/projects/launchd/changeset/23519 Author: zarzycki@apple.com Date: 2008-02-20 12:36:39 -0800 (Wed, 20 Feb 2008) Log Message: ----------- Make launchd compile 64-bit. It still doesn't work. What remains is malloc()/free() problems (in launchd_unix_ipc.c???). Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_runtime.c trunk/launchd/src/launchd_runtime.h trunk/launchd/src/launchd_runtime_kill.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-02-15 22:18:20 UTC (rev 23518) +++ trunk/launchd/src/launchd_core_logic.c 2008-02-20 20:36:39 UTC (rev 23519) @@ -4286,9 +4286,9 @@ return; } -#if defined (__ppc__) +#if defined (__ppc__) || defined(__ppc64__) f = PPC_THREAD_STATE64; -#elif defined(__i386__) +#elif defined(__i386__) || defined(__x86_64__) f = x86_THREAD_STATE; #elif defined(__arm__) f = ARM_THREAD_STATE; Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2008-02-15 22:18:20 UTC (rev 23518) +++ trunk/launchd/src/launchd_runtime.c 2008-02-20 20:36:39 UTC (rev 23519) @@ -113,6 +113,7 @@ static void do_file_init(void) __attribute__((constructor)); static mach_timebase_info_data_t tbi; +static uint64_t tbi_safe_math_max; static double tbi_float_val; static const int sigigns[] = { SIGHUP, SIGINT, SIGPIPE, SIGALRM, SIGTERM, @@ -1078,7 +1079,7 @@ no_hang_fd = _fd(open("/dev/autofs_nowait", 0)); } - runtime_ktrace(RTKT_LAUNCHD_MACH_IPC|DBG_FUNC_START, bufRequest->Head.msgh_local_port, bufRequest->Head.msgh_id, (int)the_demux); + runtime_ktrace(RTKT_LAUNCHD_MACH_IPC|DBG_FUNC_START, bufRequest->Head.msgh_local_port, bufRequest->Head.msgh_id, (long)the_demux); if (the_demux(&bufRequest->Head, &bufReply->Head) == FALSE) { /* XXX - also gross */ @@ -1327,7 +1328,7 @@ /* This syscall returns EINVAL when the trace isn't enabled. */ if (do_apple_internal_logging) { - syscall(180, code, 0, 0, 0, (int)ra); + syscall(180, code, 0, 0, 0, (long)ra); } } @@ -1338,18 +1339,18 @@ /* This syscall returns EINVAL when the trace isn't enabled. */ if (do_apple_internal_logging) { - syscall(180, code, 0, 0, 0, (int)ra); + syscall(180, code, 0, 0, 0, (long)ra); } } INTERNAL_ABI void -runtime_ktrace(runtime_ktrace_code_t code, int a, int b, int c) +runtime_ktrace(runtime_ktrace_code_t code, long a, long b, long c) { void *ra = __builtin_extract_return_addr(__builtin_return_address(0)); /* This syscall returns EINVAL when the trace isn't enabled. */ if (do_apple_internal_logging) { - syscall(180, code, a, b, c, (int)ra); + syscall(180, code, a, b, c, (long)ra); } } @@ -1612,7 +1613,13 @@ #else if (tbi.numer != tbi.denom) { #endif - if (o < INT32_MAX) { +#ifdef __LP64__ + __uint128_t tmp = o; + tmp *= tbi.numer; + tmp /= tbi.denom; + o = tmp; +#else + if (o <= tbi_safe_math_max) { o *= tbi.numer; o /= tbi.denom; } else { @@ -1620,6 +1627,7 @@ d *= tbi_float_val; o = d; } +#endif } return o; @@ -1633,6 +1641,7 @@ launchd_assert(mach_timebase_info(&tbi) == 0); tbi_float_val = tbi.numer; tbi_float_val /= tbi.denom; + tbi_safe_math_max = UINT64_MAX / tbi.numer; if (getpid() == 1) { pid1_magic = true; Modified: trunk/launchd/src/launchd_runtime.h =================================================================== --- trunk/launchd/src/launchd_runtime.h 2008-02-15 22:18:20 UTC (rev 23518) +++ trunk/launchd/src/launchd_runtime.h 2008-02-20 20:36:39 UTC (rev 23519) @@ -163,7 +163,7 @@ /* All of these log the return address as "arg4" */ INTERNAL_ABI void runtime_ktrace1(runtime_ktrace_code_t code); INTERNAL_ABI void runtime_ktrace0(runtime_ktrace_code_t code); -INTERNAL_ABI void runtime_ktrace(runtime_ktrace_code_t code, int a, int b, int c); +INTERNAL_ABI void runtime_ktrace(runtime_ktrace_code_t code, long a, long b, long c); #define LOG_APPLEONLY 0x4141504c /* AAPL in hex */ Modified: trunk/launchd/src/launchd_runtime_kill.c =================================================================== --- trunk/launchd/src/launchd_runtime_kill.c 2008-02-15 22:18:20 UTC (rev 23518) +++ trunk/launchd/src/launchd_runtime_kill.c 2008-02-20 20:36:39 UTC (rev 23519) @@ -18,15 +18,19 @@ * @APPLE_APACHE_LICENSE_HEADER_END@ */ -#if !defined(__LP64__) && !defined(__arm__) -#define _NONSTD_SOURCE 1 +#if defined(__LP64__) +/* ??? No way to get the old behavior */ #define old_kill(x, y) kill(x, y) -#define old_killpg(x, y) killpg(x, y) -#else +#define old_killpg(x, y) kill(-(x), y) +#elif defined(__arm__) /* ??? No blessed way to get the old behavior */ extern int __kill(int, int, int); #define old_kill(x, y) __kill(x, y, 0) #define old_killpg(x, y) __kill(-(x), y, 0) +#else +#define _NONSTD_SOURCE 1 +#define old_kill(x, y) kill(x, y) +#define old_killpg(x, y) killpg(x, y) #endif #include <signal.h>
participants (1)
-
source_changes@macosforge.org