← Back to context

Comment by khrbtxyz

16 days ago

The exact same thing happens with GCC 12 with 32-bit MIPS.

  #include <asm/unistd.h>
   
  char msg[] = "hello, world!\n";
   
  int main(void)
  {
      register int syscall_no asm("v0") = __NR_write;
      register int arg1       asm("a0") = 1;
      register char *arg2     asm("a1") = msg;
      register int arg3       asm("a2") = sizeof(msg) - 1;
   
      asm("syscall");
   
      return 0;
  }

  root@OpenWrt:~# objdump --disassemble=main
  ...
  00400580 <main>:
    400580: 27bdfff8  addiu sp,sp,-8
    400584: afbe0004  sw s8,4(sp)
    400588: 03a0f025  move s8,sp
    40058c: 24020fa4  li v0,4004
    400590: 24040001  li a0,1
    400594: 3c020041  lui v0,0x41
    400598: 24450650  addiu a1,v0,1616
    40059c: 2406000e  li a2,14
    4005a0: 0000000c  syscall