mirror of
https://github.com/cuberite/polarssl.git
synced 2025-09-08 14:49:59 -04:00
Merge pull request #7386 from daverodgman/timing_alignment-2.28
Backport 2.28 - Timing alignment
This commit is contained in:
commit
83faeca597
@ -17,6 +17,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include "mbedtls/platform.h"
|
#include "mbedtls/platform.h"
|
||||||
@ -231,17 +233,20 @@ volatile int mbedtls_timing_alarmed = 0;
|
|||||||
|
|
||||||
unsigned long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val, int reset)
|
unsigned long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val, int reset)
|
||||||
{
|
{
|
||||||
struct _hr_time *t = (struct _hr_time *) val;
|
struct _hr_time t;
|
||||||
|
|
||||||
if (reset) {
|
if (reset) {
|
||||||
QueryPerformanceCounter(&t->start);
|
QueryPerformanceCounter(&t.start);
|
||||||
|
memcpy(val, &t, sizeof(struct _hr_time));
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
unsigned long delta;
|
unsigned long delta;
|
||||||
LARGE_INTEGER now, hfreq;
|
LARGE_INTEGER now, hfreq;
|
||||||
|
/* We can't safely cast val because it may not be aligned, so use memcpy */
|
||||||
|
memcpy(&t, val, sizeof(struct _hr_time));
|
||||||
QueryPerformanceCounter(&now);
|
QueryPerformanceCounter(&now);
|
||||||
QueryPerformanceFrequency(&hfreq);
|
QueryPerformanceFrequency(&hfreq);
|
||||||
delta = (unsigned long) ((now.QuadPart - t->start.QuadPart) * 1000ul
|
delta = (unsigned long) ((now.QuadPart - t.start.QuadPart) * 1000ul
|
||||||
/ hfreq.QuadPart);
|
/ hfreq.QuadPart);
|
||||||
return delta;
|
return delta;
|
||||||
}
|
}
|
||||||
@ -277,17 +282,20 @@ void mbedtls_set_alarm(int seconds)
|
|||||||
|
|
||||||
unsigned long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val, int reset)
|
unsigned long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val, int reset)
|
||||||
{
|
{
|
||||||
struct _hr_time *t = (struct _hr_time *) val;
|
struct _hr_time t;
|
||||||
|
|
||||||
if (reset) {
|
if (reset) {
|
||||||
gettimeofday(&t->start, NULL);
|
gettimeofday(&t.start, NULL);
|
||||||
|
memcpy(val, &t, sizeof(struct _hr_time));
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
unsigned long delta;
|
unsigned long delta;
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
|
/* We can't safely cast val because it may not be aligned, so use memcpy */
|
||||||
|
memcpy(&t, val, sizeof(struct _hr_time));
|
||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, NULL);
|
||||||
delta = (now.tv_sec - t->start.tv_sec) * 1000ul
|
delta = (now.tv_sec - t.start.tv_sec) * 1000ul
|
||||||
+ (now.tv_usec - t->start.tv_usec) / 1000;
|
+ (now.tv_usec - t.start.tv_usec) / 1000;
|
||||||
return delta;
|
return delta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,20 @@ void timing_hardclock()
|
|||||||
void timing_get_timer()
|
void timing_get_timer()
|
||||||
{
|
{
|
||||||
struct mbedtls_timing_hr_time time;
|
struct mbedtls_timing_hr_time time;
|
||||||
|
|
||||||
|
memset(&time, 0, sizeof(time));
|
||||||
|
|
||||||
(void) mbedtls_timing_get_timer(&time, 1);
|
(void) mbedtls_timing_get_timer(&time, 1);
|
||||||
|
|
||||||
|
/* Check that a non-zero time was written back */
|
||||||
|
int all_zero = 1;
|
||||||
|
for (size_t i = 0; i < sizeof(time); i++) {
|
||||||
|
all_zero &= ((unsigned char *) &time)[i] == 0;
|
||||||
|
}
|
||||||
|
TEST_ASSERT(!all_zero);
|
||||||
|
|
||||||
(void) mbedtls_timing_get_timer(&time, 0);
|
(void) mbedtls_timing_get_timer(&time, 0);
|
||||||
|
|
||||||
/* This goto is added to avoid warnings from the generated code. */
|
/* This goto is added to avoid warnings from the generated code. */
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user