From: Nick Alcock Date: Tue, 21 Jul 2020 14:38:08 +0000 (+0100) Subject: libctf: fixes for systems on which sizeof (void *) > sizeof (long) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8c419a91d761989b824d1bbe3b4575068317181e;p=binutils-gdb.git libctf: fixes for systems on which sizeof (void *) > sizeof (long) Systems like mingw64 have pointers that can only be represented by 'long long'. Consistently cast integers stored in pointers through uintptr_t to cater for this. libctf/ * ctf-create.c (ctf_dtd_insert): Add uintptr_t casts. (ctf_dtd_delete): Likewise. (ctf_dtd_lookup): Likewise. (ctf_rollback): Likewise. * ctf-hash.c (ctf_hash_lookup_type): Likewise. * ctf-types.c (ctf_lookup_by_rawhash): Likewise. --- diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 9183d2b7d65..6887c3ff869 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,12 @@ +2020-07-22 Nick Alcock + + * ctf-create.c (ctf_dtd_insert): Add uintptr_t casts. + (ctf_dtd_delete): Likewise. + (ctf_dtd_lookup): Likewise. + (ctf_rollback): Likewise. + * ctf-hash.c (ctf_hash_lookup_type): Likewise. + * ctf-types.c (ctf_lookup_by_rawhash): Likewise. + 2020-07-22 Nick Alcock * ctf-lookup.c (ctf_lookup_by_name): Adjust. diff --git a/libctf/ctf-create.c b/libctf/ctf-create.c index 35c286c3b40..ee8757549fe 100644 --- a/libctf/ctf-create.c +++ b/libctf/ctf-create.c @@ -617,16 +617,19 @@ int ctf_dtd_insert (ctf_file_t *fp, ctf_dtdef_t *dtd, int flag, int kind) { const char *name; - if (ctf_dynhash_insert (fp->ctf_dthash, (void *) dtd->dtd_type, dtd) < 0) + if (ctf_dynhash_insert (fp->ctf_dthash, (void *) (uintptr_t) dtd->dtd_type, + dtd) < 0) return -1; if (flag == CTF_ADD_ROOT && dtd->dtd_data.ctt_name && (name = ctf_strraw (fp, dtd->dtd_data.ctt_name)) != NULL) { if (ctf_dynhash_insert (ctf_name_table (fp, kind)->ctn_writable, - (char *) name, (void *) dtd->dtd_type) < 0) + (char *) name, (void *) (uintptr_t) + dtd->dtd_type) < 0) { - ctf_dynhash_remove (fp->ctf_dthash, (void *) dtd->dtd_type); + ctf_dynhash_remove (fp->ctf_dthash, (void *) (uintptr_t) + dtd->dtd_type); return -1; } } @@ -642,7 +645,7 @@ ctf_dtd_delete (ctf_file_t *fp, ctf_dtdef_t *dtd) int name_kind = kind; const char *name; - ctf_dynhash_remove (fp->ctf_dthash, (void *) dtd->dtd_type); + ctf_dynhash_remove (fp->ctf_dthash, (void *) (uintptr_t) dtd->dtd_type); switch (kind) { @@ -682,7 +685,8 @@ ctf_dtd_delete (ctf_file_t *fp, ctf_dtdef_t *dtd) ctf_dtdef_t * ctf_dtd_lookup (const ctf_file_t *fp, ctf_id_t type) { - return (ctf_dtdef_t *) ctf_dynhash_lookup (fp->ctf_dthash, (void *) type); + return (ctf_dtdef_t *) + ctf_dynhash_lookup (fp->ctf_dthash, (void *) (uintptr_t) type); } ctf_dtdef_t * @@ -794,7 +798,7 @@ ctf_rollback (ctf_file_t *fp, ctf_snapshot_id_t id) ctf_str_remove_ref (fp, name, &dtd->dtd_data.ctt_name); } - ctf_dynhash_remove (fp->ctf_dthash, (void *) dtd->dtd_type); + ctf_dynhash_remove (fp->ctf_dthash, (void *) (uintptr_t) dtd->dtd_type); ctf_dtd_delete (fp, dtd); } diff --git a/libctf/ctf-hash.c b/libctf/ctf-hash.c index 297526094cc..d6e9f5e3b6e 100644 --- a/libctf/ctf-hash.c +++ b/libctf/ctf-hash.c @@ -829,7 +829,7 @@ ctf_hash_lookup_type (ctf_hash_t *hp, ctf_file_t *fp __attribute__ ((__unused__) slot = ctf_hashtab_lookup ((struct htab *) hp, key, NO_INSERT); if (slot) - return (ctf_id_t) ((*slot)->value); + return (ctf_id_t) (uintptr_t) ((*slot)->value); return 0; } diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c index ddcca66a282..4843de38d92 100644 --- a/libctf/ctf-types.c +++ b/libctf/ctf-types.c @@ -658,7 +658,7 @@ ctf_id_t ctf_lookup_by_rawhash (ctf_file_t *fp, ctf_names_t *np, const char *nam ctf_id_t id; if (fp->ctf_flags & LCTF_RDWR) - id = (ctf_id_t) ctf_dynhash_lookup (np->ctn_writable, name); + id = (ctf_id_t) (uintptr_t) ctf_dynhash_lookup (np->ctn_writable, name); else id = ctf_hash_lookup_type (np->ctn_readonly, fp, name); return id;