From: Mike Frysinger <vapier@gentoo.org>
To: Michael Eager <eager@eagercon.com>
Cc: Joel Sherrill <joel@rtems.org>,
gdb@sourceware.org, Newlib <newlib@sourceware.org>
Subject: Re: Microblaze libgloss and gdb simulator
Date: Sun, 25 Apr 2021 13:21:58 -0400 [thread overview]
Message-ID: <YIWlNq+MOYipFiZH@vapier> (raw)
In-Reply-To: <YIOmWgu87/SobzBI@vapier>
On 24 Apr 2021 01:02, Mike Frysinger via Gdb wrote:
> On 22 Apr 2021 21:19, Mike Frysinger via Gdb wrote:
> > On 22 Apr 2021 19:55, Joel Sherrill wrote:
> > > On Thu, Apr 22, 2021, 7:27 PM Mike Frysinger wrote:
> > > > ignoring that, the microblaze sim doesn't have syscall support hooked up.
> > > > so it's only a CPU simulator atm.
> > >
> > > So it has no output whatsoever? Does it get used for anything?
> >
> > afaict, correct. the most basic sims just do CPU level stuff and then have
> > their state inspected, or communicate pass/fail via exit status or abort.
> > this behavior actually isn't that rare ... it's where most sims start.
> >
> > > We are resurrecting some old work that I did for a Microblaze port. I did
> > > write an inbyte() and outbyte() which would normally come from the xil
> > > library. But I don't have any idea how I figured out there was a uart at a
> > > particular address. I swear I had it working to print then but now it
> > > faults after the first instruction.
> > >
> > > Is there any known good executable for it? Even just seeing it operate with
> > > a linked executable that had a crt0 and did something would be helpful at
> > > this point.
> >
> > ftr, i've never worked on microblaze. i'm just reading the code and poking
> > the toolchain :).
> >
> > getting i/o (or maybe just o) support into the sim shouldn't be terribly hard.
> > we could even do the normal libgloss syscalls. the important things we need to
> > know are:
> > * how does outbyte work ? is it writing to MMIO UARTs, or something else ?
> > * is there an interrupt or exception or specific insn that microblaze uses to
> > trigger the hypervisor/monitor/whatever ? if so, should be possible to wire
> > that up in the microblaze port. my reading of libgloss/microblaze/ isn't
> > picking out anything interesting, but i'm by no means an expert here.
> >
> > if you can figure out those bits, happy to help on the sim side.
>
> here's wiring up the syscall path, but it's unclear whether we should do this
> without changes landing in libgloss first.
Michael: what do you think of wiring up the libgloss syscalls for microblaze
via the brki insn ? is there any prior art in this space for microblaze ?
i wouldn't want to try an allocate syscall space that's already used.
-mike
> --- a/sim/common/gennltvals.py
> +++ b/sim/common/gennltvals.py
> @@ -66,6 +66,7 @@ TARGETS = {
> 'm32c',
> 'm32r',
> 'mcore',
> + 'microblaze',
> 'mn10200',
> 'mn10300',
> 'moxie',
> --- a/sim/common/nltvals.def
> +++ b/sim/common/nltvals.def
> @@ -484,6 +484,37 @@
> /* end mcore sys target macros */
> #endif
> #endif
> +#ifdef NL_TARGET_microblaze
> +#ifdef sys_defs
> +/* from syscall.h */
> +/* begin microblaze sys target macros */
> + { "SYS_argc", 22 },
> + { "SYS_argn", 24 },
> + { "SYS_argnlen", 23 },
> + { "SYS_argv", 13 },
> + { "SYS_argvlen", 12 },
> + { "SYS_chdir", 14 },
> + { "SYS_chmod", 16 },
> + { "SYS_close", 3 },
> + { "SYS_exit", 1 },
> + { "SYS_fstat", 10 },
> + { "SYS_getpid", 8 },
> + { "SYS_gettimeofday", 19 },
> + { "SYS_kill", 9 },
> + { "SYS_link", 21 },
> + { "SYS_lseek", 6 },
> + { "SYS_open", 2 },
> + { "SYS_read", 4 },
> + { "SYS_reconfig", 25 },
> + { "SYS_stat", 15 },
> + { "SYS_time", 18 },
> + { "SYS_times", 20 },
> + { "SYS_unlink", 7 },
> + { "SYS_utime", 17 },
> + { "SYS_write", 5 },
> +/* end microblaze sys target macros */
> +#endif
> +#endif
> #ifdef NL_TARGET_mn10200
> #ifdef sys_defs
> /* from syscall.h */
> --- a/sim/microblaze/Makefile.in
> +++ b/sim/microblaze/Makefile.in
> @@ -15,6 +15,9 @@
> # You should have received a copy of the GNU General Public License
> # along with this program. If not, see <http://www.gnu.org/licenses/>.
>
> +# This selects the bfin newlib/libgloss syscall definitions.
> +NL_TARGET = -DNL_TARGET_microblaze
> +
> ## COMMON_PRE_CONFIG_FRAG
>
> SIM_OBJS = \
> diff --git a/sim/microblaze/interp.c b/sim/microblaze/interp.c
> index 2bd067c6dc51..ed29d020efbc 100644
> --- a/sim/microblaze/interp.c
> +++ b/sim/microblaze/interp.c
> @@ -28,6 +28,7 @@
>
> #include "sim-main.h"
> #include "sim-options.h"
> +#include "sim-syscall.h"
>
> #include "microblaze-dis.h"
>
> @@ -162,11 +163,14 @@ sim_engine_run (SIM_DESC sd,
> delay_slot_enable = 0;
> branch_taken = 0;
> if (op == microblaze_brk)
> - sim_engine_halt (sd, NULL, NULL, NULL_CIA, sim_stopped, SIM_SIGTRAP);
> + {
> + sim_engine_halt (sd, NULL, NULL, NULL_CIA, sim_stopped, SIM_SIGTRAP);
> + }
> else if (inst == MICROBLAZE_HALT_INST)
> {
> insts += 1;
> bonus_cycles++;
> + TRACE_INSN (cpu, "HALT (%i)", RETREG);
> sim_engine_halt (sd, NULL, NULL, NULL_CIA, sim_exited, RETREG);
> }
> else
> @@ -175,6 +179,7 @@ sim_engine_run (SIM_DESC sd,
> {
> #define INSTRUCTION(NAME, OPCODE, TYPE, ACTION) \
> case NAME: \
> + TRACE_INSN (cpu, #NAME); \
> ACTION; \
> break;
> #include "microblaze.isa"
> @@ -284,8 +289,18 @@ sim_engine_run (SIM_DESC sd,
> IMM_ENABLE = 0;
> }
> else
> - /* no delay slot: increment cycle count */
> - bonus_cycles++;
> + {
> + if (op == brki)
> + {
> + RETREG = sim_syscall (cpu, CPU.regs[12], CPU.regs[5],
> + CPU.regs[6], CPU.regs[7],
> + CPU.regs[8]);
> + PC = RD + INST_SIZE;
> + }
> +
> + /* no delay slot: increment cycle count */
> + bonus_cycles++;
> + }
> }
> }
>
> --- a/sim/microblaze/microblaze.isa
> +++ b/sim/microblaze/microblaze.isa
> @@ -110,6 +110,7 @@ INSTRUCTION(addi,
> INST_TYPE_RD_RA_IMM,
> CARRY = C_calc(RA, IMM, 0);
> RD = RA + IMM;
> + TRACE_REGISTER (cpu, "r%i = r%i + %i", rd, ra, IMM);
> C_wr(CARRY);
> PC += INST_SIZE)
>
> --- a/sim/testsuite/microblaze/pass.s
> +++ b/sim/testsuite/microblaze/pass.s
> @@ -1,6 +1,5 @@
> # check that the sim doesn't die immediately.
> # mach: microblaze
> -# output:
>
> .include "testutils.inc"
>
> --- a/sim/testsuite/microblaze/testutils.inc
> +++ b/sim/testsuite/microblaze/testutils.inc
> @@ -1,5 +1,12 @@
> +# MACRO: system_call
> +# Make a libgloss/Linux system call
> + .macro system_call nr:req
> + addi r12, r0, \nr;
> + brki r14, 8;
> + .endm
> +
> # MACRO: exit
> - .macro exit nr
> + .macro exit nr:req
> addi r3, r0, \nr;
> bri 0;
> .endm
> @@ -7,6 +14,7 @@
> # MACRO: pass
> # Write 'pass' to stdout and quit
> .macro pass
> + write 1, 1f, 5
> exit 0
> .data
> 1: .asciz "pass\n"
> @@ -15,6 +23,7 @@
> # MACRO: fail
> # Write 'fail' to stdout and quit
> .macro fail
> + write 1, 1f, 5
> exit 1
> .data
> 1: .asciz "fail\n"
> @@ -27,3 +36,12 @@
> .global _start
> _start:
> .endm
> +
> +# MACRO: write
> +# Just like the write() C function; uses system calls
> + .macro write fd:req, buf:req, count:req
> + addi r5, r0, \fd;
> + addi r6, r0, \buf;
> + addi r7, r0, \count;
> + system_call 5
> + .endm
next prev parent reply other threads:[~2021-04-25 17:22 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-22 22:25 Joel Sherrill
[not found] ` <CAF9ehCV8fPNObXbTALFFpfnOX53ZbKen-EdtNWWrsQNYekxnSQ@mail.gmail.com>
2021-04-23 0:27 ` Mike Frysinger
2021-04-23 0:55 ` Joel Sherrill
2021-04-23 1:19 ` Mike Frysinger
2021-04-24 5:02 ` Mike Frysinger
2021-04-25 17:21 ` Mike Frysinger [this message]
2021-04-25 18:37 ` Michael Eager
2021-04-25 20:27 ` Mike Frysinger
2021-04-25 22:29 ` Michael Eager
2021-04-25 23:34 ` Mike Frysinger
2021-04-26 0:44 ` Michael Eager
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YIWlNq+MOYipFiZH@vapier \
--to=vapier@gentoo.org \
--cc=eager@eagercon.com \
--cc=gdb@sourceware.org \
--cc=joel@rtems.org \
--cc=newlib@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).