This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc 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: RFE: dl_iterate_phdr, r_debug.r_brk usability for introspection


On Wed, Sep 23, 2015 at 01:33:04PM -0700, Roland McGrath wrote:
> > I just remembered: there's already an equivalent API from one or more
> > of the BSDs (I'd have to look back to see which) that was adopted in
> > musl. See:
> > 
> > http://git.musl-libc.org/cgit/musl/tree/include/link.h#n27
> > 
> > Rather than inventing something new and gratuitously incompatible it
> > would be nice if glibc could adopt the same member names (and layout).
> > We also have the TLS module id (for use with __tls_get_addr) and image
> > pointer available there.
> 
> Your musl source link shows:
> 
> 	struct dl_phdr_info {
> 	       ElfW(Addr) dlpi_addr;
> 	       const char *dlpi_name;
> 	       const ElfW(Phdr) *dlpi_phdr;
> 	       ElfW(Half) dlpi_phnum;
> 	       unsigned long long int dlpi_adds;
> 	       unsigned long long int dlpi_subs;
> 	       size_t dlpi_tls_modid;
> 	       void *dlpi_tls_data;
> 	};
> 
> while the glibc definition reads:
> 
> 	struct dl_phdr_info
> 	  {
> 	    ElfW(Addr) dlpi_addr;
> 	    const char *dlpi_name;
> 	    const ElfW(Phdr) *dlpi_phdr;
> 	    ElfW(Half) dlpi_phnum;
> 
> 	    /* Note: Following members were introduced after the first
> 	       version of this structure was available.  Check the SIZE
> 	       argument passed to the dl_iterate_phdr callback to determine
> 	       whether or not each later member is available.  */
> 
> 	    /* Incremented when a new object may have been added.  */
> 	    __extension__ unsigned long long int dlpi_adds;
> 	    /* Incremented when an object may have been removed.  */
> 	    __extension__ unsigned long long int dlpi_subs;
> 
> 	    /* If there is a PT_TLS segment, its module ID as used in
> 	       TLS relocations, else zero.  */
> 	    size_t dlpi_tls_modid;
> 
> 	    /* The address of the calling thread's instance of this module's
> 	       PT_TLS segment, if it has one and it has been allocated
> 	       in the calling thread, otherwise a null pointer.  */
> 	    void *dlpi_tls_data;
> 	  };
> 
> I think I invented dlpi_tls_{modid,data} in commit
> d78efd9f369a8fc46229fc9224e10e3781eecc43 (2006-02-28 in ChangeLog.16).
> 
> dlip_{adds,subs} were added in commit bed12f78fab86b2349cab6e7f4c0e46bde5e9711
> (2004-01-23 in ChangeLog.14).
> 
> I suspect all of that was before any BSD had dl_iterate_phdr.
> 
> So, I guess the answer is, "You're welcome."

Oops. Well, a belated thanks! I knew we adopted these fields from
somewhere, and based on the original post to this thread assumed it
couldn't have been glibc.

So is there any actual change being requested here that's not already
in glibc?

Rich


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