std library hooks

Vladimir Panteleev vladimir at thecybershadow.net
Sun Apr 15 20:12:19 PDT 2012


On Sunday, 15 April 2012 at 23:16:10 UTC, Walter Bright wrote:
> On 4/14/2012 9:23 PM, Vladimir Panteleev wrote:
>> On Saturday, 14 April 2012 at 19:41:22 UTC, Walter Bright 
>> wrote:
>>> On 4/14/2012 2:40 AM, Vladimir Panteleev wrote:
>>>> So object files take priority over library files?
>>>
>>> Yes, because object files are NOT searched. They are 
>>> incorporated. Libraries
>>> get recursively searched for unresolved symbols.
>>
>> Right, I understand the case when you declare an assert 
>> handler and use it in
>> the same module (thus, object file) - then, an external is not 
>> used and for PIC
>> there might not even be a relocation record. However, if the 
>> assert statement
>> and my assert handler are in different modules, how does the 
>> linker know not to
>> search the libraries without first searching other object 
>> files?
>
> ?? The linker takes the list of object files supplied on the 
> command line and incorporates them. Then it looks in the 
> library for any unresolved symbols.
>
> The linker does NOT "search" object files passed on the command 
> line. It ALWAYS simply incorporates them.
>
> It is far far simpler than you are imagining it is. A linker is 
> a very simple, stupid program.

No, I think I am imagining it right, but we have a 
misunderstanding of terminology used.

If an object file uses a symbol not present in the object file, 
the linker doesn't inherently know the address of that symbol, 
and can't write its address without first looking at all other 
object files (and possibly libraries) to find 1) in which object 
file it is, and 2) its offset within that object file. Assuming 
the linker builds a hash table of sorts for all symbols in all 
object files, I suppose the word "search" doesn't really apply, 
since you don't search a hash table.

Anyway, thanks, I think you answered my question.


More information about the Digitalmars-d mailing list