microsoft / ebpf-for-windows

eBPF implementation that runs on top of Windows
MIT License
2.95k stars 240 forks source link

Discern ELF targeting eBPF for Windows from ones targeting Linux #3956

Open lmb opened 1 month ago

lmb commented 1 month ago

Describe the feature you'd like supported

Right now it is not possible to determine the target platform from the contents of an ELF. A program compiled against Linux headers looks the same as a programs compiled against Windows ones. This is a problem for projects which need to support loading ELF from both platforms because while the ELF are superficially similar the contents aren't compatible:

There should be a way for toolchains to figure out the platform of an ELF.

Proposed solution

  1. Add a new ELF section similar to .license which contains a string that indicates the platform, e.g. windows or linux.
  2. Somehow set the ELF OS/ABI field to something meaningful.
    $ readelf -h testdata/loader-clang-el.elf 
    ELF Header:
     Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
     Class:                             ELF64
     Data:                              2's complement, little endian
     Version:                           1 (current)
     OS/ABI:                            UNIX - System V
     ABI Version:                       0

It would be best if this was coordinated with upstream libbpf somehow.

Additional context

No response

lmb commented 4 weeks ago

I'll send a PR which adds a temporary workaround to one of the headers in this project. I won't do the upstream discussion how to make this cross platform.