Re: got space

Michael Cree <[email protected]>
Newsgroups gmane.linux.debian.ports.alpha
Message-ID <20180320081621.l2htxzfyyulbrsg5@tower>
On Mon, Mar 19, 2018 at 12:47:25PM -0400, Camm Maguire wrote:
> There are a few very large C source files in acl2 which are overflowing
> the 16bit gp relative relocation scheme for ELF_LITERAL relocations,
> pertaining to static functions.  Each function produces a reloc to .text
> with a unique addend, overflowing the 64k space accessible by the
> instruction.  I've looked at the gcc docs which seem to imply that
> -mlarge-data acknowledged this limitation at least with .data.
> -mlarge-text does not provide a 32bit address space as far as I can
> see.
> 
> What is the canonical way to get gcc on alpha to compile and load really
> large files?  (GCL has its own linker, so these files are not processed
> by ld.)

I think the canonical sequence of instructions for calling a function
with large-text and large-data is:

adr := gp + immediate_16bit_offset
jsr (adr)
gp := pc + immediate_high_16bit_offset
gp := gp + immediate_low_16bit_offset

Thus the gp can be anywhere in a 32-bit adress space, but the jump
table can only be 64k.  I am not aware of a work around other then
splitting the program (or shareable library) into smaller chunks.
It's a pain; there are some other packages in the repository that
fail to build on Alpha because of gprel16 relocation overflows.

I've CCed the debian-alpha email list.  Maybe someone there knows
better and can comment further.

Cheers
Michael.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.