X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flightning%2Flib%2Fjit_disasm.c;h=90d90b0f192477f76631b96fe88abb54e096fb14;hb=016c6e93f6db684211f5c8b05433cb500715ba50;hp=856a70bbeeafdcd21cf60c8aa818d01655c3b9a4;hpb=ba3814c189d3bd2332b66fb6c633a7d028e618fe;p=pcsx_rearmed.git diff --git a/deps/lightning/lib/jit_disasm.c b/deps/lightning/lib/jit_disasm.c index 856a70bb..90d90b0f 100644 --- a/deps/lightning/lib/jit_disasm.c +++ b/deps/lightning/lib/jit_disasm.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2019 Free Software Foundation, Inc. + * Copyright (C) 2012-2023 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -54,13 +54,13 @@ static FILE *disasm_stream; #endif #if BINUTILS_2_38 -static int fprintf_styled(void *, enum disassembler_style, const char* fmt, ...) +static int fprintf_styled(void * stream, enum disassembler_style style, const char* fmt, ...) { va_list args; int r; va_start(args, fmt); - r = vprintf(fmt, args); + r = vfprintf(disasm_stream, fmt, args); va_end(args); return r; @@ -71,9 +71,9 @@ static int fprintf_styled(void *, enum disassembler_style, const char* fmt, ...) * Implementation */ void -jit_init_debug(const char *progname) +jit_init_debug(const char *progname, FILE *stream) { - jit_init_print(); + jit_init_print(stream); #if DISASSEMBLER bfd_init(); @@ -89,7 +89,7 @@ jit_init_debug(const char *progname) bfd_check_format(disasm_bfd, bfd_object); bfd_check_format(disasm_bfd, bfd_archive); if (!disasm_stream) - disasm_stream = stdout; + disasm_stream = stream; #if BINUTILS_2_38 INIT_DISASSEMBLE_INFO(disasm_info, disasm_stream, fprintf, fprintf_styled); @@ -256,7 +256,7 @@ disasm_print_address(bfd_vma addr, struct disassemble_info *info) int line; char buffer[address_buffer_length]; - sprintf(buffer, address_buffer_format, (long long)addr); + sprintf(buffer, address_buffer_format, addr); (*info->fprintf_func)(info->stream, "0x%s", buffer); # define _jit disasm_jit @@ -319,7 +319,10 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code, jit_int32_t length) char *name, *old_name; char *file, *old_file; int line, old_line; -#if __arm__ +#if __riscv && __WORDSIZE == 64 + jit_word_t *vector; + jit_int32_t offset; +#elif __arm__ jit_int32_t offset; jit_bool_t data_info; jit_int32_t data_offset; @@ -332,6 +335,10 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code, jit_int32_t length) jit_uword_t prevw; #endif +#if __riscv && __WORDSIZE == 64 + end -= _jitc->consts.hash.count * 8; +#endif + #if __arm__ data_info = _jitc && _jitc->data_info.ptr; data_offset = 0; @@ -354,7 +361,7 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code, jit_int32_t length) } while (node && (jit_uword_t)(prevw + node->offset) == (jit_uword_t)pc) { jit_print_node(node); - fputc('\n', stdout); + fputc('\n', disasm_stream); prevw += node->offset; node = node->next; } @@ -399,11 +406,22 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code, jit_int32_t length) old_line = line; } - bytes = sprintf(buffer, address_buffer_format, (long long)pc); + bytes = sprintf(buffer, address_buffer_format, pc); (*disasm_info.fprintf_func)(disasm_stream, "%*c0x%s\t", 16 - bytes, ' ', buffer); pc += (*disasm_print)(pc, &disasm_info); putc('\n', disasm_stream); } +#if __riscv && __WORDSIZE == 64 + for (vector = (jit_word_t *)end, offset = 0; + offset < _jitc->consts.hash.count; offset++) { + bytes = sprintf(buffer, address_buffer_format, + (long long)end + offset * sizeof(jit_word_t)); + (*disasm_info.fprintf_func)(disasm_stream, + "%*c0x%s\t.quad\t0x%016lx\t# (%ld)\n", + 16 - bytes, ' ', buffer, + vector[offset], vector[offset]); + } +#endif } #endif