about summary refs log blame commit diff stats
path: root/tools/iso/kernel.soso/debugprint.c
blob: 186bc89f8d00da2363553d5ef843f175b84edba4 (plain) (tree)
1
2
3
4
5
6
7





                          
                                             




                                                       
                                            










                                   

                                  




                                    
              


                          
                        




































                                                                  
                




                                                        
#include "debugprint.h"
#include "common.h"
#include "fs.h"

static File* gFile = NULL;

void Debug_initialize(const char* fileName) {
    FileSystemNode* node = getFileSystemNode(fileName);

    gFile = open_fs(node, 0);
}

void Debug_PrintF(const char *format, ...) {
    char **arg = (char **) &format;
    char c;
    char buf[20];
    char buffer[512];

    int bufferIndex = 0;

    //arg++;
    __builtin_va_list vl;
    __builtin_va_start(vl, format);

    while ((c = *format++) != 0) {
        if (bufferIndex > 510) {
            break;
        }

        if (c != '%')
          buffer[bufferIndex++] = c;
        else {
            char *p;

            c = *format++;
            switch (c) {
              case 'x':
                 buf[0] = '0';
                 buf[1] = 'x';
                 //itoa (buf + 2, c, *((int *) arg++));
                 itoa (buf + 2, c, __builtin_va_arg(vl, int));
                 p = buf;
                 goto string;
                 break;
              case 'd':
              case 'u':
                //itoa (buf, c, *((int *) arg++));
                itoa (buf, c, __builtin_va_arg(vl, int));
                p = buf;
                goto string;
                break;

              case 's':
                //p = *arg++;
                p = __builtin_va_arg(vl, char*);
                if (! p)
                  p = "(null)";

              string:
                while (*p)
                  buffer[bufferIndex++] = (*p++);
                break;

              default:
                //buffer[bufferIndex++] = (*((int *) arg++));
                buffer[bufferIndex++] = __builtin_va_arg(vl, int);
                break;
              }
          }
      }

    buffer[bufferIndex] = '\0';

    if (gFile) {
        write_fs(gFile, strlen(buffer), (uint8*)buffer);
    }

    __builtin_va_end(vl);
}
span class="p">{ lineElem.scrollIntoView(true); } return true; } if ('onhashchange' in window) { window.onhashchange = JumpToLine; } --> </script> </head> <body onload='JumpToLine();'> <a href='https://github.com/akkartik/mu/blob/main/linux/307size.subx'>https://github.com/akkartik/mu/blob/main/linux/307size.subx</a> <pre id='vimCodeElement'> <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Size of an array in bytes.</span> <span id="L2" class="LineNr"> 2 </span> <span id="L3" class="LineNr"> 3 </span>== code <span id="L4" class="LineNr"> 4 </span> <span id="L5" class="LineNr"> 5 </span><span class="subxFunction">size</span>: <span class="subxComment"># in: (addr array _) -&gt; result/eax: int</span> <span id="L6" class="LineNr"> 6 </span> <span class="subxS1Comment"># . prologue</span> <span id="L7" class="LineNr"> 7 </span> 55/push-ebp <span id="L8" class="LineNr"> 8 </span> 89/&lt;- %ebp 4/r32/esp <span id="L9" class="LineNr"> 9 </span> <span class="subxComment"># eax = in</span> <span id="L10" class="LineNr">10 </span> 8b/-&gt; *(ebp+8) 0/r32/eax <span id="L11" class="LineNr">11 </span> <span class="subxComment">#</span> <span id="L12" class="LineNr">12 </span> 8b/-&gt; *eax 0/r32/eax <span id="L13" class="LineNr">13 </span><span class="Constant">$size:end</span>: <span id="L14" class="LineNr">14 </span> <span class="subxS1Comment"># . epilogue</span> <span id="L15" class="LineNr">15 </span> 89/&lt;- %esp 5/r32/ebp <span id="L16" class="LineNr">16 </span> 5d/pop-to-ebp <span id="L17" class="LineNr">17 </span> c3/return </pre> </body> </html> <!-- vim: set foldmethod=manual : -->