GitXplorerGitXplorer
t

gcompat

public
0 stars
0 forks
0 issues

Commits

List of commits on branch current.
Unverified
30e0fafb3f39274bd3617397a796c680f9ce4da5

Fix typo in release date

ffirasuke committed 2 years ago
Verified
b7bfe0b08c52fdc72e0c1d9d4dcb2129f1642bd6

Update documentation for 1.1 release

aawilfox committed 2 years ago
Verified
f0de9c6f13eeb2e20506aae0a315daabfaf2e956

CHANGELOG: Add pthread section

aawilfox committed 2 years ago
Unverified
36f21a6f96303bcb37555983bf4087bd042d8a9c

pthread: add pthread_mutexattr_[get|set]kind_np

kkaniini committed 2 years ago
Verified
f23fb58690246d0526f42316c9a35274e34ffaf9

stdio: Hook fopen(3) to intercept /proc/self/exe

aawilfox committed 2 years ago
Verified
158f2b53d81c9a453df0124a7ac2153c3f8286da

Update CHANGELOG for 1.1

aawilfox committed 2 years ago

README

The README file for this repository.

==================== README for gcompat

:Authors:

  • A. Wilcox, initial concept, maintainer, lead developer
  • Adélie Linux and its contributors, development :Status: Production :Copyright: © 2022 Adélie Linux and its contributors. NCSA open source license.

.. image:: https://img.shields.io/badge/chat-on%20IRC-blue.svg :target: ircs://irc.interlinked.me:6697/#Adelie-Support

.. image:: https://img.shields.io/codacy/grade/1e94efed5989436fa416ede784d4f7b6.svg :target: https://app.codacy.com/project/awilfox/gcompat/dashboard

.. image:: https://img.shields.io/coverity/scan/18278.svg :target: https://scan.coverity.com/projects/adelielinux-gcompat

.. image:: https://img.shields.io/badge/license-NCSA-lightgrey.svg :target: LICENSE

.. image:: https://repology.org/badge/vertical-allrepos/gcompat.svg :target: https://repology.org/project/gcompat/versions

.. image:: https://travis-ci.org/AdelieLinux/gcompat.svg?branch=current :target: https://travis-ci.org/AdelieLinux/gcompat

Introduction

This distribution contains the implementation of gcompat, a library which provides glibc-compatible APIs for use on musl libc systems.

This library is designed to be used for binaries that are already compiled against glibc. It does not contain any headers, and cannot be used to build software that requires glibc. It is instead recommended that any software that requires glibc APIs be modified to become more portable.

This library can optionally be compiled with other libraries to make a single, unfied solution. This can include fts_, libucontext_, obstack_, and others.

gcompat additionally provides a loader stub. This is a small library that has the same name as the glibc dynamic linker on glibc platforms; when a binary is run that uses glibc as its dynamic linker, the stub will run, redirecting it to use musl and automatically preloading the gcompat library.

.. _fts: https://github.com/pullmoll/musl-fts/ .. _libucontext: https://github.com/kaniini/libucontext/ .. _obstack: https://github.com/pullmoll/musl-obstack/

License

This library is provided under the NCSA open source license.


Changes

Any changes to this repository must be reviewed before being pushed to the current branch. There are no exceptions to this rule. For security-sensitive updates, contact the Security Team at sec-bugs@adelielinux.org.

Background

Many applications distributed for Linux are built against glibc. Unfortunately, many of glibc's internals are leaked out in to the resultant binary which makes it difficult or impossible to run these binaries on systems using the musl libc_.

While the goal of Adélie Linux is to support only true Libre Software that can be built from source code, we recognise that some users may require the ability to run pre-compiled binaries on their computers. This may include older software that does not compile with modern compilers, or non-libre software such as firmware or device management software.

.. _musl libc: http://www.musl-libc.org/

Supported Environments

