This looks like a potentially handy feature, and the architecture seems fairly straight-forward. However, I'm not sure it qualifies for self-review. (Although the bar for self review seems to be moving somewhat...) If only because it introduces new interfaces and behavior for consumers.
I'd suggest that this maybe should be a fast-track instead of self review, unless there is some particular rush to get this case through? Please consider promoting it to a fast track. In any case, I'll happily give it a +1. Btw, you failed to specify a release binding. Is this patch or minor (or something else)? (It looks like this could be Patch binding fairly easily...) - Garrett Ali Bahrami wrote: > I am sponsoring the following self-reviewed case for myself. > > It adds a new option (-z wrap=symbol) to the Solaris link-editor (ld) > along with two synonyms: -wrap=symbol and --wrap=symbol. > > I believe it qualifies for self review: > > - This is a GNU familiarity case --- the GNU ld used by Linux accepts > the -wrap/--wrap options and it is used by software of > importance to > Solaris (Xorg). > > - We have established precedent for providing GNU ld options to ease > building of open source software on our platform. One example is: > > PSARC 2008/583 add gld options to ld(1) > > - There are no backward compatibility issues with the proposed > syntax, > and the form of the syntax does not break new ground. > > The wrap option tells the link-editor to rename function references > in a systematic way that allows the user to link "wrapper" functions > against already compiled code. The user of this feature supplies the > wrapper functions. This feature will be integrated as: > > 6850768 ld option to autogenerate wrappers/interposers similar to > GNU ld --wrap > > Documentation for the original GNU ld feature can be found at: > > > http://sourceware.org/binutils/docs-2.19/ld/Options.html#index-g_t_002d_002dwrap-249 > > > > Diffs for the changes to the proposed new ld(1) manpage are shown below. > > ----- > > Release Binding: Patch/Micro > > New ld options: > -z wrap Committed > -wrap Committed > --wrap Committed > > ----- > > *** ld.orig Mon Aug 24 14:38:24 2009 > --- ld.new Tue Sep 15 13:28:59 2009 > *************** > *** 30,36 **** > [-z preinitarray=function] [-z redlocsym] [-z relaxreloc] > [-z rescan-now] [-z recan] [-z rescan-start ... -z rescan-end]] > [-z target=sparc|x86] [-z text | textwarn | textoff] > ! [-z verbose] filename... > > > DESCRIPTION > --- 30,36 ---- > [-z preinitarray=function] [-z redlocsym] [-z relaxreloc] > [-z rescan-now] [-z recan] [-z rescan-start ... -z rescan-end]] > [-z target=sparc|x86] [-z text | textwarn | textoff] > ! [-z verbose] [-z wrap=symbol] filename... > > > DESCRIPTION > *************** > *** 1114,1119 **** > --- 1114,1152 ---- > are deemed too noisy to be generated by default. > > > + -z wrap=symbol > + -wrap=symbol > + --wrap=symbol > + > + Rename undefined references to symbol in order to allow > wrapper > + code to be linked into the output object without having to > modify > + source code. When -z wrap is specified, all undefined > references > + to symbol are modified to reference __wrap_symbol, and all > + references to __real_symbol are modified to reference > symbol. The > + user is expected to provide an object containing the > __wrap_symbol > + function. This wrapper function can call __real_symbol in > order to > + reference the actual function being wrapped. > + > + The following is an example of a wrapper for the malloc() > function: > + > + void * > + __wrap_malloc (size_t c) > + { > + printf ("malloc called with %zu\n", c); > + return __real_malloc (c); > + } > + > + If you link other code with this file using -z wrap=malloc to > + compile all the objects, then all calls to malloc will call > the > + function __wrap_malloc instead. The call to __real_malloc in > + __wrap_malloc will call the real malloc function. > + > + The real and wrapped functions should be maintained in > separate > + source files. Otherwise, the compiler or assembler may resolve > + the call instead of leaving that operation for the link-editor > + to carry out, and prevent the wrap from occurring. > + > + > ENVIRONMENT VARIABLES > LD_ALTEXEC >