sylware / nyanlinux (public) (License: AFFERO GPLv3) (since 2019-09-09) (hash sha1)
scripts for a lean, from scratch, amd hardware, linux distro
List of commits:
Subject Hash Author Date (UTC)
improve EDLF64 draft 48938c705c4f10e898677ec6e321dfad8d892f3f Sylvain BERTRAND 2023-07-07 18:36:15
elf toolbox and less toxic format draft a2ab4235350f04975de513911b7a340e2eb50ef3 Sylvain BERTRAND 2023-07-07 17:26:40
update of some image pagkages 7d8a5e8a5e20ab58e585a5f9d4270054285dba8c Sylvain BERTRAND 2023-07-05 23:14:01
gcc 12.2 won't build c++ threading all the time. d8560808bd62a198bc446153602c658141238c01 Sylvain BERTRAND 2023-07-02 16:56:10
Gfx stack update 50e5991a466541ebb88456918f6cc0bad7e1bfb8 Sylvain BERTRAND 2023-07-01 13:19:49
refreshing various components 22c025e6a7019283775b45742a8095a26d1d9b51 Sylvain BERTRAND 2023-07-01 00:16:51
Gfx stack update d91a56e63cb4e61ce950166ee90977f9cb0f7c57 Sylvain BERTRAND 2023-06-24 17:28:11
Gfx stack update 5053fdee70c5a2656a39391f9ec0924b680cb63f Sylvain BERTRAND 2023-06-17 13:08:44
Gfx stack update a8f4d317da64e4728a07332d7b312b0163a9a117 Sylvain BERTRAND 2023-06-10 13:00:40
Gfx stack update 5a50b752ee1174f40b4ac04b0c4ea40def0f003e Sylvain BERTRAND 2023-06-03 13:07:31
Gfx stack update 8d0226a320e934c81b0ffbca7203ab25cfc801ae Sylvain BERTRAND 2023-05-27 13:19:40
Gfx stack update 1b4924dbae0b406ec5f8e9fdc85d0c9c5899d505 Sylvain BERTRAND 2023-05-20 19:39:21
Gfx stack update 98ed4e3167334c8e605f642d8cadb9249078bf84 Sylvain BERTRAND 2023-05-13 14:54:30
Gfx stack update 9adee44d5eb4278e6beb28ec35cae1d7a61bfa49 Sylvain BERTRAND 2023-05-06 17:58:22
Gfx stack update a1e169843a89e65cbeefe0582bc27f5981f2501e Sylvain BERTRAND 2023-04-30 13:34:07
links: 2.29 0b4834c00b761ea5633e94dc31841fe4c0124ac5 Sylvain BERTRAND 2023-04-25 16:27:54
Gfx stack update 1049238ce63d50e058a2f9e96c8651f52c64db15 Sylvain BERTRAND 2023-04-22 17:10:22
Gfx stack update b8b51323aedb5d4c08a829dd52313bc39baa101c Sylvain BERTRAND 2023-04-16 11:21:58
Gfx stack update 21e2397a6d45fa31198beccb2a3673d9dcefaa06 Sylvain BERTRAND 2023-04-02 13:57:56
alsa update: 1.2.8, still crackling sound a2ac619da94ccf6a21a72ef700f5875aadd6085f Sylvain BERTRAND 2023-03-26 17:42:18
Commit 48938c705c4f10e898677ec6e321dfad8d892f3f - improve EDLF64 draft
Author: Sylvain BERTRAND
Author date (UTC): 2023-07-07 18:36
Committer name: Sylvain BERTRAND
Committer date (UTC): 2023-07-07 18:36
Parent(s): a2ab4235350f04975de513911b7a340e2eb50ef3
Signer:
Signing key:
Signing status: N
Tree: b9ce745314c8318f827e6e379f6f6d6a85ad8ad8
File Lines added Lines deleted
files/EDLF64.draft 22 17
File files/EDLF64.draft changed (mode: 100644) (index 90f01d6..e6fa9a0)
... ... Endianness is the one from the CPU. Offsets 0->edlf_hdr_bytes_n-1 are obviously
17 17 A loader64 instance will keep a registry of what was loaded via reference counting. Usually, there A loader64 instance will keep a registry of what was loaded via reference counting. Usually, there
18 18 will be only one static instance of loader64 per process inited by the process_entry function. will be only one static instance of loader64 per process inited by the process_entry function.
19 19
20 0x00 uint64_t (*open)( /*INPUT*/ void *pathname, /* we presume the pathname is self-sizing */
20 uint64_t loader64_open( /*INPUT*/ void *pathname, /* we presume the pathname is self-sizing */
21 21 /*OUTPUT*/ uint64_t *handle, void **start); /*OUTPUT*/ uint64_t *handle, void **start);
22 22
23 23 Must be reentrant/thread safe. Must be reentrant/thread safe.
 
