Hi Sven,
I've added
-- LD_SCRIPT = $(call select_from_repositories,src/platform/genode.ld) CXX_LINK_OPT = -static -nostdlib -Wl,-nostdlib CXX_LINK_OPT += -Wl,-T$(LD_SCRIPT) -Wl,-Ttext=0x01000000 -- to its target.mk. That worked fine.
It is actually sufficient to specify:
CXX_LINK_OPT += -Wl,-Ttext=0x01000000
Please note that this way, the -Ttext argument will appear twice (once with your custom value and once with the original value) at the linker command line. You can see this when building with 'make VERBOSE='. However, fortunately, the linker seems to use the value of the first occurrence, which is the custom value specified in your 'target.mk'.
But then, the mapping of .text and .data sections failed during startup. The same happened when I tried 0x04000000 as base address.
-- [init] Genode::addr_t _setup_elf(Genode::Parent_capability, Genode::Dataspace_capability, Genode::Ram_session&, Genode::Rm_session&): addresses differ after attach (addr=1000000 out_ptr=0) [init] Genode::addr_t _setup_elf(Genode::Parent_capability, Genode::Dataspace_capability, Genode::Ram_session&, Genode::Rm_session&): addresses differ after attach (addr=106e000 out_ptr=0) Start thread ip=10545d4 sp=0, pd=4, tid=0 no RM attachment (READ pf_addr=0 pf_ip=10545d4 from 04) --
Is there anything else I must know about the startup process?
Normally, this output occurs if there are region conflicts. The ELF loader specifies the virtual address to which the segment should be mapped. If there already is a region that overlaps with the specified address range, core refuses attach the dataspace. However, it is not clear to me what could cause the conflict here. When comparing your last output of readelf with the output you posted yesterday, there are several differences apart from the changed base address. Is this the same program? One strange thing is the file offset of your text segment. In you last output, the offset is 0x82000 and there is no section using the file offsets below that value. In your yesterday's output, the file offset for the text segement has a reasonable value of 0x1000.
I have tried the link address 0x1000000 for the init binary (loaded by core) and the link address 0x3000000 for launchpad (loaded by init) and both programs are loaded just fine. I also tried changing the link address of test-dde_linux26_usbhid to 0x1000000 (to see if the issue is related to DDE) and the result gets loaded without problems as well. In all cases, the file offset of the text segment is 0x1000.
Could you try changing the link address for a simple binary (e.g., init) first? - just to see if this issue is specific for your particular program.
BTW, are you using the Genode SVN or the last snapshot?
Regards Norman