Help about mipsel-linux-gcc 4.1.2 asm codes.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, all:

   I'm confused about asm codes generator by mipsel-linux-gcc,
.text_rom:9000F788                 lw      $v1, 0x148+arg_4($fp)
.text_rom:9000F78C                 lw      $v0, 0($v1)
as I know, mips has a load delay slot, and there should not be any
instruction use reg '$v1'  before the slot on this situation.

am I right? or have I missed anything?
asm codes seems have not notice that, and a invalid argv[0] address
passed to the called function.


here are asm codes(disasm by IDA):

.text_rom:9000F760 get_ftype:
.text_rom:9000F760
.text_rom:9000F760 var_138         = -0x138
.text_rom:9000F760 var_134         = -0x134
.text_rom:9000F760 var_128         = -0x128
.text_rom:9000F760 var_124         = -0x124
.text_rom:9000F760 var_120         = -0x120
.text_rom:9000F760 var_18          = -0x18
.text_rom:9000F760 var_14          = -0x14
.text_rom:9000F760 var_10          = -0x10
.text_rom:9000F760 var_8           = -8
.text_rom:9000F760 var_4           = -4
.text_rom:9000F760 arg_0           =  0
.text_rom:9000F760 arg_4           =  4
.text_rom:9000F760 arg_8           =  8
.text_rom:9000F760
.text_rom:9000F760                 addiu   $sp, -0x148
.text_rom:9000F764                 sw      $ra, 0x148+var_4($sp)
.text_rom:9000F768                 sw      $fp, 0x148+var_8($sp)
.text_rom:9000F76C                 move    $fp, $sp
.text_rom:9000F770                 sw      $a0, 0x148+arg_0($fp)
.text_rom:9000F774                 sw      $a1, 0x148+arg_4($fp)
.text_rom:9000F778                 sw      $a2, 0x148+arg_8($fp)
.text_rom:9000F77C                 sw      $0, 0x148+var_124($fp)
.text_rom:9000F780                 li      $v0, 1
.text_rom:9000F784                 sw      $v0, 0x148+var_128($fp)
.text_rom:9000F788                 lw      $v1, 0x148+arg_4($fp)
.text_rom:9000F78C                  lw      $v0, 0($v1)
.text_rom:9000F790                 bnez    $v0, loc_9000F7A4
.text_rom:9000F794                 lw      $v0, 0x148+arg_4($fp)
.text_rom:9000F798                 li      $v0, 0xFFFFFFFF
.text_rom:9000F79C                 j       loc_9000F93C
.text_rom:9000F7A0                 sw      $v0, 0x148+var_10($fp)


src code:
Status get_ftype( int argc, char *argv[], unsigned int *id)
{
 char      ftype[2];
 FFS_FILE *p_file = 0;
 IMAGE_PREFIX Image;
 Status status = SBL_FILECONTINUE;
 int len;
 unsigned int *buf_ptr;

 if( !argv[ 0 ] )
    return SBL_EFAILURE;


    if( (p_file = fopen( argv[0], "r" )) == NULL )
    {
       return SBL_EFAILURE;
     }

 .........// other code
}

Compile options:
-march=mips32 -mtune=r4600 -mabi=32 -G 0 -ansi -fno-builtin
-fdelayed-branch -fthread-jumps -fno-pic -mno-abicalls -O0 -g
-fschedule-insns2 -msoft-float


gcc version:
# mipsel-linux-uclibc-gcc -v
Using built-in specs.
Target: mipsel-linux-uclibc
Configured with: xxxx/gcc-4.1.2/configure --prefix xxxxx
--build=i386-redhat-linux --host=i386-redhat-linux
--target=mipsel-linux-uclibc --enable-languages=c,c++ --enable-shared
--disable-__cxa_atexit --enable-target-optspace --with-gnu-ld
--disable-nls
Thread model: posix
gcc version 4.1.2

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux