#include <stdint.h>

__attribute__((__visibility__("hidden"))) void* __fdpic_fixup(void* map,
                                                              uintptr_t* a,
                                                              uintptr_t* z) {
  /* If map is a null pointer, the program was loaded by a
   * non-FDPIC-aware ELF loader, and fixups are not needed,
   * but the value for the GOT pointer is. */
  if (!map)
    return (void*)z[-1];

  struct {
    unsigned short version, nsegs;
    struct fdpic_loadseg {
      uintptr_t addr, p_vaddr, p_memsz;
    } segs[];
  }* lm = map;
  int nsegs = lm->nsegs, rseg = 0, vseg = 0;
  for (;;) {
    while (*a - lm->segs[rseg].p_vaddr >= lm->segs[rseg].p_memsz)
      if (++rseg == nsegs)
        rseg = 0;
    uintptr_t* r =
        (uintptr_t*)(*a + lm->segs[rseg].addr - lm->segs[rseg].p_vaddr);
    if (++a == z)
      return r;
    while (*r - lm->segs[vseg].p_vaddr >= lm->segs[vseg].p_memsz)
      if (++vseg == nsegs)
        vseg = 0;
    *r += lm->segs[vseg].addr - lm->segs[vseg].p_vaddr;
  }
}
