diff options
-rw-r--r-- | fs_mgr/fs_mgr_fstab.c | 2 | ||||
-rw-r--r-- | fs_mgr/fs_mgr_main.c | 8 | ||||
-rw-r--r-- | fs_mgr/include/fs_mgr.h | 2 | ||||
-rw-r--r-- | healthd/healthd_board_default.cpp | 4 | ||||
-rw-r--r-- | include/private/android_filesystem_config.h | 1 | ||||
-rw-r--r-- | liblog/tests/liblog_test.cpp | 2 | ||||
-rw-r--r-- | libpixelflinger/codeflinger/disassem.c | 15 | ||||
-rw-r--r-- | libpixelflinger/codeflinger/disassem.h | 4 | ||||
-rw-r--r-- | libsuspend/autosuspend_earlysuspend.c | 7 | ||||
-rw-r--r-- | libutils/tests/BasicHashtable_test.cpp | 2 | ||||
-rw-r--r-- | libutils/tests/LruCache_test.cpp | 2 | ||||
-rw-r--r-- | logcat/logcat.cpp | 16 | ||||
-rw-r--r-- | logd/LogStatistics.cpp | 115 | ||||
-rw-r--r-- | rootdir/init.zygote32_64.rc | 12 | ||||
-rw-r--r-- | toolbox/syren.c | 8 |
15 files changed, 156 insertions, 44 deletions
diff --git a/fs_mgr/fs_mgr_fstab.c b/fs_mgr/fs_mgr_fstab.c index 6145771..45bbfdc 100644 --- a/fs_mgr/fs_mgr_fstab.c +++ b/fs_mgr/fs_mgr_fstab.c @@ -337,7 +337,7 @@ void fs_mgr_free_fstab(struct fstab *fstab) /* Add an entry to the fstab, and return 0 on success or -1 on error */ int fs_mgr_add_entry(struct fstab *fstab, const char *mount_point, const char *fs_type, - const char *blk_device, long long length) + const char *blk_device) { struct fstab_rec *new_fstab_recs; int n = fstab->num_entries; diff --git a/fs_mgr/fs_mgr_main.c b/fs_mgr/fs_mgr_main.c index 4bde4a1..e5a00d5 100644 --- a/fs_mgr/fs_mgr_main.c +++ b/fs_mgr/fs_mgr_main.c @@ -80,10 +80,10 @@ int main(int argc, char *argv[]) int a_flag=0; int u_flag=0; int n_flag=0; - char *n_name; - char *n_blk_dev; - char *fstab_file; - struct fstab *fstab; + char *n_name=NULL; + char *n_blk_dev=NULL; + char *fstab_file=NULL; + struct fstab *fstab=NULL; klog_init(); klog_set_level(6); diff --git a/fs_mgr/include/fs_mgr.h b/fs_mgr/include/fs_mgr.h index 0f90c32..835cf64 100644 --- a/fs_mgr/include/fs_mgr.h +++ b/fs_mgr/include/fs_mgr.h @@ -57,7 +57,7 @@ int fs_mgr_get_crypt_info(struct fstab *fstab, char *key_loc, char *real_blk_device, int size); int fs_mgr_add_entry(struct fstab *fstab, const char *mount_point, const char *fs_type, - const char *blk_device, long long length); + const char *blk_device); struct fstab_rec *fs_mgr_get_entry_for_mount_point(struct fstab *fstab, const char *path); int fs_mgr_is_voldmanaged(struct fstab_rec *fstab); int fs_mgr_is_nonremovable(struct fstab_rec *fstab); diff --git a/healthd/healthd_board_default.cpp b/healthd/healthd_board_default.cpp index b2bb516..ed4ddb4 100644 --- a/healthd/healthd_board_default.cpp +++ b/healthd/healthd_board_default.cpp @@ -16,13 +16,13 @@ #include <healthd.h> -void healthd_board_init(struct healthd_config *config) +void healthd_board_init(struct healthd_config*) { // use defaults } -int healthd_board_battery_update(struct android::BatteryProperties *props) +int healthd_board_battery_update(struct android::BatteryProperties*) { // return 0 to log periodic polled battery status to kernel log return 0; diff --git a/include/private/android_filesystem_config.h b/include/private/android_filesystem_config.h index 9c26baf..d662107 100644 --- a/include/private/android_filesystem_config.h +++ b/include/private/android_filesystem_config.h @@ -251,6 +251,7 @@ static const struct fs_path_config android_files[] = { { 00755, AID_ROOT, AID_SHELL, 0, "system/bin/*" }, { 00755, AID_ROOT, AID_ROOT, 0, "system/lib/valgrind/*" }, + { 00755, AID_ROOT, AID_ROOT, 0, "system/lib64/valgrind/*" }, { 00755, AID_ROOT, AID_SHELL, 0, "system/xbin/*" }, { 00755, AID_ROOT, AID_SHELL, 0, "system/vendor/bin/*" }, { 00755, AID_ROOT, AID_SHELL, 0, "vendor/bin/*" }, diff --git a/liblog/tests/liblog_test.cpp b/liblog/tests/liblog_test.cpp index d726f2d..24ae738 100644 --- a/liblog/tests/liblog_test.cpp +++ b/liblog/tests/liblog_test.cpp @@ -484,7 +484,7 @@ TEST(liblog, max_payload) { EXPECT_EQ(true, matches); - EXPECT_LE(sizeof(max_payload_buf), max_len); + EXPECT_LE(sizeof(max_payload_buf), static_cast<size_t>(max_len)); android_logger_list_close(logger_list); } diff --git a/libpixelflinger/codeflinger/disassem.c b/libpixelflinger/codeflinger/disassem.c index aeb8034..39dd614 100644 --- a/libpixelflinger/codeflinger/disassem.c +++ b/libpixelflinger/codeflinger/disassem.c @@ -301,19 +301,14 @@ static u_int disassemble_readword(u_int address); static void disassemble_printaddr(u_int address); u_int -disasm(const disasm_interface_t *di, u_int loc, int altfmt) +disasm(const disasm_interface_t *di, u_int loc, int __unused altfmt) { const struct arm32_insn *i_ptr = &arm32_i[0]; - - u_int insn; - int matchp; + u_int insn = di->di_readword(loc); + int matchp = 0; int branch; char* f_ptr; - int fmt; - - fmt = 0; - matchp = 0; - insn = di->di_readword(loc); + int fmt = 0; /* di->di_printf("loc=%08x insn=%08x : ", loc, insn);*/ @@ -670,7 +665,7 @@ disasm_insn_ldrhstrh(const disasm_interface_t *di, u_int insn, u_int loc) } static void -disasm_insn_ldcstc(const disasm_interface_t *di, u_int insn, u_int loc) +disasm_insn_ldcstc(const disasm_interface_t *di, u_int insn, u_int __unused loc) { if (((insn >> 8) & 0xf) == 1) di->di_printf("f%d, ", (insn >> 12) & 0x07); diff --git a/libpixelflinger/codeflinger/disassem.h b/libpixelflinger/codeflinger/disassem.h index 02747cd..c7c60b6 100644 --- a/libpixelflinger/codeflinger/disassem.h +++ b/libpixelflinger/codeflinger/disassem.h @@ -49,8 +49,8 @@ extern "C" { typedef struct { u_int (*di_readword)(u_int); - void (*di_printaddr)(u_int); - void (*di_printf)(const char *, ...); + void (*di_printaddr)(u_int); + int (*di_printf)(const char *, ...); } disasm_interface_t; /* Prototypes for callable functions */ diff --git a/libsuspend/autosuspend_earlysuspend.c b/libsuspend/autosuspend_earlysuspend.c index 1df8c6a..2bece4c 100644 --- a/libsuspend/autosuspend_earlysuspend.c +++ b/libsuspend/autosuspend_earlysuspend.c @@ -75,13 +75,8 @@ static int wait_for_fb_sleep(void) return err < 0 ? err : 0; } -static void *earlysuspend_thread_func(void *arg) +static void *earlysuspend_thread_func(void __unused *arg) { - char buf[80]; - char wakeup_count[20]; - int wakeup_count_len; - int ret; - while (1) { if (wait_for_fb_sleep()) { ALOGE("Failed reading wait_for_fb_sleep, exiting earlysuspend thread\n"); diff --git a/libutils/tests/BasicHashtable_test.cpp b/libutils/tests/BasicHashtable_test.cpp index 7dcf750..a61b1e1 100644 --- a/libutils/tests/BasicHashtable_test.cpp +++ b/libutils/tests/BasicHashtable_test.cpp @@ -397,7 +397,7 @@ TEST_F(BasicHashtableTest, Next_WhenNonEmpty_IteratesOverAllEntries) { const SimpleEntry& entry = h.entryAt(index); ASSERT_GE(entry.key, 0); ASSERT_LT(entry.key, N); - ASSERT_EQ(false, set[entry.key]); + ASSERT_FALSE(set[entry.key]); ASSERT_EQ(entry.key * 10, entry.value); set[entry.key] = true; diff --git a/libutils/tests/LruCache_test.cpp b/libutils/tests/LruCache_test.cpp index e573952..bcbea32 100644 --- a/libutils/tests/LruCache_test.cpp +++ b/libutils/tests/LruCache_test.cpp @@ -184,7 +184,7 @@ TEST_F(LruCacheTest, StressTest) { for (size_t i = 0; i < kNumKeys; i++) { strings[i] = (char *)malloc(16); - sprintf(strings[i], "%d", i); + sprintf(strings[i], "%zu", i); } srandom(12345); diff --git a/logcat/logcat.cpp b/logcat/logcat.cpp index 00a60bd..ca97208 100644 --- a/logcat/logcat.cpp +++ b/logcat/logcat.cpp @@ -230,12 +230,16 @@ static void show_help(const char *cmd) " 'events' or 'all'. Multiple -b parameters are allowed and\n" " results are interleaved. The default is -b main -b system.\n" " -B output the log in binary.\n" - " -S output statistics.\n"); - - fprintf(stderr, " -G <count> set size of log's ring buffer and exit\n" - " -p output prune white and ~black list\n" - " -P '<list> ...' set prune white and ~black list; UID, /PID or !(worst UID)\n" - " default is ~!, prune worst UID.\n"); + " -S output statistics.\n" + " -G <size> set size of log ring buffer, may suffix with K or M.\n" + " -p print prune white and ~black list. Service is specified as\n" + " UID, UID/PID or /PID. Weighed for quicker pruning if prefix\n" + " with ~, otherwise weighed for longevity if unadorned. All\n" + " other pruning activity is oldest first. Special case ~!\n" + " represents an automatic quicker pruning for the noisiest\n" + " UID as determined by the current statistics.\n" + " -P '<list> ...' set prune white and ~black list, using same format as\n" + " printed above. Must be quoted.\n"); fprintf(stderr,"\nfilterspecs are a series of \n" " <tag>[:priority]\n\n" diff --git a/logd/LogStatistics.cpp b/logd/LogStatistics.cpp index fc6e6b2..5146030 100644 --- a/logd/LogStatistics.cpp +++ b/logd/LogStatistics.cpp @@ -63,7 +63,7 @@ void PidStatistics::add(unsigned short size) { bool PidStatistics::subtract(unsigned short size) { mSizes -= size; --mElements; - return mElements == 0 && kill(pid, 0); + return (mElements == 0) && kill(pid, 0) && (errno != EPERM); } void PidStatistics::addTotal(size_t size, size_t element) { @@ -508,6 +508,107 @@ void LogStatistics::format(char **buf, spaces += spaces_total; } + // Construct list of worst spammers by Pid + static const unsigned char num_spammers = 10; + bool header = false; + + log_id_for_each(i) { + if (!(logMask & (1 << i))) { + continue; + } + + PidStatisticsCollection pids; + pids.clear(); + + LidStatistics &l = id(i); + UidStatisticsCollection::iterator iu; + for (iu = l.begin(); iu != l.end(); ++iu) { + UidStatistics &u = *(*iu); + PidStatisticsCollection::iterator ip; + for (ip = u.begin(); ip != u.end(); ++ip) { + PidStatistics *p = (*ip); + if (p->getPid() == p->gone) { + break; + } + + size_t mySizes = p->sizes(); + + PidStatisticsCollection::iterator q; + unsigned char num = 0; + for (q = pids.begin(); q != pids.end(); ++q) { + if (mySizes > (*q)->sizes()) { + pids.insert(q, p); + break; + } + // do we need to traverse deeper in the list? + if (++num > num_spammers) { + break; + } + } + if (q == pids.end()) { + pids.push_back(p); + } + } + } + + size_t threshold = sizes(i); + if (threshold < 65536) { + threshold = 65536; + } + threshold /= 100; + + PidStatisticsCollection::iterator pt = pids.begin(); + + for(int line = 0; + (pt != pids.end()) && (line < num_spammers); + ++line, pt = pids.erase(pt)) { + PidStatistics *p = *pt; + + size_t sizes = p->sizes(); + if (sizes < threshold) { + break; + } + + char *name = p->getName(); + pid_t pid = p->getPid(); + if (!name || !*name) { + name = pidToName(pid); + if (name) { + if (*name) { + p->setName(name); + } else { + free(name); + name = NULL; + } + } + } + + if (!header) { + string.appendFormat("\n\nChattiest clients:\n" + "log id %-*s PID[?] name", + spaces_total, "size/total"); + header = true; + } + + size_t sizesTotal = p->sizesTotal(); + + android::String8 sz(""); + sz.appendFormat((sizes != sizesTotal) ? "%zu/%zu" : "%zu", + sizes, sizesTotal); + + android::String8 pd(""); + pd.appendFormat("%u%c", pid, + (kill(pid, 0) && (errno != EPERM)) ? '?' : ' '); + + string.appendFormat("\n%-7s%-*s %-7s%s", + line ? "" : android_log_id_to_name(i), + spaces_total, sz.string(), pd.string(), + name ? name : ""); + } + + pids.clear(); + } + if (dgram_qlen_statistics) { const unsigned short spaces_time = 6; const unsigned long long max_seconds = 100000; @@ -562,7 +663,7 @@ void LogStatistics::format(char **buf, continue; } - bool header = false; + header = false; bool first = true; UidStatisticsCollection::iterator ut; @@ -610,7 +711,7 @@ void LogStatistics::format(char **buf, : "%d/%d") : "%d", u, p); - string.appendFormat((first) ? "\n%-12s" : "%-12s", + string.appendFormat(first ? "\n%-12s" : "%-12s", intermediate.string()); intermediate.clear(); @@ -659,7 +760,7 @@ void LogStatistics::format(char **buf, continue; } els = pp->elements(); - bool gone = kill(p, 0); + bool gone = kill(p, 0) && (errno != EPERM); if (gone && (els == 0)) { // ToDo: garbage collection: move this statistical bucket // from its current UID/PID to UID/? (races and @@ -676,8 +777,8 @@ void LogStatistics::format(char **buf, } spaces = 0; - intermediate = string.format((gone) ? "%d/%d?" : "%d/%d", u, p); - string.appendFormat((first) ? "\n%-12s" : "%-12s", + intermediate = string.format(gone ? "%d/%d?" : "%d/%d", u, p); + string.appendFormat(first ? "\n%-12s" : "%-12s", intermediate.string()); intermediate.clear(); @@ -711,7 +812,7 @@ void LogStatistics::format(char **buf, } intermediate = string.format("%d/?", u); - string.appendFormat((first) ? "\n%-12s" : "%-12s", + string.appendFormat(first ? "\n%-12s" : "%-12s", intermediate.string()); intermediate.clear(); diff --git a/rootdir/init.zygote32_64.rc b/rootdir/init.zygote32_64.rc new file mode 100644 index 0000000..3d60a31 --- /dev/null +++ b/rootdir/init.zygote32_64.rc @@ -0,0 +1,12 @@ +service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote + class main + socket zygote stream 660 root system + onrestart write /sys/android_power/request_state wake + onrestart write /sys/power/state on + onrestart restart media + onrestart restart netd + +service zygote_secondary /system/bin/app_process64 -Xzygote /system/bin --zygote --socket-name=zygote_secondary + class main + socket zygote_secondary stream 660 root system + onrestart restart zygote diff --git a/toolbox/syren.c b/toolbox/syren.c index 06e329e..47c2460 100644 --- a/toolbox/syren.c +++ b/toolbox/syren.c @@ -123,7 +123,11 @@ syren_main(int argc, char **argv) r = find_reg(argv[2]); if (r == NULL) { - strcpy(name, argv[2]); + if(strlen(argv[2]) >= sizeof(name)){ + fprintf(stderr, "REGNAME too long\n"); + return 0; + } + strlcpy(name, argv[2], sizeof(name)); char *addr_str = strchr(argv[2], ':'); if (addr_str == NULL) return usage(); @@ -131,7 +135,7 @@ syren_main(int argc, char **argv) sio.page = strtoul(argv[2], 0, 0); sio.addr = strtoul(addr_str, 0, 0); } else { - strcpy(name, r->name); + strlcpy(name, r->name, sizeof(name)); sio.page = r->page; sio.addr = r->addr; } |