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
568568
569569 static void dwarf_file(TCCState *s1)
570570 {
571− int i;
571+ int i, j;
572572 char *filename;
573573
574574 filename = strrchr(file->filename, '/');
@@ -580,14 +580,16 @@ static void dwarf_file(TCCState *s1) · 5 unmodified lines
580580 dwarf_line.cur_file = i;
581581 return;
582582 }
583+ i = 0;
584+ filename = file->filename;
583585 }
584586 else {
585− int j;
586587 char *undo = filename;
588+ char *dir = file->filename;
587589
588590 *filename++ = '\0';
589591 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) {
591593 for (j = 1; j < dwarf_line.filename_size; j++)
592594 if (dwarf_line.filename_table[j].dir_entry == i &&
593595 strcmp(dwarf_line.filename_table[j].name,
@@ -596,8 +598,33 @@ static void dwarf_file(TCCState *s1) · 2 unmodified lines
596598 dwarf_line.cur_file = j;
597599 return;
598600 }
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+ }
599611 *undo = '/';
600612 }
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+ }
601628 return;
602629 }
603630
@@ -1028,49 +1055,8 @@ ST_FUNC void tcc_debug_bincl(TCCState *s1) · 424 unmodified lines
10281055 if (!s1->do_debug)
10291056 return;
10301057 if (s1->dwarf) {
1031− int i, j;
1032− char *filename = strrchr(file->filename, '/');
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);
1058+ if (strcmp(file->filename, "<command line>"))
1059+ dwarf_file(s1);
10741060 }
10751061 else
10761062 {

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