Subject: Re: ld.elf_so and hppa
To: None <firstname.lastname@example.org>
From: Matt Fredette <email@example.com>
Date: 07/01/2002 15:07:30
> | /*
> | * This allocates a PLABEL. If called with a non-NULL def, the
> | * plabel is for the function associated with that definition
> | * in the defining object defobj, plus the given addend. If
> | * called with a NULL def, the plabel is for the function at
> | * the (unrelocated) address in addend in the object defobj.
> | */
> | Elf_Addr _rtld_alloc_plabel(const Obj_Entry *defobj, const Elf_Sym *def,
> | Elf_Addr addend);
> I don't quite understand. Are you allocating an actual PLABEL
> (2 memory words) inside this function?
In the HPPA version, a list of outstanding PLABELs is kept. If one
doesn't already exist for a function, a new one is allocated.
> What are you allocating it from?
In general, the HPPA version uses rtld.h's NEW macro. (There is
a small pool of preallocated PLABELs used while relocating the
linker itself; I was hesitant to use NEW during that time.)
> Where does it get freed if the library is unloaded?
Right now they don't get freed. While I can't put my finger on it,
something makes me think that keeping them around is a good idea.
How good/bad is the overhead of the allocator behind NEW?
> | /*
> | * If a pointer is a PLABEL, this unwraps it and returns the
> | * function's true address.
> | */
> | const void *_rtld_unwrap_plabel(const void *addr);
> This is a very poor choice in name since it doesn't really give
> much idea what it does. I'd recommend something like
> "_rtld_plabel_function" instead.
OK. So how about: