History

Fix preprocessor line directive

The preprocessor line directive did not result in correct debug info when -g was used. Line directives like: #line 1 "filename" should now work.

herman ten brugge committed 3 years ago

Commit ee3fef21 parent 79d439e1 file · +32 −46Browse files

Unified · Split

tccdbg.c+32−46
@@ -568,7 +568,7 @@ static void dwarf_line_op(TCCState *s1, unsigned char op) · 567 unmodified lines
568 568
569static void dwarf_file(TCCState *s1)569static void dwarf_file(TCCState *s1)
570{570{
571 int i;571 int i, j;
572 char *filename;572 char *filename;
573 573
574 filename = strrchr(file->filename, '/');574 filename = strrchr(file->filename, '/');
@@ -580,14 +580,16 @@ static void dwarf_file(TCCState *s1) · 5 unmodified lines
580 dwarf_line.cur_file = i;580 dwarf_line.cur_file = i;
581 return;581 return;
582 }582 }
583 i = 0;
584 filename = file->filename;
583 }585 }
584 else {586 else {
585 int j;
586 char *undo = filename;587 char *undo = filename;
588 char *dir = file->filename;
587 589
588 *filename++ = '\0';590 *filename++ = '\0';
589 for (i = 0; i < dwarf_line.dir_size; i++)591 for (i = 0; i < dwarf_line.dir_size; i++)
590 if (strcmp(dwarf_line.dir_table[i], file->filename) == 0)592 if (strcmp(dwarf_line.dir_table[i], dir) == 0) {
591 for (j = 1; j < dwarf_line.filename_size; j++)593 for (j = 1; j < dwarf_line.filename_size; j++)
592 if (dwarf_line.filename_table[j].dir_entry == i &&594 if (dwarf_line.filename_table[j].dir_entry == i &&
593 strcmp(dwarf_line.filename_table[j].name,595 strcmp(dwarf_line.filename_table[j].name,
@@ -596,8 +598,33 @@ static void dwarf_file(TCCState *s1) · 2 unmodified lines
596 dwarf_line.cur_file = j;598 dwarf_line.cur_file = j;
597 return;599 return;
598 }600 }
601 break;
602 }
603 if (i == dwarf_line.dir_size) {
604 dwarf_line.dir_size++;
605 dwarf_line.dir_table =
606 (char **) tcc_realloc(dwarf_line.dir_table,
607 dwarf_line.dir_size *
608 sizeof (char *));
609 dwarf_line.dir_table[i] = tcc_strdup(dir);
610 }
599 *undo = '/';611 *undo = '/';
600 }612 }
613 for (j = 1; j < dwarf_line.filename_size; j++)
614 if (dwarf_line.filename_table[j].dir_entry == i &&
615 strcmp (dwarf_line.filename_table[j].name, filename) == 0)
616 break;
617 if (j == dwarf_line.filename_size) {
618 dwarf_line.filename_table =
619 (struct dwarf_filename_struct *)
620 tcc_realloc(dwarf_line.filename_table,
621 (dwarf_line.filename_size + 1) *
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 }
601 return;628 return;
602}629}
603 630
@@ -1028,49 +1055,8 @@ ST_FUNC void tcc_debug_bincl(TCCState *s1) · 424 unmodified lines
1028 if (!s1->do_debug)1055 if (!s1->do_debug)
1029 return;1056 return;
1030 if (s1->dwarf) {1057 if (s1->dwarf) {
1031 int i, j;1058 if (strcmp(file->filename, "<command line>"))
1032 char *filename = strrchr(file->filename, '/');1059 dwarf_file(s1);
1033 char *dir;
1034
1035 if (filename == NULL) {
1036 filename = file->filename;
1037 i = 0;
1038 }
1039 else {
1040 char *undo = filename;
1041
1042 *filename++ = '\0';
1043 dir = file->filename;
1044 for (i = 0; i < dwarf_line.dir_size; i++)
1045 if (strcmp (dwarf_line.dir_table[i], dir) == 0)
1046 break;
1047 if (i == dwarf_line.dir_size) {
1048 dwarf_line.dir_size++;
1049 dwarf_line.dir_table =
1050 (char **) tcc_realloc(dwarf_line.dir_table,
1051 dwarf_line.dir_size *
1052 sizeof (char *));
1053 dwarf_line.dir_table[i] = tcc_strdup(dir);
1054 }
1055 *undo = '/';
1056 }
1057 if (strcmp(filename, "<command line>")) {
1058 for (j = 1; j < dwarf_line.filename_size; j++)
1059 if (dwarf_line.filename_table[j].dir_entry == i &&
1060 strcmp (dwarf_line.filename_table[j].name, filename) == 0)
1061 break;
1062 if (j == dwarf_line.filename_size) {
1063 dwarf_line.filename_table =
1064 (struct dwarf_filename_struct *)
1065 tcc_realloc(dwarf_line.filename_table,
1066 (dwarf_line.filename_size + 1) *
1067 sizeof (struct dwarf_filename_struct));
1068 dwarf_line.filename_table[dwarf_line.filename_size].dir_entry = i;
1069 dwarf_line.filename_table[dwarf_line.filename_size++].name =
1070 tcc_strdup(filename);
1071 }
1072 }
1073 dwarf_file(s1);
1074 }1060 }
1075 else1061 else
1076 {1062 {

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