diff options
Diffstat (limited to 'source/Host/common/Host.cpp')
| -rw-r--r-- | source/Host/common/Host.cpp | 43 | 
1 files changed, 25 insertions, 18 deletions
| diff --git a/source/Host/common/Host.cpp b/source/Host/common/Host.cpp index 9e5e4cbdb04aa..d43221c0e1369 100644 --- a/source/Host/common/Host.cpp +++ b/source/Host/common/Host.cpp @@ -1743,25 +1743,32 @@ Host::LaunchProcessPosixSpawn (const char *exe_path, ProcessLaunchInfo &launch_i      // posix_spawnattr_setbinpref_np appears to be an Apple extension per:      // http://www.unix.com/man-page/OSX/3/posix_spawnattr_setbinpref_np/  #if defined (__APPLE__) && !defined (__arm__) +     +    // Don't set the binpref if a shell was provided.  After all, that's only going to affect what version of the shell +    // is launched, not what fork of the binary is launched.  We insert "arch --arch <ARCH> as part of the shell invocation +    // to do that job on OSX. +     +    if (launch_info.GetShell() == nullptr) +    { +        // We don't need to do this for ARM, and we really shouldn't now that we +        // have multiple CPU subtypes and no posix_spawnattr call that allows us +        // to set which CPU subtype to launch... +        const ArchSpec &arch_spec = launch_info.GetArchitecture(); +        cpu_type_t cpu = arch_spec.GetMachOCPUType(); +        cpu_type_t sub = arch_spec.GetMachOCPUSubType(); +        if (cpu != 0 && +            cpu != UINT32_MAX && +            cpu != LLDB_INVALID_CPUTYPE && +            !(cpu == 0x01000007 && sub == 8)) // If haswell is specified, don't try to set the CPU type or we will fail  +        { +            size_t ocount = 0; +            error.SetError( ::posix_spawnattr_setbinpref_np (&attr, 1, &cpu, &ocount), eErrorTypePOSIX); +            if (error.Fail() || log) +                error.PutToLog(log, "::posix_spawnattr_setbinpref_np ( &attr, 1, cpu_type = 0x%8.8x, count => %llu )", cpu, (uint64_t)ocount); -    // We don't need to do this for ARM, and we really shouldn't now that we -    // have multiple CPU subtypes and no posix_spawnattr call that allows us -    // to set which CPU subtype to launch... -    const ArchSpec &arch_spec = launch_info.GetArchitecture(); -    cpu_type_t cpu = arch_spec.GetMachOCPUType(); -    cpu_type_t sub = arch_spec.GetMachOCPUSubType(); -    if (cpu != 0 && -        cpu != UINT32_MAX && -        cpu != LLDB_INVALID_CPUTYPE && -        !(cpu == 0x01000007 && sub == 8)) // If haswell is specified, don't try to set the CPU type or we will fail  -    { -        size_t ocount = 0; -        error.SetError( ::posix_spawnattr_setbinpref_np (&attr, 1, &cpu, &ocount), eErrorTypePOSIX); -        if (error.Fail() || log) -            error.PutToLog(log, "::posix_spawnattr_setbinpref_np ( &attr, 1, cpu_type = 0x%8.8x, count => %llu )", cpu, (uint64_t)ocount); - -        if (error.Fail() || ocount != 1) -            return error; +            if (error.Fail() || ocount != 1) +                return error; +        }      }  #endif | 
