The current behavior in this (possibly rare) case is misleading.

--
Regards,
Christian

From 6a68800512ce80689efbf43e639e7c1f38371636 Mon Sep 17 00:00:00 2001
From: Christian Franke <christian.fra...@t-online.de>
Date: Mon, 18 Jul 2022 16:07:26 +0200
Subject: [PATCH] Fix handling of newly added non-rebaseable DLLs

Reset needs_rebasing flag to avoid that such a DLL is later removed
from the list due to rebase failure.  Add related verbose messages.
---
 rebase.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/rebase.c b/rebase.c
index 39759a9..56d743d 100644
--- a/rebase.c
+++ b/rebase.c
@@ -705,6 +705,16 @@ merge_image_info ()
              if (verbose)
                fprintf (stderr, "rebasing %s because not in database yet\n", 
img_info_list[i].name);
            }
+         else if (img_info_list[i].flag.cannot_rebase == 1)
+           {
+             /* Not in database yet and not rebaseable.  Add without rebasing. 
*/
+             img_info_list[i].flag.needs_rebasing = 0;
+             if (verbose)
+               fprintf (stderr, "adding %s without rebasing because file is 
not writable\n",
+                        img_info_list[i].name);
+             /* FIXME: Overlaps of DLLs in the database with this DLL will
+                not be detected below. */
+           }
        }
     }
   if (!img_info_rebase_start || force_rebase_flag)
@@ -715,7 +725,12 @@ merge_image_info ()
        {
          /* Test DLLs already in database for writability. */
          if (i < img_info_rebase_start)
-           set_cannot_rebase (&img_info_list[i]);
+           {
+             set_cannot_rebase (&img_info_list[i]);
+             if (img_info_list[i].flag.cannot_rebase == 1 && verbose)
+               fprintf (stderr, "not rebasing %s because file is not 
writable\n",
+                        img_info_list[i].name);
+           }
          if (!img_info_list[i].flag.cannot_rebase)
            {
              img_info_list[i].base = 0;
-- 
2.37.1

Reply via email to