The print we managed to do was a uartputs, as I just remembered, not
print() just yet.
No idea how we would wire up the uartputs with the panic function though.

Regarding  the actual issue, Moody suggested something about setSB (static
base).
I have not been able to read up much on it and we called it a day then just
by midnight.

On Fri, May 30, 2025 at 5:49 PM Ron Minnich <[email protected]> wrote:

> I left out a few details ... you needed a panic that could put a
> string before print was ready. But you've written the code already ...
>
> so it was data segment alignment? That was my guess at the time.
>
> On Fri, May 30, 2025 at 4:15 AM Daniel Maslowski via 9fans
> <[email protected]> wrote:
> >
> > The problem we had was that print hadn't even worked yet, and as we
> figured, due to data/text shenanigans.
> > A print("hello"); would fail, but a `static char asdf[] = "asdf";
> print(asdf);` would work. (notation might be wrong here, sorry, I'm not
> that into C...)
> >
> > Ron, how would that panic become visible? If the test fails, I would
> need to be able to see its result.
> >
> > On Fri, May 30, 2025 at 6:54 AM Charles Forsyth <
> [email protected]> wrote:
> >>
> >> copy attached
> >> uncluttered by extensions
> >> apparently ken thompson did the C version for unix (i just added the
> types),
> >> which makes it an appropriate test for a new compiler and then kernel
> port.
> >>
> >>
> >> On Thu, 29 May 2025 at 22:35, Charles Forsyth <
> [email protected]> wrote:
> >>>
> >>> that reminds me that the first kernel-level program i ran on new ports
> was wump (hunt the wumpus),
> >>> partly to debug similar effects, but also because it's fun if not just
> silly
> >>>
> >>> On Thu, 29 May 2025 at 22:05, Ron Minnich <[email protected]> wrote:
> >>>>
> >>>> Daniel and Shawn made good progress on the risc-v port, and their
> >>>> experience reminded me of a standard test I used to use while doing
> >>>> ports.
> >>>>
> >>>> long story short, for blue gene and other ports (early amd64) we added
> >>>> this test in main
> >>>>
> >>>> ulong x = 0x12345678;
> >>>>
> >>>> main()
> >>>> {
> >>>>     if (x != 0x12345678) panic("unaligned data"):
> >>>>
> >>>> ...
> >>>>
> >>>> how can this test fail? x is in the data segment, but the immediate in
> >>>> the test is in the text segment. This test is a quick and easy way to
> >>>> check if your data segment is correctly loaded in memory.
> >>>>
> >>>> In some ports, the data is aligned by code in l.s that moves it.
> >>>>
> >>>> There are some really nasty, confusing errors that will arise in a
> >>>> seemingly working kernel if data is not aligned.
> >>>>
> >>>> I always add this test when I'm doing a port. It catches a problem
> >>>> that is otherwise very confusing, and presents as strings  not set up
> >>>> right, variables wrong, etc.
> >
> > 9fans / 9fans / see discussions + participants + delivery options
> Permalink

------------------------------------------
9fans: 9fans
Permalink: 
https://9fans.topicbox.com/groups/9fans/T2fa5d9bbce09411d-M4f00d072bab8ad1dfc8c0f95
Delivery options: https://9fans.topicbox.com/groups/9fans/subscription

Reply via email to