... ... will be only one static instance of loader64 per process inited by the process_e
40 40 NOTE: we use a handle, that to avoid to have to map a start virtual address to some loader NOTE: we use a handle, that to avoid to have to map a start virtual address to some loader
41 41 internals (for instance, the handle could be directly an offset into such internals). internals (for instance, the handle could be directly an offset into such internals).
42 42
43 0x08 uint64_t (*close)(/*INPUT*/ uint64_t handle);
43 uint64_t loader64_close(/*INPUT*/ uint64_t handle);
44 44
45 45 Must be reentrant/thread safe. Return 0 if ok, non-zero if something wrong did happen while Must be reentrant/thread safe. Return 0 if ok, non-zero if something wrong did happen while
46 46 closing the edlf64 file. closing the edlf64 file.
 
... ... will be only one static instance of loader64 per process inited by the process_e
50 50
51 51 Init/fini functions have the responsibility to keep the dynamic library state consistent (for Init/fini functions have the responsibility to keep the dynamic library state consistent (for
52 52 instance using reference counting like a loader instance). instance using reference counting like a loader instance).
53 ----
54 0x10 loader64_bytes_n.
55 53 ==================================================================================================== ====================================================================================================
56 54 EDLF64 is about loading only one RWX memory segment. EDLF64 is about loading only one RWX memory segment.
57 55 ==================================================================================================== ====================================================================================================
58 56 A EDLF64 executable may honor the following environment variable in order to lookup for dynamic A EDLF64 executable may honor the following environment variable in order to lookup for dynamic
59 57 libraries. Of course, only on platforms where it is possible. Such incompatible platforms should libraries. Of course, only on platforms where it is possible. Such incompatible platforms should
60 defines their own EDLF64_LIBRARY_PATH.
58 defines their own "EDLF64_LIBRARY_PATH way".
61 59
62 60 EDLF64_LIBRARY_PATH environment variable to lookup for EDLF64 dynamic libraries: byte string EDLF64_LIBRARY_PATH environment variable to lookup for EDLF64 dynamic libraries: byte string
63 61 ending with a 0x00 byte. Each path from EDLF64_LIBRARY_PATH is prepended to a dynamic library name. ending with a 0x00 byte. Each path from EDLF64_LIBRARY_PATH is prepended to a dynamic library name.
 
... ... mostly the same than the SYSV ABI (arg has no argc). The process_entry function
80 78 its stack:could be a "mmap" system call or a part of the "bss", namely from the extra memory past its stack:could be a "mmap" system call or a part of the "bss", namely from the extra memory past
81 79 the end of the loaded file (including a guard memory page or not), or blunty book some room into the the end of the loaded file (including a guard memory page or not), or blunty book some room into the
82 80 file, etc. file, etc.
83 On "mmap/munmap" platforms, process_info must be cleanely munmap-able. Other platforms may implement
84 another mechanism to let process_entry remove/free/reuse such bytes from the process.
81 On "mmap/munmap" platforms, process_info must be cleanely munmap-able. Other platform types may
82 implement other mechanisms to let process_entry remove/free/reuse such bytes from the process.
85 83
86 84 For the executable, you may need its path in order to load private dynamic libraries based on For the executable, you may need its path in order to load private dynamic libraries based on
87 85 its file system location. On linux it is possible only if the /proc file system is mounted and it its file system location. On linux it is possible only if the /proc file system is mounted and it
 
