This is the mail archive of the
mailing list for the binutils project.
Re: [PATCH][MIPS] Add linker emulation for N64 ABI with forced 32-bit symbols
- From: David Daney <ddaney dot cavm at gmail dot com>
- To: Maxim Kuvyrkov <maxim at codesourcery dot com>
- Cc: binutils at sourceware dot org, Eric Christopher <echristo at apple dot com>, Richard Sandiford <rdsandiford at googlemail dot com>
- Date: Thu, 15 Nov 2012 13:56:41 -0800
- Subject: Re: [PATCH][MIPS] Add linker emulation for N64 ABI with forced 32-bit symbols
- References: <1A059C97-D083-4E17-A444-659452ABCCDB@codesourcery.com>
On 11/15/2012 01:47 PM, Maxim Kuvyrkov wrote:
This patch fixes linking of applications compiled with -mabi=64 -msym32.
The -msym32 GCC options forces MIPS backend to emit 32-bit symbols even when compiling for 64-bit ABI, which is most useful for building applications with PLTs to call shared library functions (PLTs are currently supported only for 32-bit symbols for MIPS). Certain applications get a significant performance edge from using PLTs, and such applications should be compiled with "-mabi=64 -mplt -msym32".
Compiling with the above options works just fine until linker tries to put the .text section above 32-bit address space at TEXT_START_ADDR="0x120000000". This patch sets TEXT_START_ADDR to 0x10000000 (which is same as for N32 ABI) when compiling with -msym32 GCC option.
I will post the corresponding GCC patch that tells the linker to use new emulations shortly.
Tested by building complete MIPS64 toolchain (including glibc) with -msym32.
I don't understand how this is possible. The operating system will load
shared libraries outside of the lower 2BG of virtual address space. How
coulde glibc possibly work when built like this and it is loaded at a
'high' address (as is normally done in Linux systems)?
OK to apply?
CodeSourcery / Mentor Graphics