This is the mail archive of the 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

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)?

David Daney

OK to apply?

Maxim Kuvyrkov
CodeSourcery / Mentor Graphics

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