The following architectures are supported:

  • x86 (32-bit)

    This is a Tier 1 architecture in the Adélie Linux system, as pmmx.

  • x86_64

    This is a Tier 1 architecture in the Adélie Linux system.

  • armv6+ (as arm)

    This is a Tier 2 architecture in the Adélie Linux system, as armv6 and armv7. As such, it may not receive thorough testing.

  • aarch64

    This is a Tier 1 architecture in the Adélie Linux system.

  • ppc (32-bit)

    This is a Tier 1 architecture in the Adélie Linux system.

  • ppc64

    This is a Tier 1 architecture in the Adélie Linux system. Only the ELFv2 ABI is supported, and only Big Endian modes of operation are tested by the release team. Most glibc installations use ELFv1; only Void Linux currently utilises ELFv2 and glibc. For that reason, it is difficult to test gcompat on ppc64.

Building

In order to build correctly, the gcompat build system requires a few details about the host environment, regarding both the musl host and glibc target. To provide this information to the build system, you will need to set the following variables or pass them to make.

  • LINKER_PATH

    The location of the musl ELF interpreter. On PowerPC, this is /lib/ld-musl-powerpc64.so.1.

  • LOADER_NAME

    The location of the glibc ELF interpreter. On PowerPC, this is ld.so.2.

You may additionally specify any of the following optional variables for further customisation:

  • DESTDIR

    The directory in which to install files. The default value is /.

  • LIBGCOMPAT_PATH

    The location in which to install libgcompat.so, relative to DESTDIR. The default value is /lib/libgcompat.so.0.

  • LOADER_PATH

    The location in which to install the glibc interpreter stub. The default value is /lib/$LOADER_NAME.

  • WITH_LIBUCONTEXT

    Determines whether to build with libucontext_.

For example, on an x86_64 musl host and x86_64 glibc target, you may run:

$ make LINKER_PATH=/lib/ld-musl-x86_64.so.1 LOADER_NAME=ld-linux-x86-64.so.2

$ make LINKER_PATH=/lib/ld-musl-x86_64.so.1 LOADER_NAME=ld-linux-x86-64.so.2 install

Please note that the gcompat build system does not attempt to guess the correct values for you; specifying at least LINKER_PATH and LOADER_NAME are required.

Usage

Running binaries linked against glibc


If the values specified during build were correct, programs built for glibc
should run normally on your musl host.  If they are not working, check the
program's ELF interpreter entry, using scanelf(8) like so:

::

  $ scanelf -i ~/glibcfile
   TYPE   INTERP FILE
  ET_EXEC /lib64/ld-linux-x86-64.so.2 /home/kaniini/glibcfile

If the interpreter path is different than expected, use PatchELF or install a
symlink from ``LOADER_PATH`` to the specified interpreter.


Using glibc binaries via dlopen(3) from a musl program

There are two ways to accomplish this:

  • You can add libgcompat.so to the DT_NEEDED entries in the ELF that you want to have the gcompat symbols available in. Use a tool such as PatchELF for this.

  • Alternatively, you can link the musl binary against libgcompat.

Environment variables


* ``GLIBC_FAKE_VERSION``

  The value of ``GLIBC_FAKE_VERSION`` will be returned as the result of
  ``gnu_get_libc_version``.  The current default is "2.8".

* ``GLIBC_FAKE_DEBUG``

  Setting this variable will cause dlmopen and dlvsym to display the overrides
  they are performing, and may cause additional output to stderr with other
  functions in the future.




Reporting Issues
================

gcompat is released by the Adélie Linux project in the hopes that it is useful
to the community.  Current issues may be found at our BTS_; you may also
`submit an issue`_ there.

For general discussion, questions, or to submit a patch, please use the gcompat
mailing list, hosted on `WTI Lists`_.

.. _BTS: https://git.adelielinux.org/adelie/gcompat/-/issues
.. _`submit an issue`: https://git.adelielinux.org/adelie/gcompat/-/issues/new
.. _`WTI Lists`: https://lists.wilcox-tech.com/