Skip to content

Commit 074c08b

Browse files
authored
Merge pull request #2459 from stevenengler/fix-shim-log
Replace shim logger's usage of `gmtime_r()`
2 parents 439e467 + 0d5ee65 commit 074c08b

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

src/lib/shim/shim_logger.c

+11-7
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,18 @@ typedef struct _ShimLogger {
2222
} ShimLogger;
2323

2424
static size_t _simulation_nanos_string(char* dst, size_t size) {
25-
uint64_t simulation_nanos = shim_sys_get_simtime_nanos();
2625
const long nanos_per_sec = 1000000000l;
27-
time_t seconds = simulation_nanos / nanos_per_sec;
28-
uint64_t nanos = simulation_nanos % nanos_per_sec;
29-
struct tm tm;
30-
gmtime_r(&seconds, &tm);
31-
return snprintf(
32-
dst, size, "%02d:%02d:%02d.%09" PRIu64, tm.tm_hour, tm.tm_min, tm.tm_sec, nanos);
26+
27+
uint64_t nanos = shim_sys_get_simtime_nanos();
28+
uint32_t seconds = nanos / nanos_per_sec;
29+
nanos = nanos % nanos_per_sec;
30+
uint32_t mins = seconds / 60;
31+
seconds = seconds % 60;
32+
uint32_t hours = mins / 60;
33+
mins = mins % 60;
34+
35+
return snprintf(dst, size, "%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32 ".%09" PRIu64, hours, mins,
36+
seconds, nanos);
3337
}
3438

3539
void shimlogger_log(Logger* base, LogLevel level, const char* fileName, const char* functionName,

src/lib/shim/shim_sys.c

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
#include <time.h>
1313

1414
#include "lib/logger/logger.h"
15+
#include "lib/shadow-shim-helper-rs/shim_helper.h"
1516
#include "lib/shim/shim.h"
1617
#include "lib/shim/shim_sys.h"
17-
#include "main/core/support/definitions.h" // for SIMTIME definitions
1818
#include "main/host/syscall_numbers.h"
1919

2020
static CEmulatedTime _shim_sys_get_time() {
@@ -28,7 +28,10 @@ static CEmulatedTime _shim_sys_get_time() {
2828
return shimshmem_getEmulatedTime(mem);
2929
}
3030

31-
uint64_t shim_sys_get_simtime_nanos() { return _shim_sys_get_time() / SIMTIME_ONE_NANOSECOND; }
31+
uint64_t shim_sys_get_simtime_nanos() {
32+
return emutime_sub_emutime(_shim_sys_get_time(), EMUTIME_SIMULATION_START) /
33+
SIMTIME_ONE_NANOSECOND;
34+
}
3235

3336
static CSimulationTime _shim_sys_latency_for_syscall(long n) {
3437
switch (n) {

0 commit comments

Comments
 (0)