This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: MIPS JAL/JALR to BAL transformation for Linux (o32 ABI)
- From: Richard Sandiford <rdsandiford at googlemail dot com>
- To: "Fu\, Chao-Ying" <fu at mips dot com>
- Cc: <binutils at sourceware dot org>, "Lau\, David" <davidlau at mips dot com>, "Garbacea\, Ilie" <ilie at mips dot com>
- Date: Sat, 01 Aug 2009 09:08:36 +0100
- Subject: Re: MIPS JAL/JALR to BAL transformation for Linux (o32 ABI)
- References: <94BD67F8AF3ED34FA362C662BA1F12C502BB5CF8@MTVEXCHANGE.mips.com>
"Fu, Chao-Ying" <fu@mips.com> writes:
> Ex 2: (Calls not in a shared library)
> # cat call.c
> int t2() { return 1984 + t3(); }
> int t3() { return 0; }
>
> # cc1 -quiet call.c -O2 -mabicalls -mno-shared -G0 -o call.s -fno-inline-small-functions
> # as-new call.s -o call.o -mips32r2
> # objdump -dr call.o
> call.o: file format elf32-tradbigmips
>
>
> Disassembly of section .text:
>
> 00000000 <t3>:
> 0: 03e00008 jr ra
> 4: 00001021 move v0,zero
>
> 00000008 <t2>:
> 8: 27bdffe0 addiu sp,sp,-32
> c: afbf001c sw ra,28(sp)
> 10: 0c000000 jal 0 <t3> <-----------------
> 10: R_MIPS_26 t3
> 14: 00000000 nop
> 18: 8fbf001c lw ra,28(sp)
> 1c: 244207c0 addiu v0,v0,1984
> 20: 03e00008 jr ra
> 24: 27bd0020 addiu sp,sp,32
>
> # ld-new call.o -o call
> # objdump -dr call
> call: file format elf32-tradbigmips
>
>
> Disassembly of section .text:
>
> 0040006c <t3>:
> 40006c: 03e00008 jr ra
> 400070: 00001021 move v0,zero
>
> 00400074 <t2>:
> 400074: 27bdffe0 addiu sp,sp,-32
> 400078: afbf001c sw ra,28(sp)
> 40007c: 0411fffb bal 40006c <t3> <-----------------
> 400080: 00000000 nop
> 400084: 8fbf001c lw ra,28(sp)
> 400088: 244207c0 addiu v0,v0,1984
> 40008c: 03e00008 jr ra
> 400090: 27bd0020 addiu sp,sp,32
You probably know this already, but since it wasn't explicitly
mentioned: -mno-shared -mexplicit-relocs will achieve the same effect
in cases like these, and should be more efficient. The optimisation is
still useful for cross-TU calls though. Hopefully LTO will eventually
make that case work with -mno-shared -mexplicit-relocs too.
Richard