projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libctf: endianness fixes
[deliverable/binutils-gdb.git]
/
libctf
/
ctf-open.c
diff --git
a/libctf/ctf-open.c
b/libctf/ctf-open.c
index 14f7062590abe48f02ed7fb2ec831259d8a77e30..777a6b5ca63ac6dcfcd8a2da59965acdd06a467b 100644
(file)
--- a/
libctf/ctf-open.c
+++ b/
libctf/ctf-open.c
@@
-150,8
+150,7
@@
get_vbytes_common (unsigned short kind, ssize_t size _libctf_unused_,
case CTF_K_FLOAT:
return (sizeof (uint32_t));
case CTF_K_SLICE:
case CTF_K_FLOAT:
return (sizeof (uint32_t));
case CTF_K_SLICE:
- return (offsetof (ctf_slice_t, cts_bits) +
- sizeof (((ctf_slice_t *)0)->cts_bits));
+ return (sizeof (ctf_slice_t));
case CTF_K_ENUM:
return (sizeof (ctf_enum_t) * vlen);
case CTF_K_FORWARD:
case CTF_K_ENUM:
return (sizeof (ctf_enum_t) * vlen);
case CTF_K_FORWARD:
@@
-1208,7
+1207,7
@@
ctf_bufopen (const ctf_sect_t *ctfsect, const ctf_sect_t *symsect,
const ctf_preamble_t *pp;
ctf_header_t hp;
ctf_file_t *fp;
const ctf_preamble_t *pp;
ctf_header_t hp;
ctf_file_t *fp;
- void *b
uf, *b
ase;
+ void *base;
size_t size, hdrsz;
int foreign_endian = 0;
int err;
size_t size, hdrsz;
int foreign_endian = 0;
int err;
@@
-1317,6
+1316,7
@@
ctf_bufopen (const ctf_sect_t *ctfsect, const ctf_sect_t *symsect,
uLongf dstlen;
const void *src;
int rc = Z_OK;
uLongf dstlen;
const void *src;
int rc = Z_OK;
+ void *buf;
if ((base = ctf_alloc (size + hdrsz)) == NULL)
return (ctf_set_open_errno (errp, ECTF_ZALLOC));
if ((base = ctf_alloc (size + hdrsz)) == NULL)
return (ctf_set_open_errno (errp, ECTF_ZALLOC));
@@
-1349,12
+1349,16
@@
ctf_bufopen (const ctf_sect_t *ctfsect, const ctf_sect_t *symsect,
{
if ((base = ctf_alloc (size + hdrsz)) == NULL)
return (ctf_set_open_errno (errp, ECTF_ZALLOC));
{
if ((base = ctf_alloc (size + hdrsz)) == NULL)
return (ctf_set_open_errno (errp, ECTF_ZALLOC));
+ memcpy (base, ctfsect->cts_data, size + hdrsz);
}
else
}
else
- {
- base = (void *) ctfsect->cts_data;
- buf = (unsigned char *) base + hdrsz;
- }
+ base = (void *) ctfsect->cts_data;
+
+ /* Flip the endianness of the copy of the header in the section, to avoid
+ ending up with a partially-endian-flipped file. */
+
+ if (foreign_endian)
+ flip_header ((ctf_header_t *) base);
/* Once we have uncompressed and validated the CTF data buffer, we can
proceed with allocating a ctf_file_t and initializing it.
/* Once we have uncompressed and validated the CTF data buffer, we can
proceed with allocating a ctf_file_t and initializing it.
This page took
0.023563 seconds
and
4
git commands to generate.