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: Richard Sandiford <rdsandiford at googlemail dot com>
- To: David Daney <ddaney dot cavm at gmail dot com>
- Cc: Maxim Kuvyrkov <maxim at codesourcery dot com>, binutils at sourceware dot org, Eric Christopher <echristo at apple dot com>
- Date: Thu, 15 Nov 2012 22:19:35 +0000
- Subject: Re: [PATCH][MIPS] Add linker emulation for N64 ABI with forced 32-bit symbols
- References: <1A059C97-D083-4E17-A444-659452ABCCDB@codesourcery.com> <50A56519.email@example.com>
David Daney <firstname.lastname@example.org> writes:
> 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)?
-msym32 is useful for (non-PIC) -mplt executables. In that case all
symbols are resolved at static link time, using PLTs or copy relocs