diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-29 14:32:01 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-29 14:32:01 +0000 |
commit | 2425bdce34cd142b29eabad00927a9c473b05ecb (patch) | |
tree | a6ad29eb35cb296af12bbbac0a37c55ed23744cf | |
parent | 834410a5a56e7e7efac8b111bffd4c2362f5bc3f (diff) | |
download | busybox-w32-2425bdce34cd142b29eabad00927a9c473b05ecb.tar.gz busybox-w32-2425bdce34cd142b29eabad00927a9c473b05ecb.tar.bz2 busybox-w32-2425bdce34cd142b29eabad00927a9c473b05ecb.zip |
od: fix buglet in --traditional, microoptimization,
document coreutils bug
bloat-o-meter: account for objects in rodata too
-rw-r--r-- | coreutils/od_bloaty.c | 34 | ||||
-rwxr-xr-x | scripts/bloat-o-meter | 2 |
2 files changed, 18 insertions, 18 deletions
diff --git a/coreutils/od_bloaty.c b/coreutils/od_bloaty.c index b818521e4..9f1a582ef 100644 --- a/coreutils/od_bloaty.c +++ b/coreutils/od_bloaty.c | |||
@@ -845,17 +845,18 @@ format_address_none(off_t address ATTRIBUTE_UNUSED, char c ATTRIBUTE_UNUSED) | |||
845 | { | 845 | { |
846 | } | 846 | } |
847 | 847 | ||
848 | static int address_pad_len; | 848 | static char address_fmt[] = "%0n"OFF_FMT"xc"; |
849 | static char address_fmt[] = "%0*"OFF_FMT"xc"; | ||
850 | /* Corresponds to 'x' above */ | 849 | /* Corresponds to 'x' above */ |
851 | #define address_base_char address_fmt[sizeof(address_fmt)-3] | 850 | #define address_base_char address_fmt[sizeof(address_fmt)-3] |
851 | /* Corresponds to 'n' above */ | ||
852 | #define address_pad_len_char address_fmt[2] | ||
852 | 853 | ||
853 | static void | 854 | static void |
854 | format_address_std(off_t address, char c) | 855 | format_address_std(off_t address, char c) |
855 | { | 856 | { |
856 | /* Corresponds to 'c' */ | 857 | /* Corresponds to 'c' */ |
857 | address_fmt[sizeof(address_fmt)-2] = c; | 858 | address_fmt[sizeof(address_fmt)-2] = c; |
858 | printf(address_fmt, address_pad_len, address); | 859 | printf(address_fmt, address); |
859 | } | 860 | } |
860 | 861 | ||
861 | #if ENABLE_GETOPT_LONG | 862 | #if ENABLE_GETOPT_LONG |
@@ -865,6 +866,7 @@ format_address_paren(off_t address, char c) | |||
865 | { | 866 | { |
866 | putchar('('); | 867 | putchar('('); |
867 | format_address_std(address, ')'); | 868 | format_address_std(address, ')'); |
869 | /* BUG in coreutils 5.2.1! must be "if (c) putchar(c);" */ | ||
868 | putchar(c); | 870 | putchar(c); |
869 | } | 871 | } |
870 | 872 | ||
@@ -926,7 +928,7 @@ write_block(off_t current_offset, size_t n_bytes, | |||
926 | if (i == 0) | 928 | if (i == 0) |
927 | format_address(current_offset, '\0'); | 929 | format_address(current_offset, '\0'); |
928 | else | 930 | else |
929 | printf("%*s", address_pad_len, ""); | 931 | printf("%*s", address_pad_len_char - '0', ""); |
930 | (*spec[i].print_function) (n_bytes, curr_block, spec[i].fmt_string); | 932 | (*spec[i].print_function) (n_bytes, curr_block, spec[i].fmt_string); |
931 | if (spec[i].hexl_mode_trailer) { | 933 | if (spec[i].hexl_mode_trailer) { |
932 | /* space-pad out to full line width, then dump the trailer */ | 934 | /* space-pad out to full line width, then dump the trailer */ |
@@ -1261,7 +1263,7 @@ od_main(int argc, char **argv) | |||
1261 | spec = NULL; | 1263 | spec = NULL; |
1262 | format_address = format_address_std; | 1264 | format_address = format_address_std; |
1263 | address_base_char = 'o'; | 1265 | address_base_char = 'o'; |
1264 | address_pad_len = 7; | 1266 | address_pad_len_char = '7'; |
1265 | flag_dump_strings = 0; | 1267 | flag_dump_strings = 0; |
1266 | 1268 | ||
1267 | /* Parse command line */ | 1269 | /* Parse command line */ |
@@ -1279,14 +1281,12 @@ od_main(int argc, char **argv) | |||
1279 | argv += optind; | 1281 | argv += optind; |
1280 | if (opt & OPT_A) { | 1282 | if (opt & OPT_A) { |
1281 | static const char doxn[] = "doxn"; | 1283 | static const char doxn[] = "doxn"; |
1282 | static FN_format_address *const doxn_format_address[] = { | 1284 | static const char doxn_address_base_char[] = { |
1283 | format_address_std, | 1285 | 'u', 'o', 'x', /* '?' fourth one is not important */ |
1284 | format_address_std, | 1286 | }; |
1285 | format_address_std, | 1287 | static const uint8_t doxn_address_pad_len_char[] = { |
1286 | format_address_none, | 1288 | '7', '7', '6', /* '?' */ |
1287 | }; | 1289 | }; |
1288 | static const char doxn_address_base_char[] = { 'u', 'o', 'x', 'x' }; | ||
1289 | static const uint8_t doxn_address_pad_len[] = { 7, 7, 6, 0 }; | ||
1290 | char *p; | 1290 | char *p; |
1291 | int pos; | 1291 | int pos; |
1292 | p = strchr(doxn, str_A[0]); | 1292 | p = strchr(doxn, str_A[0]); |
@@ -1294,9 +1294,9 @@ od_main(int argc, char **argv) | |||
1294 | bb_error_msg_and_die("bad output address radix " | 1294 | bb_error_msg_and_die("bad output address radix " |
1295 | "'%c' (must be [doxn])", str_A[0]); | 1295 | "'%c' (must be [doxn])", str_A[0]); |
1296 | pos = p - doxn; | 1296 | pos = p - doxn; |
1297 | format_address = doxn_format_address[pos]; | 1297 | if (pos == 3) format_address = format_address_none; |
1298 | address_base_char = doxn_address_base_char[pos]; | 1298 | address_base_char = doxn_address_base_char[pos]; |
1299 | address_pad_len = doxn_address_pad_len[pos]; | 1299 | address_pad_len_char = doxn_address_pad_len_char[pos]; |
1300 | } | 1300 | } |
1301 | if (opt & OPT_N) { | 1301 | if (opt & OPT_N) { |
1302 | limit_bytes_to_format = 1; | 1302 | limit_bytes_to_format = 1; |
@@ -1389,12 +1389,12 @@ od_main(int argc, char **argv) | |||
1389 | } | 1389 | } |
1390 | 1390 | ||
1391 | if (flag_pseudo_start) { | 1391 | if (flag_pseudo_start) { |
1392 | format_address = format_address_label; | ||
1393 | if (format_address == format_address_none) { | 1392 | if (format_address == format_address_none) { |
1394 | address_base_char = 'o'; | 1393 | address_base_char = 'o'; |
1395 | address_pad_len = 7; | 1394 | address_pad_len_char = '7'; |
1396 | format_address = format_address_paren; | 1395 | format_address = format_address_paren; |
1397 | } | 1396 | } else |
1397 | format_address = format_address_label; | ||
1398 | } | 1398 | } |
1399 | } | 1399 | } |
1400 | #endif | 1400 | #endif |
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter index 31364fe11..67b3d290d 100755 --- a/scripts/bloat-o-meter +++ b/scripts/bloat-o-meter | |||
@@ -17,7 +17,7 @@ def getsizes(file): | |||
17 | sym = {} | 17 | sym = {} |
18 | for l in os.popen("nm --size-sort " + file).readlines(): | 18 | for l in os.popen("nm --size-sort " + file).readlines(): |
19 | size, type, name = l[:-1].split() | 19 | size, type, name = l[:-1].split() |
20 | if type in "tTdDbB": | 20 | if type in "tTdDbBrR": |
21 | if "." in name: name = "static." + name.split(".")[0] | 21 | if "." in name: name = "static." + name.split(".")[0] |
22 | sym[name] = sym.get(name, 0) + int(size, 16) | 22 | sym[name] = sym.get(name, 0) + int(size, 16) |
23 | for l in os.popen("readelf -S " + file).readlines(): | 23 | for l in os.popen("readelf -S " + file).readlines(): |