a7480ea65652f7bb2211c2a70623165ff2e3bd7f
Instead of a single source of symbols, now linker keeps a list of DSO (former Library) objects with their own symbols map. That helps to process R_X86_64_COPY relocations correctly. For example, if 'a.out' executable with dependencies ['libstdc++.so', 'libc.so'] is being loaded and 'a.out' uses 'stdout' symbol from 'libc.so', its relocation process goes as follows: - linker processes relocation entry 'stdout' of type R_X86_64_GLOB_DAT from 'libc.so', - it goes through object list ['a.out', 'libstdc++.so', 'libc.so'] to find first object that exports 'stdout' symbol. The symbol is in 'a.out' with the value e.g. '0x404070', - linker sets 'stdout' symbol GOT entry in 'libc.so' to '0x404070', .... - linker processes relocation entry 'stdout' of type R_X86_64_COPY from 'a.out', - it goes through object list excluding 'a.out': ['libstdc++.so', 'libc.so']. The symbol is found in 'libc.so', - linker copies the 'stdout' symbol content from 'libc.so' to memory at address '0x404070' (in 'a.out' object). Objects are relocated in reverse order they were loaded. So in the example above, linker starts with relocating 'libc.so' and ends with 'a.out'. It is necessary e.g. when linking with 'libstdc++.so' - there are many relocations which symbols are found in 'libstdc++.so', so they need to be resolved before their contents are copied to 'a.out'. That also matches GNU ld.so behavior.
relibc 
relibc is a portable POSIX C standard library written in Rust. It is under heavy development, and currently supports Redox and Linux.
The motivation for this project is twofold: Reduce issues the redox crew was having with newlib, and create a safer alternative to a C standard library written in C. It is mainly designed to be used under redox, as an alternative to newlib, but it also supports linux syscalls via the sc crate.
Contributing
Supported OSes
- Redox OS
- Linux
Supported architectures
- x86_64
- Aarch64
Description
RedBear Operating System, based on RedoxOS. Licenced under MIT license.
https://redbearos.org
Languages
C
37.5%
C++
37.2%
JavaScript
6.7%
QML
3.4%
HTML
3.2%
Other
11.4%