History

Fix bitfield long types for stabs/dwarf

Also made dwarf *leb128 fuctions a litlle bit faster.

herman ten brugge committed 4 years ago

Commit a4e0f7e1 parent e301a0b1 file · +25 −25Browse files

Unified · Split

tccdbg.c+25−25
@@ -69,7 +69,14 @@ static const struct { · 68 unmodified lines
69 { VT_BYTE | VT_UNSIGNED, 1, DW_ATE_unsigned_char, "unsigned char:t25=r25;0;255;" },69 { VT_BYTE | VT_UNSIGNED, 1, DW_ATE_unsigned_char, "unsigned char:t25=r25;0;255;" },
70 /* boolean type */70 /* boolean type */
71 { VT_BOOL, 1, DW_ATE_boolean, "bool:t26=r26;0;255;" },71 { VT_BOOL, 1, DW_ATE_boolean, "bool:t26=r26;0;255;" },
72#if LONG_SIZE == 4
72 { VT_VOID, 1, DW_ATE_unsigned_char, "void:t27=27" },73 { VT_VOID, 1, DW_ATE_unsigned_char, "void:t27=27" },
74#else
75 /* bitfields use these */
76 { VT_LONG | VT_INT, 8, DW_ATE_signed, "long int:t27=r27;-9223372036854775808;9223372036854775807;" },
77 { VT_LONG | VT_INT | VT_UNSIGNED, 8, DW_ATE_unsigned, "long unsigned int:t28=r28;0;01777777777777777777777;" },
78 { VT_VOID, 1, DW_ATE_unsigned_char, "void:t29=29" },
79#endif
73};80};
74 81
75#define N_DEFAULT_DEBUG (sizeof (default_debug) / sizeof (default_debug[0]))82#define N_DEFAULT_DEBUG (sizeof (default_debug) / sizeof (default_debug[0]))
@@ -584,17 +591,16 @@ static int dwarf_uleb128_size (unsigned long long value) · 508 unmodified lines
584 591
585static int dwarf_sleb128_size (long long value)592static int dwarf_sleb128_size (long long value)
586{593{
587 int more;
588 int size = 0;594 int size = 0;
595 long long end = value >> 63;
596 unsigned char last = end & 0x40;
597 unsigned char byte;
589 598
590 do {599 do {
591 unsigned char byte = value & 0x7f;600 byte = value & 0x7f;
592 601 value >>= 7;
593 value = (value >> 7) | ~(-1 >> 7);
594 more =!((((value == 0) && ((byte & 0x40) == 0))
595 || ((value == -1) && ((byte & 0x40) != 0))));
596 size++;602 size++;
597 } while (more);603 } while (value != end || (byte & 0x40) != last);
598 return size;604 return size;
599}605}
600 606
@@ -604,25 +610,22 @@ static void dwarf_uleb128 (Section *s, unsigned long long value) · 3 unmodified lines
604 unsigned char byte = value & 0x7f;610 unsigned char byte = value & 0x7f;
605 611
606 value >>= 7;612 value >>= 7;
607 if (value)613 dwarf_data1(s, byte | (value ? 0x80 : 0));
608 byte |= 0x80;
609 dwarf_data1(s, byte);
610 } while (value != 0);614 } while (value != 0);
611}615}
612 616
613static void dwarf_sleb128 (Section *s, long long value)617static void dwarf_sleb128 (Section *s, long long value)
614{618{
615 int more;619 int more;
620 long long end = value >> 63;
621 unsigned char last = end & 0x40;
616 622
617 do {623 do {
618 unsigned char byte = value & 0x7f;624 unsigned char byte = value & 0x7f;
619 625
620 value = (value >> 7) | ~(-1 >> 7);626 value >>= 7;
621 more =!((((value == 0) && ((byte & 0x40) == 0))627 more = value != end || (byte & 0x40) != last;
622 || ((value == -1) && ((byte & 0x40) != 0))));628 dwarf_data1(s, byte | (0x80 * more));
623 if (more)
624 byte |= 0x80;
625 dwarf_data1(s, byte);
626 } while (more);629 } while (more);
627}630}
628 631
@@ -632,25 +635,22 @@ static void dwarf_uleb128_op (TCCState *s1, unsigned long long value) · 3 unmodified lines
632 unsigned char byte = value & 0x7f;635 unsigned char byte = value & 0x7f;
633 636
634 value >>= 7;637 value >>= 7;
635 if (value)638 dwarf_line_op(s1, byte | (value ? 0x80 : 0));
636 byte |= 0x80;
637 dwarf_line_op(s1, byte);
638 } while (value != 0);639 } while (value != 0);
639}640}
640 641
641static void dwarf_sleb128_op (TCCState *s1, long long value)642static void dwarf_sleb128_op (TCCState *s1, long long value)
642{643{
643 int more;644 int more;
645 long long end = value >> 63;
646 unsigned char last = end & 0x40;
644 647
645 do {648 do {
646 unsigned char byte = value & 0x7f;649 unsigned char byte = value & 0x7f;
647 650
648 value = (value >> 7) | ~(-1 >> 7);651 value >>= 7;
649 more =!((((value == 0) && ((byte & 0x40) == 0))652 more = value != end || (byte & 0x40) != last;
650 || ((value == -1) && ((byte & 0x40) != 0))));653 dwarf_line_op(s1, byte | (0x80 * more));
651 if (more)
652 byte |= 0x80;
653 dwarf_line_op(s1, byte);
654 } while (more);654 } while (more);
655}655}
656 656

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t