#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;
  }
}
