From: pwpiwi Date: Wed, 31 Jan 2018 17:31:51 +0000 (+0100) Subject: add force_align_arg_pointer attribute to all callback functions X-Git-Tag: v3.1.0~76^2 X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/refs/pull/558/head add force_align_arg_pointer attribute to all callback functions * inspired by issue #404 and respective fix PR #538 * possible fix for mysterious crashes, e.g. issue #497 and http://www.proxmark.org/forum/viewtopic.php?id=5388 --- diff --git a/client/cmdhfmfhard.c b/client/cmdhfmfhard.c index 69ad898d..cf19436c 100644 --- a/client/cmdhfmfhard.c +++ b/client/cmdhfmfhard.c @@ -1158,7 +1158,13 @@ static bool timeout(void) } -static void *check_for_BitFlipProperties_thread(void *args) +static void +#ifdef __has_attribute +#if __has_attribute(force_align_arg_pointer) +__attribute__((force_align_arg_pointer)) +#endif +#endif +*check_for_BitFlipProperties_thread(void *args) { uint8_t first_byte = ((uint8_t *)args)[0]; uint8_t last_byte = ((uint8_t *)args)[1]; @@ -1906,7 +1912,13 @@ static void init_book_of_work(void) } -static void *generate_candidates_worker_thread(void *args) +static void +#ifdef __has_attribute +#if __has_attribute(force_align_arg_pointer) +__attribute__((force_align_arg_pointer)) +#endif +#endif +*generate_candidates_worker_thread(void *args) { uint16_t *sum_args = (uint16_t *)args; uint16_t sum_a0 = sums[sum_args[0]]; diff --git a/client/mifarehost.c b/client/mifarehost.c index d204bf12..dd656ee1 100644 --- a/client/mifarehost.c +++ b/client/mifarehost.c @@ -295,7 +295,13 @@ typedef // wrapper function for multi-threaded lfsr_recovery32 -void* nested_worker_thread(void *arg) +void +#ifdef __has_attribute +#if __has_attribute(force_align_arg_pointer) +__attribute__((force_align_arg_pointer)) +#endif +#endif +*nested_worker_thread(void *arg) { struct Crypto1State *p1; StateList_t *statelist = arg; @@ -309,6 +315,7 @@ void* nested_worker_thread(void *arg) return statelist->head.slhead; } + int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo, uint8_t trgKeyType, uint8_t *resultKey, bool calibrate) { uint16_t i; diff --git a/client/proxmark3.c b/client/proxmark3.c index 99ba9fba..95dd7cb9 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -67,7 +67,14 @@ struct receiver_arg { byte_t rx[sizeof(UsbCommand)]; byte_t* prx = rx; -static void *uart_receiver(void *targ) { + +static void +#ifdef __has_attribute +#if __has_attribute(force_align_arg_pointer) +__attribute__((force_align_arg_pointer)) +#endif +#endif +*uart_receiver(void *targ) { struct receiver_arg *arg = (struct receiver_arg*)targ; size_t rxlen; @@ -95,7 +102,13 @@ static void *uart_receiver(void *targ) { } -void main_loop(char *script_cmds_file, char *script_cmd, bool usb_present) { +void +#ifdef __has_attribute +#if __has_attribute(force_align_arg_pointer) +__attribute__((force_align_arg_pointer)) +#endif +#endif +main_loop(char *script_cmds_file, char *script_cmd, bool usb_present) { struct receiver_arg rarg; char *cmd = NULL; pthread_t reader_thread;