History

Fix preprocessor line directive for macos

Macos has an offset of 1 for DW_LNS_set_file. Also rewrite dwarf_file to not scan list twice and move check for <command line> to this function.

herman ten brugge committed 3 years ago

Commit d0efbc51 parent ee3fef22 files · +24 −23Browse files

Unified · Split

2 files
  1. tccdbg.c +21 −23
  2. tccrun.c +3 −0
tccdbg.c+21−23
@@ -571,12 +571,16 @@ static void dwarf_file(TCCState *s1) · 570 unmodified lines
571 int i, j;571 int i, j;
572 char *filename;572 char *filename;
573 573
574 if (!strcmp(file->filename, "<command line>")) {
575 dwarf_line.cur_file = 1;
576 return;
577 }
574 filename = strrchr(file->filename, '/');578 filename = strrchr(file->filename, '/');
575 if (filename == NULL) {579 if (filename == NULL) {
576 for (i = 1; i < dwarf_line.filename_size; i++)580 for (i = 1; i < dwarf_line.filename_size; i++)
577 if (dwarf_line.filename_table[i].dir_entry == 0 &&581 if (dwarf_line.filename_table[i].dir_entry == 0 &&
578 strcmp(dwarf_line.filename_table[i].name,582 strcmp(dwarf_line.filename_table[i].name,
579 file->filename) == 0) {583 file->filename) == 0) {
580 dwarf_line.cur_file = i;584 dwarf_line.cur_file = i;
581 return;585 return;
582 }586 }
@@ -593,7 +597,7 @@ static void dwarf_file(TCCState *s1) · 10 unmodified lines
593 for (j = 1; j < dwarf_line.filename_size; j++)597 for (j = 1; j < dwarf_line.filename_size; j++)
594 if (dwarf_line.filename_table[j].dir_entry == i &&598 if (dwarf_line.filename_table[j].dir_entry == i &&
595 strcmp(dwarf_line.filename_table[j].name,599 strcmp(dwarf_line.filename_table[j].name,
596 filename) == 0) {600 filename) == 0) {
597 *undo = '/';601 *undo = '/';
598 dwarf_line.cur_file = j;602 dwarf_line.cur_file = j;
599 return;603 return;
@@ -610,21 +614,15 @@ static void dwarf_file(TCCState *s1) · 10 unmodified lines
610 }614 }
611 *undo = '/';615 *undo = '/';
612 }616 }
613 for (j = 1; j < dwarf_line.filename_size; j++)617 dwarf_line.filename_table =
614 if (dwarf_line.filename_table[j].dir_entry == i &&618 (struct dwarf_filename_struct *)
615 strcmp (dwarf_line.filename_table[j].name, filename) == 0)619 tcc_realloc(dwarf_line.filename_table,
616 break;620 (dwarf_line.filename_size + 1) *
617 if (j == dwarf_line.filename_size) {621 sizeof (struct dwarf_filename_struct));
618 dwarf_line.filename_table =622 dwarf_line.filename_table[dwarf_line.filename_size].dir_entry = i;
619 (struct dwarf_filename_struct *)623 dwarf_line.filename_table[dwarf_line.filename_size].name =
620 tcc_realloc(dwarf_line.filename_table,624 tcc_strdup(filename);
621 (dwarf_line.filename_size + 1) *625 dwarf_line.cur_file = dwarf_line.filename_size++;
622 sizeof (struct dwarf_filename_struct));
623 dwarf_line.filename_table[dwarf_line.filename_size].dir_entry = i;
624 dwarf_line.filename_table[dwarf_line.filename_size++].name =
625 tcc_strdup(filename);
626 dwarf_line.cur_file = j;
627 }
628 return;626 return;
629}627}
630 628
@@ -1054,14 +1052,10 @@ ST_FUNC void tcc_debug_bincl(TCCState *s1) · 423 unmodified lines
1054{1052{
1055 if (!s1->do_debug)1053 if (!s1->do_debug)
1056 return;1054 return;
1057 if (s1->dwarf) {1055 if (s1->dwarf)
1058 if (strcmp(file->filename, "<command line>"))1056 dwarf_file(s1);
1059 dwarf_file(s1);
1060 }
1061 else1057 else
1062 {
1063 put_stabs(s1, file->filename, N_BINCL, 0, 0, 0);1058 put_stabs(s1, file->filename, N_BINCL, 0, 0, 0);
1064 }
1065 new_file = 1;1059 new_file = 1;
1066}1060}
1067 1061
@@ -1101,7 +1095,11 @@ ST_FUNC void tcc_debug_line(TCCState *s1) · 33 unmodified lines
1101 if (dwarf_line.cur_file != dwarf_line.last_file) {1095 if (dwarf_line.cur_file != dwarf_line.last_file) {
1102 dwarf_line.last_file = dwarf_line.cur_file;1096 dwarf_line.last_file = dwarf_line.cur_file;
1103 dwarf_line_op(s1, DW_LNS_set_file);1097 dwarf_line_op(s1, DW_LNS_set_file);
1098#ifdef TCC_TARGET_MACHO
1099 dwarf_uleb128_op(s1, dwarf_line.cur_file + 1);
1100#else
1104 dwarf_uleb128_op(s1, dwarf_line.cur_file);1101 dwarf_uleb128_op(s1, dwarf_line.cur_file);
1102#endif
1105 }1103 }
1106 if (len_pc &&1104 if (len_pc &&
1107 len_line >= DWARF_LINE_BASE && len_line <= (DWARF_OPCODE_BASE + DWARF_LINE_BASE) &&1105 len_line >= DWARF_LINE_BASE && len_line <= (DWARF_OPCODE_BASE + DWARF_LINE_BASE) &&
tccrun.c+3−0
@@ -975,6 +975,9 @@ check_pc: · 974 unmodified lines
975 break;975 break;
976 case DW_LNS_set_file:976 case DW_LNS_set_file:
977 i = dwarf_read_uleb128(&ln, end);977 i = dwarf_read_uleb128(&ln, end);
978#ifdef TCC_TARGET_MACHO
979 i--;
980#endif
978 if (i < FILE_TABLE_SIZE && i < filename_size)981 if (i < FILE_TABLE_SIZE && i < filename_size)
979 filename = filename_table[i].name;982 filename = filename_table[i].name;
980 break;983 break;

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