1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-23 07:08:19 +00:00

Add missing pthread_setaffinity_np for osx

This commit is contained in:
Gabriele 'matrix' Gristina 2016-02-06 18:00:04 +01:00
parent 7b652239f9
commit e2db8afdf8
4 changed files with 40 additions and 18 deletions

View File

@ -45,6 +45,7 @@
#include <termios.h> #include <termios.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <mach-o/dyld.h> #include <mach-o/dyld.h>
#include <mach/mach.h>
#endif #endif
typedef void *OCL_LIB; typedef void *OCL_LIB;

View File

@ -43,7 +43,18 @@
#define hc_thread_mutex_unlock(m) pthread_mutex_unlock (&m) #define hc_thread_mutex_unlock(m) pthread_mutex_unlock (&m)
#define hc_thread_mutex_init(m) pthread_mutex_init (&m, NULL) #define hc_thread_mutex_init(m) pthread_mutex_init (&m, NULL)
#define hc_thread_mutex_delete(m) pthread_mutex_destroy (&m) #define hc_thread_mutex_delete(m) pthread_mutex_destroy (&m)
#endif
#ifdef OSX
typedef struct cpu_set
{
uint32_t count;
} cpu_set_t;
static inline void CPU_ZERO (cpu_set_t *cs) { cs->count = 0; }
static inline void CPU_SET (int num, cpu_set_t *cs) { cs->count |= (1 << num); }
static inline int CPU_ISSET (int num, cpu_set_t *cs) { return (cs->count & (1 << num)); }
#endif #endif
/** /**

View File

@ -390,11 +390,7 @@ const char *USAGE_BIG[] =
" -c, --segment-size=NUM Size in MB to cache from the wordfile", " -c, --segment-size=NUM Size in MB to cache from the wordfile",
" --bitmap-min=NUM Minimum number of bits allowed for bitmaps", " --bitmap-min=NUM Minimum number of bits allowed for bitmaps",
" --bitmap-max=NUM Maximum number of bits allowed for bitmaps", " --bitmap-max=NUM Maximum number of bits allowed for bitmaps",
#ifndef OSX
" --cpu-affinity=STR Locks to CPU devices, separate with comma", " --cpu-affinity=STR Locks to CPU devices, separate with comma",
#else
" --cpu-affinity=STR Locks to CPU devices, separate with comma (disabled on OSX)",
#endif
" --opencl-platforms=STR OpenCL platforms to use, separate with comma", " --opencl-platforms=STR OpenCL platforms to use, separate with comma",
" -d, --opencl-devices=STR OpenCL devices to use, separate with comma", " -d, --opencl-devices=STR OpenCL devices to use, separate with comma",
" --opencl-device-types=STR OpenCL device-types to use, separate with comma, see references below", " --opencl-device-types=STR OpenCL device-types to use, separate with comma, see references below",
@ -5196,9 +5192,7 @@ int main (int argc, char **argv)
uint increment = INCREMENT; uint increment = INCREMENT;
uint increment_min = INCREMENT_MIN; uint increment_min = INCREMENT_MIN;
uint increment_max = INCREMENT_MAX; uint increment_max = INCREMENT_MAX;
#ifndef OSX
char *cpu_affinity = NULL; char *cpu_affinity = NULL;
#endif
OCL_PTR *ocl = NULL; OCL_PTR *ocl = NULL;
char *opencl_devices = NULL; char *opencl_devices = NULL;
char *opencl_platforms = NULL; char *opencl_platforms = NULL;
@ -5361,9 +5355,7 @@ int main (int argc, char **argv)
{"markov-classic", no_argument, 0, IDX_MARKOV_CLASSIC}, {"markov-classic", no_argument, 0, IDX_MARKOV_CLASSIC},
{"markov-threshold", required_argument, 0, IDX_MARKOV_THRESHOLD}, {"markov-threshold", required_argument, 0, IDX_MARKOV_THRESHOLD},
{"markov-hcstat", required_argument, 0, IDX_MARKOV_HCSTAT}, {"markov-hcstat", required_argument, 0, IDX_MARKOV_HCSTAT},
#ifndef OSX
{"cpu-affinity", required_argument, 0, IDX_CPU_AFFINITY}, {"cpu-affinity", required_argument, 0, IDX_CPU_AFFINITY},
#endif
{"opencl-devices", required_argument, 0, IDX_OPENCL_DEVICES}, {"opencl-devices", required_argument, 0, IDX_OPENCL_DEVICES},
{"opencl-platforms", required_argument, 0, IDX_OPENCL_PLATFORMS}, {"opencl-platforms", required_argument, 0, IDX_OPENCL_PLATFORMS},
{"opencl-device-types", required_argument, 0, IDX_OPENCL_DEVICE_TYPES}, {"opencl-device-types", required_argument, 0, IDX_OPENCL_DEVICE_TYPES},
@ -5672,9 +5664,7 @@ int main (int argc, char **argv)
case IDX_HEX_CHARSET: hex_charset = 1; break; case IDX_HEX_CHARSET: hex_charset = 1; break;
case IDX_HEX_SALT: hex_salt = 1; break; case IDX_HEX_SALT: hex_salt = 1; break;
case IDX_HEX_WORDLIST: hex_wordlist = 1; break; case IDX_HEX_WORDLIST: hex_wordlist = 1; break;
#ifndef OSX
case IDX_CPU_AFFINITY: cpu_affinity = optarg; break; case IDX_CPU_AFFINITY: cpu_affinity = optarg; break;
#endif
case IDX_OPENCL_DEVICES: opencl_devices = optarg; break; case IDX_OPENCL_DEVICES: opencl_devices = optarg; break;
case IDX_OPENCL_PLATFORMS: opencl_platforms = optarg; break; case IDX_OPENCL_PLATFORMS: opencl_platforms = optarg; break;
case IDX_OPENCL_DEVICE_TYPES: case IDX_OPENCL_DEVICE_TYPES:
@ -6423,12 +6413,10 @@ int main (int argc, char **argv)
* cpu affinity * cpu affinity
*/ */
#ifndef OSX
if (cpu_affinity) if (cpu_affinity)
{ {
set_cpu_affinity (cpu_affinity); set_cpu_affinity (cpu_affinity);
} }
#endif
if (rp_gen_seed_chgd == 0) if (rp_gen_seed_chgd == 0)
{ {
@ -6543,9 +6531,7 @@ int main (int argc, char **argv)
logfile_top_uint64 (limit); logfile_top_uint64 (limit);
logfile_top_uint64 (skip); logfile_top_uint64 (skip);
logfile_top_char (separator); logfile_top_char (separator);
#ifndef OSX
logfile_top_string (cpu_affinity); logfile_top_string (cpu_affinity);
#endif
logfile_top_string (custom_charset_1); logfile_top_string (custom_charset_1);
logfile_top_string (custom_charset_2); logfile_top_string (custom_charset_2);
logfile_top_string (custom_charset_3); logfile_top_string (custom_charset_3);

View File

@ -4235,11 +4235,35 @@ void truecrypt_crc32 (const char *filename, u8 keytab[64])
myfree (buf); myfree (buf);
} }
#ifdef OSX
int pthread_setaffinity_np (pthread_t thread, size_t cpu_size, cpu_set_t *cpu_set)
{
int core;
for (core = 0; core < (8 * (int)cpu_size); core++)
if (CPU_ISSET(core, cpu_set)) break;
thread_affinity_policy_data_t policy = { core };
const int rc = thread_policy_set (pthread_mach_thread_np (thread), THREAD_AFFINITY_POLICY, (thread_policy_t) &policy, 1);
if (data.quiet == 0)
{
if (rc != KERN_SUCCESS)
{
log_error ("ERROR: %s : %d", "thread_policy_set()", rc);
}
}
return rc;
}
#endif
void set_cpu_affinity (char *cpu_affinity) void set_cpu_affinity (char *cpu_affinity)
{ {
#ifdef WIN #ifdef WIN
DWORD_PTR aff_mask = 0; DWORD_PTR aff_mask = 0;
#elif LINUX #elif _POSIX
cpu_set_t cpuset; cpu_set_t cpuset;
CPU_ZERO (&cpuset); CPU_ZERO (&cpuset);
#endif #endif
@ -4258,7 +4282,7 @@ void set_cpu_affinity (char *cpu_affinity)
{ {
#ifdef WIN #ifdef WIN
aff_mask = 0; aff_mask = 0;
#elif LINUX #elif _POSIX
CPU_ZERO (&cpuset); CPU_ZERO (&cpuset);
#endif #endif
@ -4274,7 +4298,7 @@ void set_cpu_affinity (char *cpu_affinity)
#ifdef WIN #ifdef WIN
aff_mask |= 1 << (cpu_id - 1); aff_mask |= 1 << (cpu_id - 1);
#elif LINUX #elif _POSIX
CPU_SET ((cpu_id - 1), &cpuset); CPU_SET ((cpu_id - 1), &cpuset);
#endif #endif
@ -4286,7 +4310,7 @@ void set_cpu_affinity (char *cpu_affinity)
#ifdef WIN #ifdef WIN
SetProcessAffinityMask (GetCurrentProcess (), aff_mask); SetProcessAffinityMask (GetCurrentProcess (), aff_mask);
SetThreadAffinityMask (GetCurrentThread (), aff_mask); SetThreadAffinityMask (GetCurrentThread (), aff_mask);
#elif LINUX #elif _POSIX
pthread_t thread = pthread_self (); pthread_t thread = pthread_self ();
pthread_setaffinity_np (thread, sizeof (cpu_set_t), &cpuset); pthread_setaffinity_np (thread, sizeof (cpu_set_t), &cpuset);
#endif #endif