and _CTF_ITEM to expand as you like, then mention the macro name.
See the enum after this for an example. */
#define _CTF_ERRORS \
- _CTF_FIRST (ECTF_FMT, "File is not in CTF or ELF format.") \
+ _CTF_FIRST (ECTF_NEXT_END, "End of iteration.") \
+ _CTF_ITEM (ECTF_FMT, "File is not in CTF or ELF format.") \
_CTF_ITEM (ECTF_BFDERR, "BFD error.") \
_CTF_ITEM (ECTF_CTFVERS, "CTF dict version is too new for libctf.") \
_CTF_ITEM (ECTF_BFD_AMBIGUOUS, "Ambiguous BFD target.") \
_CTF_ITEM (ECTF_NOTYET, "Feature not yet implemented.") \
_CTF_ITEM (ECTF_INTERNAL, "Internal error: assertion failure.") \
_CTF_ITEM (ECTF_NONREPRESENTABLE, "Type not representable in CTF.") \
- _CTF_ITEM (ECTF_NEXT_END, "End of iteration.") \
_CTF_ITEM (ECTF_NEXT_WRONGFUN, "Wrong iteration function called.") \
_CTF_ITEM (ECTF_NEXT_WRONGFP, "Iteration entity changed in mid-iterate.") \
_CTF_ITEM (ECTF_FLAGS, "CTF header contains flags unknown to libctf.") \
return NULL;
}
+/* See ctf-inlines.h. */
+
+#ifdef ENABLE_LIBCTF_HASH_DEBUGGING
+int
+ctf_set_errno (ctf_dict_t *fp, int err)
+{
+ fp->ctf_errno = err;
+ /* Don't rely on CTF_ERR here as it will not properly sign extend on 64-bit
+ Windows ABI. */
+ return -1;
+}
+
+ctf_id_t
+ctf_set_typed_errno (ctf_dict_t *fp, int err)
+{
+ fp->ctf_errno = err;
+ return CTF_ERR;
+}
+#endif
+
/* Get and set CTF dict-wide flags. We are fairly strict about returning
errors here, to make it easier to determine programmatically which flags are
valid. */
return expr;
}
+/* Un-inline these functions if debugging, so you can drop breakpoints on the
+ setting of any error anywhere by the library. */
+
+#ifndef ENABLE_LIBCTF_HASH_DEBUGGING
static inline int
ctf_set_errno (ctf_dict_t *fp, int err)
{
fp->ctf_errno = err;
return CTF_ERR;
}
-
+#else
+extern int ctf_set_errno (ctf_dict_t *fp, int err);
+extern ctf_id_t ctf_set_typed_errno (ctf_dict_t *fp, int err);
+#endif
#ifdef __cplusplus
}