forked from M-Labs/artiq
runtime: support for RTIO logging
This commit is contained in:
parent
ba6c527819
commit
50a463a6fd
|
@ -71,7 +71,7 @@ void analyzer_start(void)
|
|||
analyzer_header.sent_bytes = analyzer_header.total_byte_count;
|
||||
|
||||
analyzer_header.overflow_occured = rtio_analyzer_message_encoder_overflow_read();
|
||||
analyzer_header.log_channel = 0;
|
||||
analyzer_header.log_channel = CONFIG_RTIO_LOG_CHANNEL;
|
||||
analyzer_header.dds_channel = CONFIG_RTIO_DDS_CHANNEL;
|
||||
#ifdef DDS_ONEHOT_SEL
|
||||
analyzer_header.dds_onehot_sel = 1;
|
||||
|
|
|
@ -107,6 +107,7 @@ static const struct symbol runtime_exports[] = {
|
|||
|
||||
/* direct syscalls */
|
||||
{"rtio_get_counter", &rtio_get_counter},
|
||||
{"rtio_log", &rtio_log},
|
||||
|
||||
{"ttl_set_o", &ttl_set_o},
|
||||
{"ttl_set_oe", &ttl_set_oe},
|
||||
|
@ -167,13 +168,15 @@ int fprintf(FILE *stream, const char *fmt, ...)
|
|||
}
|
||||
|
||||
/* called by libunwind */
|
||||
int dladdr (const void *address, Dl_info *info) {
|
||||
int dladdr (const void *address, Dl_info *info)
|
||||
{
|
||||
/* we don't try to resolve names */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* called by libunwind */
|
||||
int dl_iterate_phdr (int (*callback) (struct dl_phdr_info *, size_t, void *), void *data) {
|
||||
int dl_iterate_phdr (int (*callback)(struct dl_phdr_info *, size_t, void *), void *data)
|
||||
{
|
||||
Elf32_Ehdr *ehdr;
|
||||
struct dl_phdr_info phdr_info;
|
||||
int retval;
|
||||
|
@ -200,7 +203,8 @@ int dl_iterate_phdr (int (*callback) (struct dl_phdr_info *, size_t, void *), vo
|
|||
return retval;
|
||||
}
|
||||
|
||||
static Elf32_Addr resolve_runtime_export(const char *name) {
|
||||
static Elf32_Addr resolve_runtime_export(const char *name)
|
||||
{
|
||||
const struct symbol *sym = runtime_exports;
|
||||
while(sym->name) {
|
||||
if(!strcmp(sym->name, name))
|
||||
|
|
|
@ -38,3 +38,32 @@ void rtio_process_exceptional_status(int status, long long int timestamp, int ch
|
|||
timestamp, channel, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void rtio_log(long long int timestamp, char *message)
|
||||
{
|
||||
unsigned int word;
|
||||
int i;
|
||||
|
||||
rtio_chan_sel_write(CONFIG_RTIO_LOG_CHANNEL);
|
||||
rtio_o_timestamp_write(timestamp);
|
||||
|
||||
i = 0;
|
||||
word = 0;
|
||||
while(1) {
|
||||
word >>= 8;
|
||||
word |= *message << 24;
|
||||
if(*message == 0) {
|
||||
rtio_o_data_write(word);
|
||||
rtio_o_we_write(1);
|
||||
break;
|
||||
}
|
||||
message++;
|
||||
i++;
|
||||
if(i == 4) {
|
||||
rtio_o_data_write(word);
|
||||
rtio_o_we_write(1);
|
||||
word = 0;
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
void rtio_init(void);
|
||||
long long int rtio_get_counter(void);
|
||||
void rtio_process_exceptional_status(int status, long long int timestamp, int channel);
|
||||
void rtio_log(long long int timestamp, char *message);
|
||||
|
||||
static inline void rtio_write_and_process_status(long long int timestamp, int channel)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue