This is the mail archive of the binutils@sources.redhat.com 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] | |
Hi!
Attached are both binutils and gcc patches which implement what I talked
about back in June, particularly if the compiler knows it will never look
at the r11 (static chain reg) passed to a function, it doesn't need 0
to be passed there (well, in reality it was sometimes 0 and sometimes
shared library's load address), but can be passed fd_func value of next
.opd entry, thus the .opd entries effectively overlap.
+--------------+-------------+--------------+
| ent0 fd_func | ent0 fd_toc | ent0 fd_aux |
+--------------+-------------+--------------+-------------+-------------+
| ent1 fd_func | ent1 fd_toc | ent1 fd_aux |
+--------------+-------------+-------------+
For e.g. nested C functions were r11 register is live on entry, an explicit
fd_aux field not overlapped with next .opd entry is still used.
The linker is able to cope with a different mix of overlapped and overlapped
.opd entries.
The linker now has a --non-overlapping-opd switch which could be useful
if some post-link processing tool can't cope with this .opd overlapping
(the dynamic linker certainly can cope with it).
When ld is given --non-overlapping-opd, it would canonicalize the above to:
+--------------+-------------+---+--------------+-------------+-------------+
| ent0 fd_func | ent0 fd_toc | 0 | ent1 fd_func | ent1 fd_toc | ent1 fd_aux
|
+--------------+-------------+---+--------------+-------------+-------------+
The patch is on top of Alan's no-dot-syms patches
http://gcc.gnu.org/ml/gcc-patches/2004-08/msg00557.html
(the binutils side is already in CVS).
Tested with binutils make check, gcc make check and glibc make check
on ppc64-redhat-linux, no regressions.
For glibc, this saves around 18KB of per-process memory, for e.g. libgcj.so
almost 150KB.
Jakub
Attachment:
binutils-CVS-opd-overlap.patch
Description: Text document
Attachment:
gcc35-opd-overlap.patch
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |