Annotation of qemu/tests/hello-mips.c, revision 1.1.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.