This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [gold] "patch" for the incremental link design document
- From: Ian Lance Taylor <iant at google dot com>
- To: Rafael Espindola <espindola at google dot com>
- Cc: Binutils <binutils at sourceware dot org>, Mikolaj Zalewski <mikolajz at google dot com>
- Date: Mon, 04 Jan 2010 12:11:32 -0800
- Subject: Re: [gold] "patch" for the incremental link design document
- References: <38a0d8450912141135t6dae0a05l8ba3945f020e4fd@mail.gmail.com> <38a0d8450912181229q63e7f415tc0bdaf31cea23ea7@mail.gmail.com>
Rafael Espindola <espindola@google.com> writes:
> --------------------------------
> Change the "For an object file or shared library" section into:
>
> For an object file, shared library or archive
>
> 1. 4 byte count of input sections
>
> * Always zero for a shared library or archive.
>
> 2. 4 byte count of global symbols. In the case of an archive, this
> will be the count of symbols in the *unused* members.
>
> 3. For each input section:
>
> 1. 4 byte offset to section name in .gnu_incremental_strtab section
> 2. 4 byte output section index
> * If input section is omitted, this is zero.
> 3. 8 byte offset of input section in output section
> 4. 8 byte input section size
>
> 4. For each global symbol:
>
> 1. 4 byte index into output global symbol table if the symbol if an
> object file or library. 4 byte offset into .gnu_incremental_strtab if
> an archive.
> 2. 4 byte offset to next linked list entry
> * Linked list starts from global symbol list.
> * Offset is to entry in input file list.
> 3. 4 byte count of relocations for this file.
> 4. 4 byte offset to relocations in .gnu_incremental_relocs section.
> ---------------------------------
>
> The change is that now t the symbols in unused archive members point
> to the incremental string table. This should give us enough
> information to build the necessary lists for each symbol.
>
> For example, lets say b.o defines foo and is used. c.o defines bar and
> is unused. Executing
>
> ar q a,a b,o c,o
> ld -incremental d.o a.a -o exec
>
> Will produce (among others) the lists
>
> foo -> b.o
> bar -> a.a
>
> now if we change d.o and add an undefined reference to bar we can just
> look up the list for bar, find that a.a is on it and force a relink.
This seems entirely reasonable to me. You should add a section on how
to look up a symbol which is mentioned in some archive in the earlier
link but is not in the global symbol table.
Ian