mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-27 09:12:32 +00:00
a4115cfea9
The kernel-agnostic 'Trace::timestamp' function for arm_64 executes the 'mrs %0, pmccntr_el0' instruction, which is not permitted for user-level programs on Linux. This patch shadows the generic timestamp.h header with dummy that returns zero. This return value prompts the timeout framework to disable the interpolation of time based on timestamps. This avoid the illegal-instruction abort but comes with two llimitations: First, time measurements are effectlively limited to a granulariry of 1 millisecond (deliberately constrained by the timer driver). The quirk is applied when using the base-linux API. Should a generic application (that uses the base API only) call 'Trace::timestamp' directly, the illegal instruction is executed. Issue #4136
35 lines
900 B
C++
35 lines
900 B
C++
/*
|
|
* \brief Trace timestamp
|
|
* \author Norman Feske
|
|
* \date 2021-05-01
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2021 Genode Labs GmbH
|
|
*
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
* under the terms of the GNU Affero General Public License version 3.
|
|
*/
|
|
|
|
#ifndef _INCLUDE__SPEC__ARM_64__TRACE__TIMESTAMP_H_
|
|
#define _INCLUDE__SPEC__ARM_64__TRACE__TIMESTAMP_H_
|
|
|
|
#include <base/fixed_stdint.h>
|
|
|
|
namespace Genode { namespace Trace {
|
|
|
|
typedef uint64_t Timestamp;
|
|
|
|
/*
|
|
* In Linux/AARCH64, the 'mrs' instruction cannot be executed in user land.
|
|
* It triggers the abort of the program with an illegal-instruction
|
|
* exception.
|
|
*
|
|
* By returning 0, we discharge the timestamp-based interpolation of
|
|
* 'Timer::Connection::curr_time', falling back to a precision of 1 ms.
|
|
*/
|
|
inline Timestamp timestamp() { return 0; }
|
|
} }
|
|
|
|
#endif /* _INCLUDE__SPEC__ARM_64__TRACE__TIMESTAMP_H_ */
|