On 05/01/2018 06:54 PM, Jan Kiszka wrote:
> On 2018-05-01 10:54, Ralf Ramsauer wrote:
>> On 04/27/2018 08:21 PM, Jan Kiszka wrote:
>>> On 2018-04-27 11:36, Ralf Ramsauer wrote:
>>>> This won't drop symbols that are marked as used.
>>>>
>>>> The static, relocateable inmate library lib.a is created by ar. When
>>>> linking executables, unreferenced symbols may be dropped, even if they
>>>> are attributed as used.
>>>>
>>>> --whole-archive ensures that those symbols will be linked.
>>>>
>>>> Whereas on x86, we need --gc-sections.
>>>
>>> That's something I do not understand yet: With [1] we will build the
>>> whole hypervisor, including x86, with --whole-archive, and that works
>>> fine on x86 as well.
>>
>> That's what happens if I compile x86 inmates with --whole-archive
>> instead of --gc-sections:
>>
>> LD
>> /home/ralf/workspace/jailhouse/inmates/demos/x86/32-bit-demo-linked.o
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/lib32.a(ioapic-32.o): In
>> function `ioapic_init':
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/ioapic.c:48: undefined
>> reference to `map_range'
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/lib32.a(smp-32.o): In
>> function `smp_start_cpu':
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/smp.c:59: undefined
>> reference to `delay_us'
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/smp.c:61: undefined
>> reference to `delay_us'
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/lib32.a(pci-32.o): In
>> function `pci_find_device':
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/../pci.c:47: undefined
>> reference to `pci_read_config'
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/../pci.c:51: undefined
>> reference to `pci_read_config'
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/lib32.a(pci-32.o): In
>> function `pci_find_cap':
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/../pci.c:61: undefined
>> reference to `pci_read_config'
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/../pci.c:65: undefined
>> reference to `pci_read_config'
>> /home/ralf/workspace/jailhouse/inmates/lib/x86/../pci.c:68: undefined
>> reference to `pci_read_config'
>>
>> Interestingly, this only happens to the 32-bit demo inmate.
>>
>
> Because we keep everything, something might be missing now: The 32-bit
> lib does not provide support for all features that its big 64-bit
> brother has.
>
> I still think this approach is too much of a big hammer. Try
> --print-gc-sections on your specific problem (uart section loss) and
> play with --undefined as suggested by the ld man page. Not sure if there
> is also some linker script statement that can do that trick, but it
> might be worth checking.
KEEP, together with --whole-archive does the trick:
.uarts : {
__uarts_array_start = .;
KEEP(*(.uarts));
__uarts_array_end = .;
}
Ralf
>
> Jan
>
--
You received this message because you are subscribed to the Google Groups
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.