This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][MIPS] Add linker emulation for N64 ABI with forced 32-bit symbols


David Daney <ddaney.cavm@gmail.com> 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
where necessary.

Richard


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]