regcomp: propagate allocation failures
[musl] / src / internal / dynlink.h
index 8621d2d..86f379e 100644 (file)
@@ -36,13 +36,44 @@ enum {
        REL_TPOFF,
        REL_TPOFF_NEG,
        REL_TLSDESC,
+       REL_FUNCDESC,
+       REL_FUNCDESC_VAL,
+};
+
+struct fdpic_loadseg {
+       uintptr_t addr, p_vaddr, p_memsz;
+};
+
+struct fdpic_loadmap {
+       unsigned short version, nsegs;
+       struct fdpic_loadseg segs[];
+};
+
+struct fdpic_dummy_loadmap {
+       unsigned short version, nsegs;
+       struct fdpic_loadseg segs[1];
 };
 
 #include "reloc.h"
 
-#define IS_RELATIVE(x) ( \
+#ifndef FDPIC_CONSTDISP_FLAG
+#define FDPIC_CONSTDISP_FLAG 0
+#endif
+
+#ifndef DL_FDPIC
+#define DL_FDPIC 0
+#endif
+
+#if !DL_FDPIC
+#define IS_RELATIVE(x,s) ( \
        (R_TYPE(x) == REL_RELATIVE) || \
        (R_TYPE(x) == REL_SYM_OR_REL && !R_SYM(x)) )
+#else
+#define IS_RELATIVE(x,s) ( ( \
+       (R_TYPE(x) == REL_FUNCDESC_VAL) || \
+       (R_TYPE(x) == REL_SYMBOLIC) ) \
+       && (((s)[R_SYM(x)].st_info & 0xf) == STT_SECTION) )
+#endif
 
 #ifndef NEED_MIPS_GOT_RELOCS
 #define NEED_MIPS_GOT_RELOCS 0