mips64 linker bug?

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

 



Hi All

I think I have found a linker bug!

I use the following cross compilers from sgi's ftp:

binutils-mips64-linux-2.9.5-3.i386.rpm
egcs-mips64-linux-1.1.2-4.i386.rpm
binutils-mips64el-linux-2.9.5-3.i386.rpm
egcs-mips64el-linux-1.1.2-4.i386.rpm

Anyway the bug is that static functions get linked wrongly.
Test program:
---------------------
/* This function has to be here to get the error */
int test1(void) {
	return 1;
}

static int test2(void) { /* <---- notice this static */
	return 2;
}

int main() {

	test2();
	return 1;
}

---------------------

Compile and link with:

mips64-linux-gcc -mcpu=r4600 -mabi=64 -mips3 -g -c -O2  -o main.o main.c
mips64-linux-ld -m elf64btsmip  -nostdlib -e main main.o -o main.elf

Now I see the bug where main calls test2:

Doing a 'mips64-linux-objdump -S test.elf' gives me:

main.elf:     file format elf64-bigmips

Disassembly of section .text:

00000000100000f0 <test1>:
        return 1;
    100000f0:   03e00008        jr      $ra
    100000f4:   24020001        li      $v0,1

00000000100000f8 <test2>:
}

static int test2(void) {
        return 2;
    100000f8:   03e00008        jr      $ra
    100000fc:   24020002        li      $v0,2

0000000010000100 <main>:
}

int main() {
    10000100:   67bdfff0        0x67bdfff0
    10000104:   ffbf0000        0xffbf0000

0000000010000108 <$LM6>:

        test2();
    10000108:   0c000044        jal     10000110 <$LM7> <-- 110 ????????????
    1000010c:   00000000        nop

0000000010000110 <$LM7>:
        return 1;
    10000110:   dfbf0000        0xdfbf0000
    10000114:   24020001        li      $v0,1
    10000118:   03e00008        jr      $ra
    1000011c:   67bd0010        0x67bd0010


When removing the static I get the correct address 100000f8 ?!?

Am I missing something. Please help me, I have spend 3 days
chasing this bug, until I figures out it was related to 
static functions.

btw why isn't everything disassembled?

Thanks
Lars Munch



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux