From 4e024bb4f5c8aa8b07459f7fbd65c35122127fd1 Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Wed, 22 Sep 2010 14:19:28 +0200 Subject: Remove compiler warnings when building the emulator. This forces -Wall during the build. Note that this patch doesn't remove all warnings, but most of the remaining ones are from upstream anyway. Change-Id: I8808d8495e99866e156ce5780d2e3c305eab491f --- Makefile.android | 5 ++ android/charmap.c | 2 +- android/config.c | 18 ++++++-- android/skin/argb.h | 2 +- android/skin/scaler.c | 2 +- android/skin/trackball.c | 3 +- android/utils/ini.c | 9 ++-- android/utils/mapfile.c | 4 +- audio/audio.c | 2 + audio/ossaudio.c | 17 +++++++ block/qcow2.c | 68 ++++++++++++++++++++++------ block/raw-posix.c | 10 ++-- distrib/sdl-1.2.12/src/video/x11/SDL_x11wm.c | 2 - elff/dwarf_defs.h | 4 +- elff/dwarf_die.cc | 2 +- elff/dwarf_die.h | 4 +- elff/dwarf_utils.cc | 8 ++-- elff/elf_alloc.h | 2 +- elff/elf_defs.h | 8 ++++ elff/elf_file.cc | 14 +++--- hw/goldfish_audio.c | 2 +- hw/goldfish_events_device.c | 1 + hw/goldfish_memlog.c | 20 +++++--- hw/goldfish_nand.c | 4 +- hw/goldfish_trace.c | 10 +++- hw/goldfish_tty.c | 4 +- memcheck/memcheck.c | 4 +- memcheck/memcheck_proc_management.c | 1 + memcheck/memcheck_util.c | 4 +- memcheck/memcheck_util.h | 2 +- osdep.h | 2 + path.c | 3 ++ qemu-char-android.c | 4 +- slirp-android/misc.c | 5 +- sockets.c | 50 ++++++++++---------- target-arm/op_helper.c | 9 +++- target-arm/translate.c | 2 +- telephony/remote_call.c | 2 +- trace.c | 1 + trace.h | 7 +++ usb-linux.c | 63 +++++++++++++------------- vl-android.c | 9 +++- 42 files changed, 262 insertions(+), 133 deletions(-) diff --git a/Makefile.android b/Makefile.android index 98968b9..70904f5 100644 --- a/Makefile.android +++ b/Makefile.android @@ -98,6 +98,11 @@ ifneq ($(combo_target)$(TARGET_SIMULATOR),HOST_true) endif endif +# Enable warning, except those related to missing field initializers +# (the QEMU coding style loves using these). +# +MY_CFLAGS += -Wall -Wno-missing-field-initializers + include $(CLEAR_VARS) ########################################################### diff --git a/android/charmap.c b/android/charmap.c index 553ad67..1d200e6 100644 --- a/android/charmap.c +++ b/android/charmap.c @@ -394,7 +394,7 @@ kcm_get_key_code(const char* key_name, unsigned short* key_code) { */ static int kcm_get_ushort_hex_val(const char* token, unsigned short* val) { - int hex_val = hex2int(token, strlen(token)); + int hex_val = hex2int((const uint8_t*)token, strlen(token)); // Make sure token format was ok and value doesn't exceed unsigned short. if (-1 == hex_val || 0 != (hex_val & ~0xFFFF)) { return -1; diff --git a/android/config.c b/android/config.c index 36fab11..2c37b03 100644 --- a/android/config.c +++ b/android/config.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "android/config.h" #include "android/utils/path.h" @@ -193,7 +194,7 @@ restart: s = data - 1; if(value) { - /* if we're looking for a value, then take anything + /* if we're looking for a value, then take anything * until the end of line. note that sharp signs do * not start comments then. the result will be stripped * from trailing whitespace. @@ -385,7 +386,12 @@ writer_write( Writer* w, const char* src, int len ) w->p += avail; if (w->p == w->end) { - write( w->fd, w->buff, w->p - w->buff ); + int ret; + do { + ret = write( w->fd, w->buff, w->p - w->buff ); + } while (ret < 0 && errno == EINTR); + if (ret < 0) + break; w->p = w->buff; } } @@ -394,8 +400,12 @@ writer_write( Writer* w, const char* src, int len ) static void writer_done( Writer* w ) { - if (w->p > w->buff) - write( w->fd, w->buff, w->p - w->buff ); + if (w->p > w->buff) { + int ret; + do { + ret = write( w->fd, w->buff, w->p - w->buff ); + } while (ret < 0 && errno == EINTR); + } close( w->fd ); } diff --git a/android/skin/argb.h b/android/skin/argb.h index b3f0a6d..436a9c8 100644 --- a/android/skin/argb.h +++ b/android/skin/argb.h @@ -134,7 +134,7 @@ mmx_interp255( mmx_t m1, mmx_t m2, mmx_t zero, int alpha ) typedef uint32_t argb_t; -#define ARGB_DECL_ZERO() argb_t _zero = 0 +#define ARGB_DECL_ZERO() /* nothing */ #define ARGB_DECL(x) argb_t x##_ag, x##_rb #define ARGB_DECL2(x1,x2) argb_t x1##_ag, x1##_rb, x2##_ag, x2##_rb #define ARGB_ZERO(x) (x##_ag = x##_rb = 0) diff --git a/android/skin/scaler.c b/android/skin/scaler.c index 59e212f..907c5ca 100644 --- a/android/skin/scaler.c +++ b/android/skin/scaler.c @@ -75,7 +75,7 @@ typedef struct { #define ARGB_SCALE_GENERIC scale_generic #define ARGB_SCALE_05_TO_10 scale_05_to_10 #define ARGB_SCALE_UP_BILINEAR scale_up_bilinear -#define ARGB_SCALE_UP_QUICK_4x4 scale_up_quick_4x4 +/* #define ARGB_SCALE_UP_QUICK_4x4 scale_up_quick_4x4 UNUSED */ #include "android/skin/argb.h" diff --git a/android/skin/trackball.c b/android/skin/trackball.c index b18923a..6fac1cb 100644 --- a/android/skin/trackball.c +++ b/android/skin/trackball.c @@ -12,6 +12,7 @@ #include "android/skin/trackball.h" #include "android/skin/image.h" #include "android/utils/system.h" +#include "user-events.h" #include /***********************************************************************/ @@ -448,7 +449,7 @@ trackball_move( TrackBall ball, int dx, int dy ) break; } - kbd_mouse_event(ddx, ddy, 1, 0); + user_event_mouse(ddx, ddy, 1, 0); } rotator_reset( rot, dx, dy ); diff --git a/android/utils/ini.c b/android/utils/ini.c index 95bb4e3..317d233 100644 --- a/android/utils/ini.c +++ b/android/utils/ini.c @@ -109,8 +109,8 @@ iniFile_getPairCount( IniFile* i ) } void -iniFile_getPair( IniFile* i, - int index, +iniFile_getPair( IniFile* i, + int index, const char* *pKey, const char* *pValue ) { @@ -251,6 +251,7 @@ iniFile_newFromFile( const char* filepath ) char* text; long size; IniFile* ini = NULL; + size_t len; if (fp == NULL) { D("could not open .ini file: %s: %s", @@ -275,8 +276,8 @@ iniFile_newFromFile( const char* filepath ) /* read the file, add a sentinel at the end of it */ AARRAY_NEW(text, size+1); - fread(text, 1, size, fp); - text[size] = 0; + len = fread(text, 1, size, fp); + text[len] = 0; ini = iniFile_newFromMemory(text, filepath); AFREE(text); diff --git a/android/utils/mapfile.c b/android/utils/mapfile.c index c8ba8e5..102dfd8 100644 --- a/android/utils/mapfile.c +++ b/android/utils/mapfile.c @@ -34,8 +34,8 @@ mapfile_open(const char* path, int oflag, int share_mode) { #ifdef WIN32 DWORD win32_share; - DWORD win32_desired_access; - DWORD win32_disposition; + DWORD win32_desired_access = GENERIC_READ; + DWORD win32_disposition = OPEN_EXISTING; DWORD win32_flags; /* Convert to Win32 desired access. */ diff --git a/audio/audio.c b/audio/audio.c index aa4102b..6f107dc 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -201,6 +201,7 @@ struct mixeng_volume nominal_volume = { #endif }; +#if 0 /* http://www.df.lth.se/~john_e/gems/gem002d.html */ /* http://www.multi-platforms.com/Tips/PopCount.htm */ uint32_t popcount (uint32_t u) @@ -217,6 +218,7 @@ inline uint32_t lsbindex (uint32_t u) { return popcount ((u&-u)-1); } +#endif #ifdef AUDIO_IS_FLAWLESS_AND_NO_CHECKS_ARE_REQURIED #error No its not diff --git a/audio/ossaudio.c b/audio/ossaudio.c index f946f79..ceb81ce 100644 --- a/audio/ossaudio.c +++ b/audio/ossaudio.c @@ -36,6 +36,23 @@ #define AUDIO_CAP "oss" #include "audio_int.h" +/* http://www.df.lth.se/~john_e/gems/gem002d.html */ +/* http://www.multi-platforms.com/Tips/PopCount.htm */ +uint32_t popcount (uint32_t u) +{ + u = ((u&0x55555555) + ((u>>1)&0x55555555)); + u = ((u&0x33333333) + ((u>>2)&0x33333333)); + u = ((u&0x0f0f0f0f) + ((u>>4)&0x0f0f0f0f)); + u = ((u&0x00ff00ff) + ((u>>8)&0x00ff00ff)); + u = ( u&0x0000ffff) + (u>>16); + return u; +} + +inline uint32_t lsbindex (uint32_t u) +{ + return popcount ((u&-u)-1); +} + typedef struct OSSVoiceOut { HWVoiceOut hw; void *pcm_buf; diff --git a/block/qcow2.c b/block/qcow2.c index aa8ff35..5ca20b2 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -71,7 +71,7 @@ static int qcow_probe(const uint8_t *buf, int buf_size, const char *filename) } -/* +/* * read qcow2 extension and fill bs * start reading from start_offset * finish reading upon magic of value 0 or when end_offset reached @@ -651,6 +651,35 @@ static int get_bits_from_size(size_t size) return res; } +static int write_all(int fd, const void *buff, size_t bufsize) +{ + int ret = 0; + const char *ptr = buff; + while (bufsize > 0) { + ret = write(fd, ptr, bufsize); + if (ret < 0) { + if (errno != EINTR) + return -1; + } else { + bufsize -= ret; + } + } + return 0; +} + +static int lseek_to(int fd, off_t offset) +{ + off_t ret; + do { + ret = lseek(fd, offset, SEEK_SET); + } while (ret == (off_t)-1 && errno == EINTR); + + if (ret == (off_t)-1) + return -1; + + return 0; +} + static int qcow_create2(const char *filename, int64_t total_size, const char *backing_file, const char *backing_format, int flags, size_t cluster_size) @@ -663,7 +692,6 @@ static int qcow_create2(const char *filename, int64_t total_size, QCowCreateState s1, *s = &s1; QCowExtension ext_bf = {0, 0}; - memset(s, 0, sizeof(*s)); fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); @@ -744,7 +772,8 @@ static int qcow_create2(const char *filename, int64_t total_size, ref_clusters * s->cluster_size); /* write all the data */ - write(fd, &header, sizeof(header)); + if (write_all(fd, &header, sizeof(header)) < 0) + goto FAIL; if (backing_file) { if (backing_format_len) { char zero[16]; @@ -753,29 +782,42 @@ static int qcow_create2(const char *filename, int64_t total_size, memset(zero, 0, sizeof(zero)); cpu_to_be32s(&ext_bf.magic); cpu_to_be32s(&ext_bf.len); - write(fd, &ext_bf, sizeof(ext_bf)); - write(fd, backing_format, backing_format_len); + if (write_all(fd, &ext_bf, sizeof(ext_bf)) < 0 || + write_all(fd, backing_format, backing_format_len) < 0) + goto FAIL; if (d>0) { - write(fd, zero, d); + if (write_all(fd, zero, d) < 0) + goto FAIL; } } - write(fd, backing_file, backing_filename_len); + if (write_all(fd, backing_file, backing_filename_len) < 0) + goto FAIL; } - lseek(fd, s->l1_table_offset, SEEK_SET); + if (lseek_to(fd, s->l1_table_offset) < 0) + goto FAIL; + tmp = 0; for(i = 0;i < l1_size; i++) { - write(fd, &tmp, sizeof(tmp)); + if (write_all(fd, &tmp, sizeof(tmp)) < 0) + goto FAIL; } - lseek(fd, s->refcount_table_offset, SEEK_SET); - write(fd, s->refcount_table, s->cluster_size); + if (lseek_to(fd, s->refcount_table_offset) < 0 || + write_all(fd, s->refcount_table, s->cluster_size) < 0) + goto FAIL; - lseek(fd, s->refcount_block_offset, SEEK_SET); - write(fd, s->refcount_block, ref_clusters * s->cluster_size); + if (lseek_to(fd, s->refcount_block_offset) < 0 || + write_all(fd, s->refcount_block, ref_clusters * s->cluster_size) < 0) + goto FAIL; qemu_free(s->refcount_table); qemu_free(s->refcount_block); close(fd); return 0; +FAIL: + qemu_free(s->refcount_table); + qemu_free(s->refcount_block); + close(fd); + return -errno; } static int qcow_create(const char *filename, QEMUOptionParameter *options) diff --git a/block/raw-posix.c b/block/raw-posix.c index 11effd7..0e9e343 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -570,7 +570,7 @@ static int posix_aio_init(void) PosixAioState *s; int fds[2]; struct qemu_paioinit ai; - + if (posix_aio_state) return 0; @@ -836,7 +836,7 @@ again: static int raw_create(const char *filename, QEMUOptionParameter *options) { - int fd; + int fd, ret; int64_t total_size = 0; /* Read out options */ @@ -851,8 +851,12 @@ static int raw_create(const char *filename, QEMUOptionParameter *options) 0644); if (fd < 0) return -EIO; - ftruncate(fd, total_size * 512); + do { + ret = ftruncate(fd, total_size * 512); + } while (ret < 0 && errno == EINTR); close(fd); + if (ret != 0) + return -errno; return 0; } diff --git a/distrib/sdl-1.2.12/src/video/x11/SDL_x11wm.c b/distrib/sdl-1.2.12/src/video/x11/SDL_x11wm.c index fe7e9ac..76706b3 100644 --- a/distrib/sdl-1.2.12/src/video/x11/SDL_x11wm.c +++ b/distrib/sdl-1.2.12/src/video/x11/SDL_x11wm.c @@ -334,7 +334,6 @@ int X11_IconifyWindow(_THIS) static void set_window_pos_nolock(_THIS, int x, int y) { - XWindowAttributes attr; int xNew, yNew; Window child; int xAdjust = X11_wmXAdjust; @@ -394,7 +393,6 @@ void X11_GetWindowPos(_THIS, int *px, int *py) SDL_Lock_EventThread(); { Window child; - Status ret; XTranslateCoordinates( SDL_Display, WMwindow, SDL_Root, 0, 0, px, py, &child ); } diff --git a/elff/dwarf_defs.h b/elff/dwarf_defs.h index 567df6a..04573e2 100644 --- a/elff/dwarf_defs.h +++ b/elff/dwarf_defs.h @@ -717,9 +717,9 @@ class DwarfAbbrDieArray { * hopping, that all Dwarf_Abbr_DIEs for the CU will fit into it. */ DwarfAbbrDieArray() - : count_(0), + : array_(&small_array_[0]), array_size_(ELFF_ARRAY_SIZE(small_array_)), - array_(&small_array_[0]) { + count_(0) { } /* Destructs DwarfAbbrDieArray instance. */ diff --git a/elff/dwarf_die.cc b/elff/dwarf_die.cc index 2085e31..0f58cbe 100644 --- a/elff/dwarf_die.cc +++ b/elff/dwarf_die.cc @@ -212,7 +212,7 @@ void DIEObject::dump(bool only_this) const { Elf_Xword low, high; while (elf_file()->get_range(off, &low, &high) && (low != 0 || high != 0)) { - printf(" %08I64X - %08I64X\n", + printf(" %08" FMT_I64 "X - %08" FMT_I64 "X\n", low, high); off += 16; } diff --git a/elff/dwarf_die.h b/elff/dwarf_die.h index 21dea37..ca2eeeb 100644 --- a/elff/dwarf_die.h +++ b/elff/dwarf_die.h @@ -39,8 +39,8 @@ class DIEObject : public DwarfAllocBase { : die_(die), parent_cu_(parent_cu), parent_die_(parent_die), - prev_sibling_(NULL), - last_child_(NULL) { + last_child_(NULL), + prev_sibling_(NULL) { } /* Destructs DIEObject intance. */ diff --git a/elff/dwarf_utils.cc b/elff/dwarf_utils.cc index 56c05a3..1d84b66 100644 --- a/elff/dwarf_utils.cc +++ b/elff/dwarf_utils.cc @@ -275,12 +275,12 @@ dump_value(const Dwarf_Value* attr_value) { break; case DWARF_VALUE_U64: - printf("XWORD) = %I64u (x%I64X)\n", attr_value->u64, + printf("XWORD) = %" FMT_I64 "u (x%" FMT_I64 "X)\n", attr_value->u64, attr_value->u64); break; case DWARF_VALUE_S64: - printf("SXWORD) = %I64d (x%I64X)\n", attr_value->s64, + printf("SXWORD) = %" FMT_I64 "d (x%" FMT_I64 "X)\n", attr_value->s64, attr_value->s64); break; @@ -293,11 +293,11 @@ dump_value(const Dwarf_Value* attr_value) { break; case DWARF_VALUE_PTR64: - printf("PTR64) = x%08I64X\n", attr_value->ptr64); + printf("PTR64) = x%08" FMT_I64 "X\n", attr_value->ptr64); break; case DWARF_VALUE_BLOCK: - printf("BLOCK) = [%I64u]:", attr_value->block.block_size); + printf("BLOCK) = [%u]:", attr_value->block.block_size); for (Elf_Xword i = 0; i < attr_value->block.block_size; i++) { Elf_Byte prnt = *((const Elf_Byte*)attr_value->block.block_ptr + i); printf(" x%02X", prnt); diff --git a/elff/elf_alloc.h b/elff/elf_alloc.h index d76dcdb..648a1e9 100644 --- a/elff/elf_alloc.h +++ b/elff/elf_alloc.h @@ -152,7 +152,7 @@ class DwarfAllocBase { * attempts to instantiate objects of derived classes using this version * of operator 'new'. */ - void* operator new(size_t size) { + void* operator new(size_t size) throw() { return NULL; } }; diff --git a/elff/elf_defs.h b/elff/elf_defs.h index 39fd1b1..1eca81b 100644 --- a/elff/elf_defs.h +++ b/elff/elf_defs.h @@ -132,4 +132,12 @@ is_little_endian_cpu(void) { return get_byte(&tmp, 0) == 0xFF; } +/* Use in printf() statements to dump 64-bit values + */ +#ifdef _WIN32 +# define FMT_I64 "I64" +#else +# define FMT_I64 "ll" +#endif + #endif // ELFF_ELF_DEFS_H_ diff --git a/elff/elf_file.cc b/elff/elf_file.cc index 39aa371..5a6392c 100644 --- a/elff/elf_file.cc +++ b/elff/elf_file.cc @@ -35,16 +35,16 @@ static const DwarfParseContext parse_rt_context = { parse_rt_tags }; //============================================================================= ElfFile::ElfFile() - : sec_table_(NULL), + : fixed_base_address_(0), + elf_handle_((MapFile*)-1), elf_file_path_(NULL), + allocator_(NULL), + sec_table_(NULL), sec_count_(0), - cu_count_(0), + sec_entry_size_(0), last_cu_(NULL), - allocator_(NULL), - fixed_base_address_(0), - is_exec_(0), - elf_handle_((MapFile*)-1), - sec_entry_size_(0) { + cu_count_(0), + is_exec_(0) { } ElfFile::~ElfFile() { diff --git a/hw/goldfish_audio.c b/hw/goldfish_audio.c index c8a6712..75f65bb 100644 --- a/hw/goldfish_audio.c +++ b/hw/goldfish_audio.c @@ -217,7 +217,7 @@ goldfish_audio_buff_put( struct goldfish_audio_buff* b, QEMUFile* f ) qemu_put_buffer(f, b->data, b->length ); } -static int +static void goldfish_audio_buff_get( struct goldfish_audio_buff* b, QEMUFile* f ) { b->address = qemu_get_be32(f); diff --git a/hw/goldfish_events_device.c b/hw/goldfish_events_device.c index 3f5bf0b..1f932f3 100644 --- a/hw/goldfish_events_device.c +++ b/hw/goldfish_events_device.c @@ -15,6 +15,7 @@ #include "android/globals.h" /* for android_hw */ #include "irq.h" #include "user-events.h" +#include "console.h" #define MAX_EVENTS 256*4 diff --git a/hw/goldfish_memlog.c b/hw/goldfish_memlog.c index f4be28a..6024f38 100644 --- a/hw/goldfish_memlog.c +++ b/hw/goldfish_memlog.c @@ -23,8 +23,8 @@ int fd = -1; static uint32_t memlog_read(void *opaque, target_phys_addr_t offset) { - struct goldfish_device *dev = opaque; - + (void)opaque; + (void)offset; return 0; } @@ -34,13 +34,19 @@ static void memlog_write(void *opaque, target_phys_addr_t offset, uint32_t val) { char buf[128]; struct goldfish_device *dev = opaque; + int ret; + + (void)dev; - info[offset / 4] = val; + if (offset < 8*4) + info[offset / 4] = val; if (offset == 0) { /* write PID and VADDR to logfile */ - sprintf(buf,"%08x %08x\n", info[0], info[1]); - write(fd, buf, strlen(buf)); + snprintf(buf, sizeof buf, "%08x %08x\n", info[0], info[1]); + do { + ret = write(fd, buf, strlen(buf)); + } while (ret < 0 && errno == EINTR); } } @@ -69,7 +75,9 @@ void goldfish_memlog_init(uint32_t base) dev->size = 0x1000; dev->irq_count = 0; - fd = open("mem.log", /* O_CREAT | */ O_TRUNC | O_WRONLY, 0644); + do { + fd = open("mem.log", /* O_CREAT | */ O_TRUNC | O_WRONLY, 0644); + } while (fd < 0 && errno == EINTR); goldfish_device_add(dev, memlog_readfn, memlog_writefn, dev); } diff --git a/hw/goldfish_nand.c b/hw/goldfish_nand.c index 1570095..e222cd1 100644 --- a/hw/goldfish_nand.c +++ b/hw/goldfish_nand.c @@ -52,7 +52,7 @@ xlog( const char* format, ... ) typedef struct { char* devname; size_t devname_len; - char* data; + uint8_t* data; int fd; uint32_t flags; uint32_t page_size; @@ -274,7 +274,7 @@ uint32_t nand_dev_do_cmd(nand_dev_state *s, uint32_t cmd) case NAND_CMD_GET_DEV_NAME: if(size > dev->devname_len) size = dev->devname_len; - cpu_memory_rw_debug(cpu_single_env, s->data, dev->devname, size, 1); + cpu_memory_rw_debug(cpu_single_env, s->data, (uint8_t*)dev->devname, size, 1); return size; case NAND_CMD_READ: if(addr >= dev->size) diff --git a/hw/goldfish_trace.c b/hw/goldfish_trace.c index a7e589d..fc338c8 100644 --- a/hw/goldfish_trace.c +++ b/hw/goldfish_trace.c @@ -15,8 +15,11 @@ */ #include "qemu_file.h" #include "goldfish_trace.h" +#include "sysemu.h" +#include "trace.h" #ifdef CONFIG_MEMCHECK #include "memcheck/memcheck.h" +#include "memcheck/memcheck_util.h" #endif // CONFIG_MEMCHECK //#define DEBUG 1 @@ -46,6 +49,8 @@ static void trace_dev_write(void *opaque, target_phys_addr_t offset, uint32_t va { trace_dev_state *s = (trace_dev_state *)opaque; + (void)s; + switch (offset >> 2) { case TRACE_DEV_REG_SWITCH: // context switch, switch to pid if (trace_filename != NULL) { @@ -128,7 +133,7 @@ static void trace_dev_write(void *opaque, target_phys_addr_t offset, uint32_t va cmdlen = value; break; case TRACE_DEV_REG_CMDLINE: // execve, process cmdline - cpu_memory_rw_debug(cpu_single_env, value, exec_arg, cmdlen, 0); + cpu_memory_rw_debug(cpu_single_env, value, (uint8_t*)exec_arg, cmdlen, 0); if (trace_filename != NULL) { trace_execve(exec_arg, cmdlen); } @@ -351,6 +356,8 @@ static uint32_t trace_dev_read(void *opaque, target_phys_addr_t offset) { trace_dev_state *s = (trace_dev_state *)opaque; + (void)s; + switch (offset >> 2) { case TRACE_DEV_REG_ENABLE: // tracing enable return tracing; @@ -378,7 +385,6 @@ static CPUWriteMemoryFunc *trace_dev_writefn[] = { /* initialize the trace device */ void trace_dev_init() { - int iomemtype; trace_dev_state *s; s = (trace_dev_state *)qemu_mallocz(sizeof(trace_dev_state)); diff --git a/hw/goldfish_tty.c b/hw/goldfish_tty.c index dd50efc..904a07b 100644 --- a/hw/goldfish_tty.c +++ b/hw/goldfish_tty.c @@ -126,8 +126,8 @@ static void goldfish_tty_write(void *opaque, target_phys_addr_t offset, uint32_t if (to_write > len) to_write = len; - cpu_memory_rw_debug(cpu_single_env, buf, temp, to_write, 0); - qemu_chr_write(s->cs, temp, to_write); + cpu_memory_rw_debug(cpu_single_env, buf, (uint8_t*)temp, to_write, 0); + qemu_chr_write(s->cs, (const uint8_t*)temp, to_write); buf += to_write; len -= to_write; } diff --git a/memcheck/memcheck.c b/memcheck/memcheck.c index 8e0a1f8..3c8194a 100644 --- a/memcheck/memcheck.c +++ b/memcheck/memcheck.c @@ -138,7 +138,7 @@ av_access_violation(ProcDesc* proc, } memset(align, ' ', set_align); align[set_align] = '\0'; - printf(align); + printf("%s", align); if (inl[index].inlined_in_file == NULL) { printf("inlined to %s in unknown location\n", inl[index].routine_name); @@ -561,7 +561,7 @@ void memcheck_guest_print_str(target_ulong str) { char str_copy[4096]; memcheck_get_guest_string(str_copy, str, sizeof(str_copy)); - printf(str_copy); + printf("%s", str_copy); } /* Validates read operations, detected in __ldx_mmu routine. diff --git a/memcheck/memcheck_proc_management.c b/memcheck/memcheck_proc_management.c index 4120b9f..593ba32 100644 --- a/memcheck/memcheck_proc_management.c +++ b/memcheck/memcheck_proc_management.c @@ -25,6 +25,7 @@ #include "memcheck.h" #include "memcheck_proc_management.h" #include "memcheck_logging.h" +#include "memcheck_util.h" /* Current thread id. * This value is updated with each call to memcheck_switch, saving here diff --git a/memcheck/memcheck_util.c b/memcheck/memcheck_util.c index cc4182d..5449488 100644 --- a/memcheck/memcheck_util.c +++ b/memcheck/memcheck_util.c @@ -102,7 +102,7 @@ memcheck_get_guest_buffer(void* qemu_address, * read / write guest's memory. */ while (buffer_size) { *(uint8_t*)qemu_address = ldub_user(guest_address); - (uint32_t)qemu_address++; + qemu_address = (uint8_t*)qemu_address + 1; guest_address++; buffer_size--; } @@ -116,7 +116,7 @@ memcheck_set_guest_buffer(target_ulong guest_address, while (buffer_size) { stb_user(guest_address, *(uint8_t*)qemu_address); guest_address++; - (uint32_t)qemu_address++; + qemu_address = (uint8_t*)qemu_address + 1; buffer_size--; } } diff --git a/memcheck/memcheck_util.h b/memcheck/memcheck_util.h index d4f6c8a..b75ee53 100644 --- a/memcheck/memcheck_util.h +++ b/memcheck/memcheck_util.h @@ -24,7 +24,7 @@ #endif // CONFIG_MEMCHECK #include "memcheck_common.h" -#include "elff_api.h" +#include "elff/elff_api.h" #ifdef __cplusplus extern "C" { diff --git a/osdep.h b/osdep.h index 1cdc7e2..b7e8d51 100644 --- a/osdep.h +++ b/osdep.h @@ -96,6 +96,8 @@ int qemu_create_pidfile(const char *filename); int ffs(int i); int setenv(const char *name, const char *value, int overwrite); +int asprintf(char **sptr, char *fmt, ...); +int vasprintf(char **sptr, char *fmt, va_list args); typedef struct { long tv_sec; diff --git a/path.c b/path.c index 0d2bf14..4fbc210 100644 --- a/path.c +++ b/path.c @@ -3,6 +3,9 @@ The assumption is that this area does not change. */ +#ifdef __linux__ +#define _GNU_SOURCE 1 +#endif #include #include #include diff --git a/qemu-char-android.c b/qemu-char-android.c index 7753bf9..4074ea6 100644 --- a/qemu-char-android.c +++ b/qemu-char-android.c @@ -546,7 +546,7 @@ int send_all(int fd, const void *buf, int len1) } } return len1 - len; -#endif +#endif } #else @@ -2023,6 +2023,7 @@ static void tcp_chr_process_IAC_bytes(CharDriverState *chr, *size = j; } +#if 0 static int tcp_get_msgfd(CharDriverState *chr) { TCPCharDriver *s = chr->opaque; @@ -2030,6 +2031,7 @@ static int tcp_get_msgfd(CharDriverState *chr) s->msgfd = -1; return fd; } +#endif #ifndef _WIN32 static void unix_process_msgfd(CharDriverState *chr, struct msghdr *msg) diff --git a/slirp-android/misc.c b/slirp-android/misc.c index fb8ec5f..a6063a9 100644 --- a/slirp-android/misc.c +++ b/slirp-android/misc.c @@ -327,11 +327,14 @@ fork_exec(struct socket *so, const char *ex, int do_pty) /* Ooops, failed, let's tell the user why */ { char buff[256]; + int ret; snprintf(buff, sizeof(buff), "Error: execvp of %s failed: %s\n", argv[0], strerror(errno)); - write(2, buff, strlen(buff)+1); + do { + ret =write(2, buff, strlen(buff)+1); + } while (ret < 0 && errno == EINTR); } close(0); close(1); close(2); /* XXX */ exit(1); diff --git a/sockets.c b/sockets.c index 12f925f..14e9ad6 100644 --- a/sockets.c +++ b/sockets.c @@ -9,6 +9,11 @@ ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. */ +#ifdef __linux__ /* Recent versions of glibc only define EAI_NODATA, which is an + extension to the POSIX standard, if _GNU_SOURCE is defined. */ +# define _GNU_SOURCE 1 +#endif + #include "sockets.h" #include "qemu-common.h" #include @@ -33,14 +38,7 @@ # include # include # include -# ifdef __linux__ /* Recent versions of glibc only define EAI_NODATA, which is an - extension to the POSIX standard, if __USE_GNU is defined. */ -# define __USE_GNU -# include -# undef __USE_GNU -# else /* !__linux__ */ -# include -# endif /* !__linux__ */ +# include # if HAVE_UNIX_SOCKETS # include # ifndef UNIX_PATH_MAX @@ -133,7 +131,7 @@ _fix_errno( void ) int unix = EINVAL; /* generic error code */ winsock_error = WSAGetLastError(); - + for ( ; werr->string != NULL; werr++ ) { if (werr->winsock == winsock_error) { unix = werr->unix; @@ -508,7 +506,7 @@ bufprint_sock_address( char* p, char* end, const SockAddress* a ) #endif static int -sock_address_to_bsd( const SockAddress* a, sockaddr_storage* paddress, size_t *psize ) +sock_address_to_bsd( const SockAddress* a, sockaddr_storage* paddress, socklen_t *psize ) { switch (a->family) { case SOCKET_INET: @@ -569,12 +567,12 @@ sock_address_to_bsd( const SockAddress* a, sockaddr_storage* paddress, size_t } static int -sock_address_from_bsd( SockAddress* a, const sockaddr_storage* from, size_t fromlen ) +sock_address_from_bsd( SockAddress* a, const void* from, size_t fromlen ) { - switch (from->sa->sa_family) { + switch (((struct sockaddr *)from)->sa_family) { case AF_INET: { - struct sockaddr_in* src = from->in; + const struct sockaddr_in* src = from; if (fromlen < sizeof(*src)) return _set_errno(EINVAL); @@ -588,7 +586,7 @@ sock_address_from_bsd( SockAddress* a, const sockaddr_storage* from, size_t f #ifdef HAVE_IN6_SOCKETS case AF_INET6: { - struct sockaddr_in6* src = from->in6; + const struct sockaddr_in6* src = from; if (fromlen < sizeof(*src)) return _set_errno(EINVAL); @@ -603,7 +601,7 @@ sock_address_from_bsd( SockAddress* a, const sockaddr_storage* from, size_t f #ifdef HAVE_UNIX_SOCKETS case AF_LOCAL: { - struct sockaddr_un* src = from->un; + const struct sockaddr_un* src = from; char* end; if (fromlen < sizeof(*src)) @@ -633,7 +631,7 @@ sock_address_init_resolve( SockAddress* a, const char* hostname, uint16_t por { struct addrinfo hints[1]; struct addrinfo* res; - int ret; + int ret; memset(hints, 0, sizeof(hints)); hints->ai_family = preferIn6 ? AF_INET6 : AF_UNSPEC; @@ -760,9 +758,9 @@ sock_address_list_create( const char* hostname, break; switch (ret) { -#ifdef EAI_ADDRFAMILY - case EAI_ADDRFAMILY: -#endif +#ifdef EAI_ADDRFAMILY + case EAI_ADDRFAMILY: +#endif case EAI_NODATA: _set_errno(ENOENT); break; @@ -772,12 +770,12 @@ sock_address_list_create( const char* hostname, case EAI_AGAIN: _set_errno(EAGAIN); break; -#ifdef EAI_SYSTEM +#ifdef EAI_SYSTEM case EAI_SYSTEM: if (errno == EINTR) continue; break; -#endif +#endif default: _set_errno(EINVAL); } @@ -1066,14 +1064,14 @@ socket_getoption(int fd, int domain, int option, int defaut) #else int opt = -1; #endif - size_t optlen = sizeof(opt); + socklen_t optlen = sizeof(opt); ret = getsockopt(fd, domain, option, (char*)&opt, &optlen); if (ret == 0) return (int)opt; if (errno != EINTR) return defaut; } -#undef OPT_CAST +#undef OPT_CAST } @@ -1151,7 +1149,7 @@ int socket_set_ipv6only(int fd) return 0; #else return socket_setoption(fd, IPPROTO_IPV6, IPV6_V6ONLY, 1); -#endif +#endif } @@ -1486,7 +1484,7 @@ socket_mcast_inet_add_membership( int s, uint32_t ip ) imr.imr_interface.s_addr = htonl(INADDR_ANY); if ( setsockopt( s, IPPROTO_IP, IP_ADD_MEMBERSHIP, - (const char *)&imr, + (const char *)&imr, sizeof(struct ip_mreq)) < 0 ) { return _fix_errno(); @@ -1503,7 +1501,7 @@ socket_mcast_inet_drop_membership( int s, uint32_t ip ) imr.imr_interface.s_addr = htonl(INADDR_ANY); if ( setsockopt( s, IPPROTO_IP, IP_DROP_MEMBERSHIP, - (const char *)&imr, + (const char *)&imr, sizeof(struct ip_mreq)) < 0 ) { return _fix_errno(); diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c index 05eb558..6d8db29 100644 --- a/target-arm/op_helper.c +++ b/target-arm/op_helper.c @@ -67,10 +67,13 @@ uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, #if !defined(CONFIG_USER_ONLY) +//#define ALIGNED_ONLY 1 + +#if ALIGNED_ONLY == 1 static void do_unaligned_access (target_ulong addr, int is_write, int is_user, void *retaddr); +#endif #define MMUSUFFIX _mmu -//#define ALIGNED_ONLY 1 #define SHIFT 0 #include "softmmu_template.h" @@ -84,6 +87,7 @@ static void do_unaligned_access (target_ulong addr, int is_write, int is_user, v #define SHIFT 3 #include "softmmu_template.h" +#if ALIGNED_ONLY == 1 static void do_unaligned_access (target_ulong addr, int is_write, int mmu_idx, void *retaddr) { //printf("::UNALIGNED:: addr=%lx is_write=%d is_user=%d retaddr=%p\n", addr, is_write, is_user, retaddr); @@ -96,6 +100,7 @@ static void do_unaligned_access (target_ulong addr, int is_write, int mmu_idx, v cpu_loop_exit(); } } +#endif /* try to fill the TLB and return an exception if error. If retaddr is NULL, it means that the function was called in C code (i.e. not @@ -137,7 +142,7 @@ void vstrcpy(target_ulong ptr, char *buf, int max) if (buf == NULL) return; for (index = 0; index < max; index += 1) { - cpu_physical_memory_read(ptr + index, buf + index, 1); + cpu_physical_memory_read(ptr + index, (uint8_t*)buf + index, 1); if (buf[index] == 0) break; } diff --git a/target-arm/translate.c b/target-arm/translate.c index 275356d..d298f89 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -5798,7 +5798,7 @@ static void disas_arm_insn(CPUState * env, DisasContext *s) { unsigned int cond, insn, val, op1, i, shift, rm, rs, rn, rd, sh; #ifdef CONFIG_TRACE - int ticks; + int ticks = 0; #endif TCGv tmp; TCGv tmp2; diff --git a/telephony/remote_call.c b/telephony/remote_call.c index 43c9099..d7b6b17 100644 --- a/telephony/remote_call.c +++ b/telephony/remote_call.c @@ -79,7 +79,7 @@ remote_number_string_to_port( const char* number ) { char* end; long num; - char* temp = number; + const char* temp = number; int len; len = strlen(number); diff --git a/trace.c b/trace.c index a96f87f..9eb8f5f 100644 --- a/trace.c +++ b/trace.c @@ -24,6 +24,7 @@ #include "exec-all.h" #include "trace.h" #include "varint.h" +#include "android/utils/path.h" TraceBB trace_bb; TraceInsn trace_insn; diff --git a/trace.h b/trace.h index f5b0233..7bf4b82 100644 --- a/trace.h +++ b/trace.h @@ -149,4 +149,11 @@ extern int tracing; extern int trace_cache_miss; extern int trace_all_addr; +// Trace process/thread operations +extern void trace_switch(int pid); +extern void trace_fork(int tgid, int pid); +extern void trace_clone(int tgid, int pid); +extern void trace_exit(int exitcode); +extern void trace_name(char *name); + #endif /* TRACE_H */ diff --git a/usb-linux.c b/usb-linux.c index 67e4acd..d8610e8 100644 --- a/usb-linux.c +++ b/usb-linux.c @@ -107,9 +107,9 @@ enum { /* * Control transfer state. - * Note that 'buffer' _must_ follow 'req' field because + * Note that 'buffer' _must_ follow 'req' field because * we need contigious buffer when we submit control URB. - */ + */ struct ctrl_struct { uint16_t len; uint16_t offset; @@ -193,10 +193,10 @@ static USBHostDevice *hostdev_find(int bus_num, int addr) return NULL; } -/* +/* * Async URB state. * We always allocate one isoc descriptor even for bulk transfers - * to simplify allocation and casts. + * to simplify allocation and casts. */ typedef struct AsyncURB { @@ -262,7 +262,7 @@ static void async_complete(void *opaque) p = aurb->packet; - dprintf("husb: async completed. aurb %p status %d alen %d\n", + dprintf("husb: async completed. aurb %p status %d alen %d\n", aurb, aurb->urb.status, aurb->urb.actual_length); if (p) { @@ -332,7 +332,7 @@ static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration) } config_descr_len = dev->descr[i]; - printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration); + printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration); if (configuration < 0 || configuration == dev->descr[i + 5]) { configuration = dev->descr[i + 5]; @@ -454,7 +454,7 @@ static int usb_host_handle_data(USBHostDevice *s, USBPacket *p) if (is_halted(s, p->devep)) { ret = ioctl(s->fd, USBDEVFS_CLEAR_HALT, &urb->endpoint); if (ret < 0) { - dprintf("husb: failed to clear halt. ep 0x%x errno %d\n", + dprintf("husb: failed to clear halt. ep 0x%x errno %d\n", urb->endpoint, errno); return USB_RET_NAK; } @@ -502,7 +502,7 @@ static int ctrl_error(void) { if (errno == ETIMEDOUT) return USB_RET_NAK; - else + else return USB_RET_STALL; } @@ -518,12 +518,12 @@ static int usb_host_set_config(USBHostDevice *s, int config) usb_host_release_interfaces(s); int ret = ioctl(s->fd, USBDEVFS_SETCONFIGURATION, &config); - + dprintf("husb: ctrl set config %d ret %d errno %d\n", config, ret, errno); - + if (ret < 0) return ctrl_error(); - + usb_host_claim_interfaces(s, config); return 0; } @@ -536,10 +536,10 @@ static int usb_host_set_interface(USBHostDevice *s, int iface, int alt) si.interface = iface; si.altsetting = alt; ret = ioctl(s->fd, USBDEVFS_SETINTERFACE, &si); - - dprintf("husb: ctrl set iface %d altset %d ret %d errno %d\n", + + dprintf("husb: ctrl set iface %d altset %d ret %d errno %d\n", iface, alt, ret, errno); - + if (ret < 0) return ctrl_error(); @@ -553,7 +553,7 @@ static int usb_host_handle_control(USBHostDevice *s, USBPacket *p) AsyncURB *aurb; int ret, value, index; - /* + /* * Process certain standard device requests. * These are infrequent and are processed synchronously. */ @@ -561,7 +561,7 @@ static int usb_host_handle_control(USBHostDevice *s, USBPacket *p) index = le16_to_cpu(s->ctrl.req.wIndex); dprintf("husb: ctrl type 0x%x req 0x%x val 0x%x index %u len %u\n", - s->ctrl.req.bRequestType, s->ctrl.req.bRequest, value, index, + s->ctrl.req.bRequestType, s->ctrl.req.bRequest, value, index, s->ctrl.len); if (s->ctrl.req.bRequestType == 0) { @@ -584,12 +584,12 @@ static int usb_host_handle_control(USBHostDevice *s, USBPacket *p) aurb->hdev = s; aurb->packet = p; - /* + /* * Setup ctrl transfer. * * s->ctrl is layed out such that data buffer immediately follows * 'req' struct which is exactly what usbdevfs expects. - */ + */ urb = &aurb->urb; urb->type = USBDEVFS_URB_TYPE_CONTROL; @@ -628,7 +628,7 @@ static int do_token_setup(USBDevice *dev, USBPacket *p) if (p->len != 8) return USB_RET_STALL; - + memcpy(&s->ctrl.req, p->data, 8); s->ctrl.len = le16_to_cpu(s->ctrl.req.wLength); s->ctrl.offset = 0; @@ -768,7 +768,7 @@ static int usb_host_handle_packet(USBDevice *s, USBPacket *p) case USB_TOKEN_OUT: return do_token_out(s, p); - + default: return USB_RET_STALL; } @@ -927,10 +927,10 @@ static USBDevice *usb_host_device_open_addr(int bus_num, int addr, const char *p dev->fd = fd; - /* - * Initial configuration is -1 which makes us claim first + /* + * Initial configuration is -1 which makes us claim first * available config. We used to start with 1, which does not - * always work. I've seen devices where first config starts + * always work. I've seen devices where first config starts * with 2. */ if (!usb_host_claim_interfaces(dev, -1)) @@ -1018,7 +1018,7 @@ int usb_host_device_close(const char *devname) if (usb_host_find_device(&bus_num, &addr, product_name, sizeof(product_name), devname) < 0) return -1; - + s = hostdev_find(bus_num, addr); if (s) { usb_device_del_addr(0, s->dev.addr); @@ -1027,7 +1027,7 @@ int usb_host_device_close(const char *devname) return -1; } - + static int get_tag_value(char *buf, int buf_size, const char *str, const char *tag, const char *stopchars) @@ -1159,9 +1159,8 @@ static int usb_host_read_file(char *line, size_t line_size, const char *device_f device_file); f = fopen(filename, "r"); if (f) { - fgets(line, line_size, f); + ret = (fgets(line, line_size, f) != NULL); fclose(f); - ret = 1; } else { monitor_printf(mon, "husb: could not open %s\n", filename); } @@ -1406,7 +1405,7 @@ static int parse_filter(const char *spec, struct USBAutoFilter *f) p = strpbrk(p, ":."); if (!p) break; p++; - + if (*p == '*') continue; @@ -1426,7 +1425,7 @@ static int parse_filter(const char *spec, struct USBAutoFilter *f) return 0; } -static int match_filter(const struct USBAutoFilter *f1, +static int match_filter(const struct USBAutoFilter *f1, const struct USBAutoFilter *f2) { return f1->bus_num == f2->bus_num && @@ -1444,13 +1443,13 @@ static int usb_host_auto_add(const char *spec) f = qemu_mallocz(sizeof(*f)); - *f = filter; + *f = filter; if (!usb_auto_filter) { /* * First entry. Init and start the monitor. * Right now we're using timer to check for new devices. - * If this turns out to be too expensive we can move that into a + * If this turns out to be too expensive we can move that into a * separate thread. */ usb_auto_timer = qemu_new_timer(rt_clock, usb_host_auto_timer, NULL); @@ -1657,7 +1656,7 @@ static void dec2str(int val, char *str, size_t size) if (val == -1) snprintf(str, size, "*"); else - snprintf(str, size, "%d", val); + snprintf(str, size, "%d", val); } static void hex2str(int val, char *str, size_t size) diff --git a/vl-android.c b/vl-android.c index 8b3241c..13f4dac 100644 --- a/vl-android.c +++ b/vl-android.c @@ -525,7 +525,7 @@ void hw_error(const char *fmt, ...) va_end(ap); abort(); } - + /***************/ /* ballooning */ @@ -2537,11 +2537,13 @@ static int qemu_event_init(void) return 0; } +#if 0 static void qemu_event_increment(void) { SetEvent(qemu_event_handle); } #endif +#endif static int cpu_can_run(CPUState *env) { @@ -4948,7 +4950,10 @@ int main(int argc, char **argv, char **envp) if (pid_file && qemu_create_pidfile(pid_file) != 0) { if (daemonize) { uint8_t status = 1; - write(fds[1], &status, 1); + int ret; + do { + ret = write(fds[1], &status, 1); + } while (ret < 0 && errno == EINTR); } else fprintf(stderr, "Could not acquire pid file\n"); exit(1); -- cgit v1.1