[challenge] Linker surgery

Dmitry Olshansky dmitry.olsh at gmail.com
Fri May 17 15:49:59 PDT 2013


17-May-2013 21:57, Rainer Schuetze пишет:
>
>
> On 17.05.2013 14:29, Dmitry Olshansky wrote:
>> 15-May-2013 04:17, IgorStepanov пишет:
>>> Do this table linked, if you remove all functions, which use it?
>>
>> Thanks for this try, but they DO link in always.
>> And I believe this is a key problem - each function goes into a separate
>> object but globals are always pulled in!
>>
>
> Yes, if you build a library the functions in a module are split into
> separate object files, but data is always written into the object file
> of the original module. The linker cannot split these afterwards if any
> data in the module is referenced (which might happen by just importing
> the module).

And how then I would use these tables if even importing these modules 
then pulls in the data?

Local import doesn't help too.

> A workaround could be to put the data into a different module.

Then say I go for X files with tables and import these modules.
It still doesn't work - evidently simply referencing a module pulls in 
the data.

If I compile and link the following 3 modules:


module fmod;

public immutable int[] fable = [1,2,3];


module mod;

import fmod;

int foo(int i)
{
        return fable[i];
}

//driver
import mod;

immutable byte[] bable = [1, 2, 3, 4, 5];

byte boo(int ch){
     return bable[ch];
}

void main(string[] args){
     boo(0);
}

I still have this symbol in map file: _D4fmod5fableyAi
That is immutable(int[]) fmod.fable after ddemangle.

-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list