Annotation of qemu/tests/hello-mips.c, revision 1.1

1.1     ! root        1: /*
        !             2: * MIPS o32 Linux syscall example
        !             3: *
        !             4: * http://www.linux-mips.org/wiki/RISC/os
        !             5: * http://www.linux-mips.org/wiki/MIPSABIHistory
        !             6: * http://www.linux.com/howtos/Assembly-HOWTO/mips.shtml
        !             7: *
        !             8: * mipsel-linux-gcc -nostdlib -mno-abicalls -fno-PIC -mabi=32 \
        !             9: *                  -O2 -static -o hello-mips hello-mips.c
        !            10: *
        !            11: */
        !            12: #define __NR_SYSCALL_BASE      4000
        !            13: #define __NR_exit                      (__NR_SYSCALL_BASE+  1)
        !            14: #define __NR_write                     (__NR_SYSCALL_BASE+  4)
        !            15: 
        !            16: static inline void exit1(int status)
        !            17: {
        !            18:     register unsigned long __a0 asm("$4") = (unsigned long) status;
        !            19: 
        !            20:     __asm__ __volatile__ (
        !            21:         "      .set push       \n"
        !            22:         "      .set noreorder  \n"
        !            23:         "      li      $2, %0  \n"
        !            24:         "      syscall         \n"
        !            25:         "      .set pop        "
        !            26:         :
        !            27:        : "i" (__NR_exit), "r" (__a0)
        !            28:        : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24",
        !            29:          "memory");
        !            30: }
        !            31: 
        !            32: static inline int write(int fd, const char *buf, int len)
        !            33: {
        !            34:     register unsigned long __a0 asm("$4") = (unsigned long) fd;
        !            35:     register unsigned long __a1 asm("$5") = (unsigned long) buf;
        !            36:     register unsigned long __a2 asm("$6") = (unsigned long) len;
        !            37:     register unsigned long __a3 asm("$7");
        !            38:     unsigned long __v0;
        !            39: 
        !            40:     __asm__ __volatile__ (
        !            41:         "      .set push       \n"
        !            42:         "      .set noreorder  \n"
        !            43:         "      li      $2, %2  \n"
        !            44:         "      syscall         \n"
        !            45:         "      move    %0, $2  \n"
        !            46:         "      .set pop        "
        !            47:         : "=r" (__v0), "=r" (__a3)
        !            48:         : "i" (__NR_write), "r" (__a0), "r" (__a1), "r" (__a2)
        !            49:        : "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24",
        !            50:          "memory");
        !            51: 
        !            52: /*    if (__a3 == 0) */
        !            53:         return (int) __v0;
        !            54: /*
        !            55:     errno = __v0;
        !            56:     return -1;
        !            57:  */
        !            58: }
        !            59: 
        !            60: void __start(void)
        !            61: {
        !            62:     write (1, "Hello, World!\n", 14);
        !            63:     exit1 (42);
        !            64: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.