~ chicken-core (chicken-5) d22d72420d26d6aaadafc8cc4fe664d1f95ed07b
commit d22d72420d26d6aaadafc8cc4fe664d1f95ed07b Author: Peter Bex <peter@more-magic.net> AuthorDate: Mon Apr 11 22:28:45 2016 +0200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Tue Apr 12 14:31:00 2016 +1200 Fix dbg-stub formatting strings to be 32-bit clean The formatting strings used were specific to integer widths on 64-bit machines, which meant there were problems with debugging on 32-bit systems. Thanks to Kooda for pointing this out. Signed-off-by: Evan Hanson <evhan@foldling.org> diff --git a/dbg-stub.c b/dbg-stub.c index 73d42eb9..fa199ea5 100644 --- a/dbg-stub.c +++ b/dbg-stub.c @@ -75,11 +75,14 @@ static WSADATA wsa; #ifdef C_SIXTY_FOUR # define C_HEADER_BITS_SHIFT 56 +# define UWORD_COUNT_FORMAT_STRING "%lu" #else # define C_HEADER_BITS_SHIFT 24 +# define UWORD_COUNT_FORMAT_STRING "%u" #endif #define C_VALUE_CUTOFF_LIMIT 300 +#define get_header_bits(x) ((int)(C_header_bits((x)) >> C_HEADER_BITS_SHIFT)) struct bp_item { @@ -370,14 +373,14 @@ send_event(int event, C_char *loc, C_char *val, C_char *cloc, int cln) break; case C_DEBUG_REPLY_GET_SLOTS: - sscanf(rw_buffer, "(%d %ld)", &mask, &x); + sscanf(rw_buffer, "(%d " UWORD_COUNT_FORMAT_STRING ")", &mask, &x); if(mask >= C_VALUE_CUTOFF_LIMIT) mask = C_VALUE_CUTOFF_LIMIT; if((C_header_bits(x) & C_BYTEBLOCK_BIT) != 0) { reply = C_header_size(x); - sprintf(rw_buffer, "(* BLOB %ld", C_header_bits(x) >> C_HEADER_BITS_SHIFT); + sprintf(rw_buffer, "(* BLOB %d", get_header_bits(x)); send_string(rw_buffer); for(n = 0; n < reply; ++n) { @@ -392,11 +395,11 @@ send_event(int event, C_char *loc, C_char *val, C_char *cloc, int cln) n = 0; if((C_header_bits(x) & C_SPECIALBLOCK_BIT) != 0) { - sprintf(rw_buffer, "(* SPECIAL %ld %lu", C_header_bits(x) >> C_HEADER_BITS_SHIFT, - C_block_item(x, 0)); + sprintf(rw_buffer, "(* SPECIAL %d " UWORD_COUNT_FORMAT_STRING, + get_header_bits(x), C_block_item(x, 0)); n = 1; } - else sprintf(rw_buffer, "(* VECTOR %ld", C_header_bits(x) >> C_HEADER_BITS_SHIFT); + else sprintf(rw_buffer, "(* VECTOR %d", get_header_bits(x)); send_string(rw_buffer); @@ -428,11 +431,12 @@ send_event(int event, C_char *loc, C_char *val, C_char *cloc, int cln) send_string("(*"); for(n = 0; n < 8; ++n) { - sprintf(rw_buffer, " %lu", (unsigned long)stats[ n ]); + sprintf(rw_buffer, " " UWORD_COUNT_FORMAT_STRING, (C_uword)stats[ n ]); send_string(rw_buffer); } - sprintf(rw_buffer, " %lu)\n", (unsigned long)C_stack_pointer); + sprintf(rw_buffer, " " UWORD_COUNT_FORMAT_STRING ")\n", + (C_uword)C_stack_pointer); send_string(rw_buffer); break;Trap