X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-elf.c;h=dcae966ca2b815513b2b0a2d04c89d714174bbae;hb=8ca68914bea06267bce3cacdec8c821a7821e1a9;hp=8d3fc573f1b4fe8f0cbf655c54fa329c77efd2d7;hpb=4c5dac0d3db2e2e6daef2f5e137abc2e93ed0302;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-elf.c b/liblttng-ust/lttng-ust-elf.c index 8d3fc573..dcae966c 100644 --- a/liblttng-ust/lttng-ust-elf.c +++ b/liblttng-ust/lttng-ust-elf.c @@ -39,7 +39,7 @@ struct lttng_ust_elf_phdr *lttng_ust_elf_get_phdr(struct lttng_ust_elf *elf, uint16_t index) { struct lttng_ust_elf_phdr *phdr = NULL; - long offset; + off_t offset; if (!elf) { goto error; @@ -54,7 +54,8 @@ struct lttng_ust_elf_phdr *lttng_ust_elf_get_phdr(struct lttng_ust_elf *elf, goto error; } - offset = elf->ehdr->e_phoff + index * elf->ehdr->e_phentsize; + offset = (off_t) elf->ehdr->e_phoff + + (off_t) index * elf->ehdr->e_phentsize; if (lseek(elf->fd, offset, SEEK_SET) < 0) { goto error; } @@ -117,7 +118,7 @@ struct lttng_ust_elf_shdr *lttng_ust_elf_get_shdr(struct lttng_ust_elf *elf, } offset = (off_t) elf->ehdr->e_shoff - + (off_t) index * elf->ehdr->e_shentsize; + + (off_t) index * elf->ehdr->e_shentsize; if (lseek(elf->fd, offset, SEEK_SET) < 0) { goto error; } @@ -161,7 +162,7 @@ error: * If no name is found, NULL is returned. */ static -char *lttng_ust_elf_get_section_name(struct lttng_ust_elf *elf, uint32_t offset) +char *lttng_ust_elf_get_section_name(struct lttng_ust_elf *elf, off_t offset) { char *name = NULL; size_t len = 0, to_read; /* len does not include \0 */ @@ -404,11 +405,10 @@ error: static int lttng_ust_elf_get_build_id_from_segment( struct lttng_ust_elf *elf, uint8_t **build_id, size_t *length, - uint64_t offset, uint64_t segment_end, int *found) + off_t offset, off_t segment_end) { uint8_t *_build_id = NULL; /* Silence old gcc warning. */ size_t _length = 0; /* Silence old gcc warning. */ - int _found = 0; while (offset < segment_end) { struct lttng_ust_elf_nhdr nhdr; @@ -465,18 +465,17 @@ int lttng_ust_elf_get_build_id_from_segment( goto error; } - _found = 1; break; } - if (_found) { + if (_build_id) { *build_id = _build_id; *length = _length; } - *found = _found; return 0; error: + free(_build_id); return -1; } @@ -499,14 +498,13 @@ int lttng_ust_elf_get_build_id(struct lttng_ust_elf *elf, uint8_t **build_id, uint16_t i; uint8_t *_build_id = NULL; /* Silence old gcc warning. */ size_t _length = 0; /* Silence old gcc warning. */ - int _found = 0; if (!elf || !build_id || !length || !found) { goto error; } for (i = 0; i < elf->ehdr->e_phnum; ++i) { - uint64_t offset, segment_end; + off_t offset, segment_end; struct lttng_ust_elf_phdr *phdr; int ret = 0; @@ -523,26 +521,28 @@ int lttng_ust_elf_get_build_id(struct lttng_ust_elf *elf, uint8_t **build_id, offset = phdr->p_offset; segment_end = offset + phdr->p_filesz; ret = lttng_ust_elf_get_build_id_from_segment( - elf, &_build_id, &_length, offset, segment_end, - &_found); + elf, &_build_id, &_length, offset, segment_end); next_loop: free(phdr); if (ret) { goto error; } - if (_found) { + if (_build_id) { break; } } - if (_found) { + if (_build_id) { *build_id = _build_id; *length = _length; + *found = 1; + } else { + *found = 0; } - *found = _found; return 0; error: + free(_build_id); return -1; } @@ -558,16 +558,14 @@ error: */ int lttng_ust_elf_get_debug_link_from_section(struct lttng_ust_elf *elf, char **filename, uint32_t *crc, - int *found, struct lttng_ust_elf_shdr *shdr) { - int _found = 0; char *_filename = NULL; /* Silence old gcc warning. */ size_t filename_len; char *section_name = NULL; uint32_t _crc = 0; /* Silence old gcc warning. */ - if (!elf || !filename || !crc || !found || !shdr) { + if (!elf || !filename || !crc || !shdr) { goto error; } @@ -610,23 +608,18 @@ int lttng_ust_elf_get_debug_link_from_section(struct lttng_ust_elf *elf, _crc = bswap_32(_crc); } - _found = 1; - end: free(section_name); - if (_found) { + if (_filename) { *filename = _filename; *crc = _crc; } - *found = _found; return 0; error: - if (section_name) { - free(section_name); - } - + free(_filename); + free(section_name); return -1; } @@ -645,7 +638,6 @@ int lttng_ust_elf_get_debug_link(struct lttng_ust_elf *elf, char **filename, { int ret; uint16_t i; - int _found = 0; char *_filename = NULL; /* Silence old gcc warning. */ uint32_t _crc = 0; /* Silence old gcc warning. */ @@ -662,24 +654,28 @@ int lttng_ust_elf_get_debug_link(struct lttng_ust_elf *elf, char **filename, } ret = lttng_ust_elf_get_debug_link_from_section( - elf, &_filename, &_crc, &_found, shdr); + elf, &_filename, &_crc, shdr); free(shdr); if (ret) { goto error; } - if (_found) { + if (_filename) { break; } } - if (_found) { + if (_filename) { *filename = _filename; *crc = _crc; + *found = 1; + } else { + *found = 0; } - *found = _found; return 0; + error: + free(_filename); return -1; }