1 //
2 // Copyright (c) 2010-2025 Antmicro
3 // Copyright (c) 2011-2015 Realtime Embedded
4 //
5 // This file is licensed under MIT License.
6 // Full license text is available in 'licenses/MIT.txt' file.
7 //
8 
9 #include <stdlib.h>
10 #include <stdint.h>
11 #include "include/renode_imports.h"
12 #include "../tlib/include/unwind.h"
13 
14 typedef void (*translation_block_find_slow_handler)(uint64_t pc);
15 translation_block_find_slow_handler on_translation_block_find_slow;
16 
renode_attach_log_translation_block_fetch(void (handler)(uint64_t))17 void renode_attach_log_translation_block_fetch(void (handler)(uint64_t))
18 {
19     on_translation_block_find_slow = handler;
20 }
21 
22 EXC_VOID_1(renode_attach_log_translation_block_fetch, translation_block_find_slow_handler, handler);
23 
tlib_on_translation_block_find_slow(uint64_t pc)24 void tlib_on_translation_block_find_slow(uint64_t pc)
25 {
26   if(on_translation_block_find_slow)
27   {
28     (*on_translation_block_find_slow)(pc);
29   }
30 }
31 
EXTERNAL_AS(void,ReportAbort,tlib_abort,charptr)32 EXTERNAL_AS(void, ReportAbort, tlib_abort, charptr)
33 EXTERNAL_AS(void, LogAsCpu, tlib_log, int32_t, charptr)
34 
35 EXTERNAL_AS(uint64_t, ReadByteFromBus, tlib_read_byte, uint64_t, uint64_t)
36 EXTERNAL_AS(uint64_t, ReadWordFromBus, tlib_read_word, uint64_t, uint64_t)
37 EXTERNAL_AS(uint64_t, ReadDoubleWordFromBus, tlib_read_double_word, uint64_t, uint64_t)
38 EXTERNAL_AS(uint64_t, ReadQuadWordFromBus, tlib_read_quad_word, uint64_t, uint64_t)
39 
40 EXTERNAL_AS(void, WriteByteToBus, tlib_write_byte, uint64_t, uint64_t, uint64_t)
41 EXTERNAL_AS(void, WriteWordToBus, tlib_write_word, uint64_t, uint64_t, uint64_t)
42 EXTERNAL_AS(void, WriteDoubleWordToBus, tlib_write_double_word, uint64_t, uint64_t, uint64_t)
43 EXTERNAL_AS(void, WriteQuadWordToBus, tlib_write_quad_word, uint64_t, uint64_t, uint64_t)
44 
45 EXTERNAL_AS(uint32_t, OnBlockBegin, tlib_on_block_begin, uint64_t, uint32_t)
46 
47 EXTERNAL_AS(void, OnBlockFinished, tlib_on_block_finished, uint64_t, uint32_t)
48 
49 EXTERNAL_AS(voidptr, Allocate, tlib_allocate, voidptr)
50 void *tlib_malloc(size_t size)
51 {
52   return tlib_allocate((void *)size);
53 }
EXTERNAL_AS(voidptr,Reallocate,tlib_reallocate,voidptr,voidptr)54 EXTERNAL_AS(voidptr, Reallocate, tlib_reallocate, voidptr, voidptr)
55 void *tlib_realloc(void *ptr, size_t size)
56 {
57   return tlib_reallocate(ptr, (void *)size);
58 }
EXTERNAL_AS(void,Free,tlib_free,voidptr)59 EXTERNAL_AS(void, Free, tlib_free, voidptr)
60 EXTERNAL_AS(void, OnTranslationCacheSizeChange, tlib_on_translation_cache_size_change, uint64_t)
61 
62 EXTERNAL(void, invalidate_tb_in_other_cpus, voidptr, voidptr)
63 void tlib_invalidate_tb_in_other_cpus(uintptr_t start, uintptr_t end)
64 {
65   invalidate_tb_in_other_cpus((void*)start, (void*)end);
66 }
67 
68 EXTERNAL_AS(uint32_t, GetMpIndex, tlib_get_mp_index)
69 EXTERNAL_AS(void, LogDisassembly, tlib_on_block_translation, uint64_t, uint32_t, uint32_t)
70 EXTERNAL_AS(void, OnInterruptBegin, tlib_on_interrupt_begin, uint64_t)
71 EXTERNAL_AS(void, OnInterruptEnd, tlib_on_interrupt_end, uint64_t)
72 EXTERNAL_AS(void, OnMemoryAccess, tlib_on_memory_access, uint64_t, uint32_t, uint64_t, uint64_t)
73 EXTERNAL_AS(uint32_t, IsInDebugMode, tlib_is_in_debug_mode)
74 EXTERNAL_AS(void, MmuFaultExternalHandler, tlib_mmu_fault_external_handler, uint64_t, int32_t, int32_t)
75 EXTERNAL_AS(void, OnStackChange, tlib_profiler_announce_stack_change, uint64_t, uint64_t, uint64_t, int32_t)
76 EXTERNAL_AS(void, OnContextChange, tlib_profiler_announce_context_change, uint64_t)
77 EXTERNAL_AS(void, OnMassBroadcastDirty, tlib_mass_broadcast_dirty, voidptr, int32_t)
78 EXTERNAL_AS(voidptr, GetDirty, tlib_get_dirty_addresses_list, voidptr)
79 EXTERNAL_AS(void, OnWfiStateChange, tlib_on_wfi_state_change, int32_t)
80 EXTERNAL_AS(uint32_t, IsMemoryDisabled, tlib_is_memory_disabled, uint64_t, uint64_t)
81