# HG changeset patch # User Matti Hamalainen # Date 1645978531 -7200 # Node ID 8dd81ec802f4076c8f73bf46b7c9b87be8153b47 # Parent 5c9056f381ae475f007acde007bfe99bfe8c55cb Prevent reporting same cross-overlap areas two times. diff -r 5c9056f381ae -r 8dd81ec802f4 tools/objlink.c --- a/tools/objlink.c Sun Feb 27 18:15:03 2022 +0200 +++ b/tools/objlink.c Sun Feb 27 18:15:31 2022 +0200 @@ -28,6 +28,13 @@ typedef struct { + int noverlaps; + int overlaps[SET_MAX_FILENAMES]; +} DMMemBlockOverlap; + + +typedef struct +{ char *name; // Description of memory model char *desc; int size; // Total addressable memory size @@ -144,6 +151,7 @@ int nmemBlocks = 0; DMMemBlock memBlocks[SET_MAX_FILENAMES]; +DMMemBlockOverlap memBlockOverlaps[SET_MAX_FILENAMES]; char *optDestName = NULL; char *optLinkFileName = NULL; @@ -917,12 +925,28 @@ for (int bk2 = 0; bk2 < nmemBlocks; bk2++) if (bk1 != bk2) { - DMMemBlock *mb1 = &memBlocks[bk1], - *mb2 = &memBlocks[bk2]; + DMMemBlockOverlap + *olp1 = &memBlockOverlaps[bk1], + *olp2 = &memBlockOverlaps[bk2]; + DMMemBlock + *mb1 = &memBlocks[bk1], + *mb2 = &memBlocks[bk2]; + BOOL found = FALSE; if (mb1->type != MTYPE_RES) continue; + for (int no = 0; no < olp1->noverlaps; no++) + { + if (olp1->overlaps[no] == bk2) + { + found = TRUE; + break; + } + } + if (found) + continue; + // Check for per-file conflicts if ((mb2->start >= mb1->start && mb2->start <= mb1->end) || (mb2->end >= mb1->start && mb2->end <= mb1->end)) @@ -931,6 +955,8 @@ mb1->name, mb2->name, mb1->start, mb1->end, mb2->start, mb2->end); + olp1->overlaps[olp1->noverlaps++] = bk2; + olp2->overlaps[olp2->noverlaps++] = bk1; hasOverlaps = TRUE; } }