... ... variable).
92 90 ==================================================================================================== ====================================================================================================
93 91 C prototype of resolve function: C prototype of resolve function:
94 92
95 uint64_t resolve( /*INPUT*/ uint64_t *symbol_id,
96 /*OUTPUT*/ void **symbol_virtual_address);
93 uint64_t resolve(
94 /*INPUT*/ uint64_t *symbol_id,
95 /*OUTPUT*/ void **symbol_virtual_address);
97 96
98 97 symbol_id is a 64bits unique id identifying a symbol (similar to kernel syscalls). Like kernel symbol_id is a 64bits unique id identifying a symbol (similar to kernel syscalls). Like kernel
99 98 syscalls, those symbol ids must be _EXTREMELY_ stable in time. You could segment the id space with syscalls, those symbol ids must be _EXTREMELY_ stable in time. You could segment the id space with
 
... ... categories (init calls, fini calls, etc, 64bits is huge).
101 100 Return 0 if ok, with the virtual address of the symbol via the symbol_virtual_address argument. Return 0 if ok, with the virtual address of the symbol via the symbol_virtual_address argument.
102 101 ==================================================================================================== ====================================================================================================
103 102 Recommended C prototype of an init function: Recommended C prototype of an init function:
104 uint64_t init( /*INPUT*/ void *process_info,uint64_t process_info_bytes_n,void *pathname,
105 void *loader64,
106 /*OUTPUT*/ void **fini));
103 uint64_t init(
104 /*INPUT*/ void *process_info, uint64_t process_info_bytes_n, void *pathname,
105 uint64_t (*loader64_open)(void *pathname, uint64_t *handle, void **start),
106 uint64_t (*loader64_close)(uint64_t handle),
107 /*OUTPUT*/ void (**fini)(void));
107 108
108 109 The process_info here may be a variant from the one provided by the kernel to process_entry. The process_info here may be a variant from the one provided by the kernel to process_entry.
109 Pathname is a pointer on the pathname used to load this edlf file. If successful, it should return
110 0. Do not expect process_info to stay in memory after the call.
110 Pathname is a pointer on the pathname used to load this edlf64 file. If successful, it should return
111 0. Do not expect process_info to stay in memory after the call. On x64/x86_64 with the SYSV ABI, if
112 going with more than 6 parameters, just init a transient structure to pass the whole data to work
113 around some ABI kludge.
111 114
112 115 Alternative C prototype of an init function: Alternative C prototype of an init function:
113 uint64_t init( /*INPUT*/ void *process_info,uint64_t process_info_bytes_n,int fd,
114 void *loader64,
115 /*OUTPUT*/ void **fini));
116 uint64_t init(
117 /*INPUT*/ void *process_info, uint64_t process_info_bytes_n, int fd,
118 uint64_t (*loader64_open)(void *pathname, uint64_t *handle, void **start),
119 uint64_t (*loader64_close)(uint64_t handle),
120 /*OUTPUT*/ void (**fini)(void));
116 121
117 122 Same thing than the previous one, but with the process file descriptor used to load/mmap the edlf64 Same thing than the previous one, but with the process file descriptor used to load/mmap the edlf64
118 123 file instead of the pathname. You could even add the directory file descriptor. file instead of the pathname. You could even add the directory file descriptor.
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/sylware/nyanlinux

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/sylware/nyanlinux

Clone this repository using git:
git clone git://git.rocketgit.com/user/sylware/nyanlinux

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main