new --software-aes command line flag

Used to avoid AES-NI. Useful for working around a bug where
valgrind seems to break on some VMs
This commit is contained in:
moneromooo-monero 2016-02-06 17:05:07 +00:00
parent 5feebb4d87
commit 2a6fcc514c
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3
5 changed files with 29 additions and 1 deletions

View File

@ -78,6 +78,8 @@ enum {
HASH_DATA_AREA = 136
};
void force_software_aes(bool sw);
void cn_fast_hash(const void *data, size_t length, char *hash);
void cn_slow_hash(const void *data, size_t length, char *hash);

View File

@ -37,6 +37,13 @@
#include "hash-ops.h"
#include "oaes_lib.h"
static bool sw_aes = false;
void force_software_aes(bool sw)
{
sw_aes = sw;
}
#if defined(__x86_64__) || (defined(_MSC_VER) && defined(_WIN64))
// Optimised code below, uses x86-specific intrinsics, SSE2, AES-NI
// Fall back to more portable code is down at the bottom
@ -509,7 +516,7 @@ void cn_slow_hash(const void *data, size_t length, char *hash)
size_t i, j;
uint64_t *p = NULL;
oaes_ctx *aes_ctx;
int useAes = check_aes_hw();
int useAes = !sw_aes && check_aes_hw();
static void (*const extra_hashes[4])(const void *, size_t, char *) =
{

View File

@ -59,6 +59,11 @@ namespace daemon_args
"os-version"
, "OS for which this executable was compiled"
};
const command_line::arg_descriptor<int> arg_software_aes = {
"software-aes"
, ""
, false
};
} // namespace daemon_args
#endif // DAEMON_COMMAND_LINE_ARGS_H

View File

@ -81,6 +81,7 @@ int main(int argc, char const * argv[])
bf::path default_log = default_data_dir / std::string(CRYPTONOTE_NAME ".log");
command_line::add_arg(core_settings, daemon_args::arg_log_file, default_log.string());
command_line::add_arg(core_settings, daemon_args::arg_log_level);
command_line::add_arg(core_settings, daemon_args::arg_software_aes);
daemonizer::init_options(hidden_options, visible_options);
daemonize::t_executor::init_options(core_settings);
@ -240,6 +241,12 @@ int main(int argc, char const * argv[])
}
}
if (command_line::has_arg(vm, daemon_args::arg_software_aes))
{
LOG_PRINT_L1("Forcing software AES");
crypto::force_software_aes(true);
}
// log_file_path
// default: <data_dir>/<CRYPTONOTE_NAME>.log
// if log-file argument given:

View File

@ -95,6 +95,7 @@ namespace
const command_line::arg_descriptor<bool> arg_testnet = {"testnet", sw::tr("For testnet. Daemon must also be launched with --testnet flag"), false};
const command_line::arg_descriptor<bool> arg_restricted = {"restricted-rpc", sw::tr("Restricts RPC to view-only commands"), false};
const command_line::arg_descriptor<bool> arg_trusted_daemon = {"trusted-daemon", sw::tr("Enable commands which rely on a trusted daemon"), false};
const command_line::arg_descriptor<bool> arg_software_aes = {"software-aes", "", false};
const command_line::arg_descriptor< std::vector<std::string> > arg_command = {"command", ""};
@ -2453,6 +2454,7 @@ int main(int argc, char* argv[])
command_line::add_arg(desc_params, arg_daemon_port);
command_line::add_arg(desc_params, arg_command);
command_line::add_arg(desc_params, arg_log_level);
command_line::add_arg(desc_params, arg_software_aes);
bf::path default_log {log_space::log_singletone::get_default_log_folder()};
std::string log_file_name = log_space::log_singletone::get_default_log_file();
@ -2539,6 +2541,11 @@ int main(int argc, char* argv[])
message_writer(epee::log_space::console_color_white, true) << "Monero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")";
if (command_line::has_arg(vm, arg_software_aes)) {
LOG_PRINT_L1("Forcing software AES");
crypto::force_software_aes(true);
}
if(command_line::has_arg(vm, arg_log_level))
log_level = command_line::get_arg(vm, arg_log_level);
LOG_PRINT_L0("Setting log level = " << log_level);