OSv can run unmodified Linux applications which are complied with `-fPIC` 
or `-pie`. However, position dependent executables are not support.

Currently, OSv kernel image is mapped at low address space (0x 20 0000). 
Many position dependent executable executables also start at a low address, 
such as 0x 40 0040.

OSv Linear Address Space:


 ---------  0x 0000 0000 0000 0000

 |       | 

 ---------  0x 0000 0000 0020 0000  kernel_base    --\ 

 |       |                                           |- Kernel (Core ELF) - 
22M 

 ---------  0x 0000 0000 0180 0000  lzkernel_base  --/ 

 |       | 

 |--------  0x 0000 1000 0000 0000  program_base  --\ 

 |       |                                          |- s_program - 8G 

 |-------|  0x 0000 1002 0000 0000  --\           --X 

 |       |                             |- Program   | 

 |-------|  0x 0000 1004 0000 0000  --/             | 

 |       |                                          |- ELF Namespaces(max: 
32) - 256G 

 |       |  ......................                  | 

 |       |                                          | 

 |-------|  0x 0000 1042 0000 0000                --/ 

 |       | 

 ---------  0x ffff 8000 0000 0000  phys_mem  --\ 

 |       |                                      |- Main Area - 16T 

 ---------  0x ffff 9000 0000 0000            --X 

 |       |                                      |- Page Area - 16T 

 ---------  0x ffff a000 0000 0000            --X 

 |       |                                      |- Mempool Area - 16T 

 ---------  0x ffff b000 0000 0000            --X 

 |       |                                      |- Debug Area - 80T 

 ---------  0x ffff ffff ffff ffff            --/



Linux Linear Address Space:

 ---------  0x 0000 0000 0000 0000  --\

 |       |                            |- Reserved (Catch Exceptions of NULL/
Little Pointers) 

 ---------                          --X 

 |       |                            |- Text Segment 

 ---------                          --X 

 |       |                            |- Data Segment 

 ---------                          --X 

 |       |                            |- [Random] 

 ---------                          --X 

 |       |                            |- Heap 

 ---------                          --/   \/ 

 |       | 

 ---------                          --\ 

 |       |                            |- Memory Mapping Segment 

 ---------                          --/ 

 |       |                            |- [Random] 

 ---------                          --/ 

 |       | 

 ---------                          --\   /\ 

 |       |                            |- Stack 

 ---------                          --X 

 |       |                            |- [Random] 

 ---------                          --X 

 |       |                            |- Command-line Arguments 

 ---------                          --X 

 |       |                            |- Environment Variables 

 |       |                          --/ 

 --------- 

 |       | 

 ---------  0x 0000 7fff ffff ffff 

 |       | 

 |       |  -- Unused Space 

 |       | 

 ---------  0x ffff 8000 0000 0000  --\ 

 |       |                            | 

 |       |                            |- Kernel Space - 128T 

 |       |                            | 

 ---------  0x ffff ffff ffff ffff  --/



If OSv kernel image can be mapped to high address space like Linux ( 0x 
ffff 8000 0000 0000 ?), then low address space can be used for applications.
So, single position dependent executable can be supported like shared 
objects and PIE.

I have tried to do this, but it seems difficult for me. Can you give some 
advice?

Thank you!

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" 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.

Reply via email to