diff --git a/NEWS b/NEWS
index 32453c2b..e6892b75 100644
--- a/NEWS
+++ b/NEWS
@@ -61,6 +61,7 @@ Current:
     - bug #42908: no external reset at JTAGICE3
     - patch #8437: [PATCH] Serial-over-ethernet for Win32
     - patch #8380: adds 500k 1M 2M baud to ser_posix.c
+    - bug #44717: avrdude creates empty flash dump
 
   * Internals:
     - Removing exit calls from config parser
diff --git a/avrdude.1 b/avrdude.1
index a5e98ef5..682bb329 100644
--- a/avrdude.1
+++ b/avrdude.1
@@ -670,6 +670,12 @@ field is no longer optional since the filename part following the colon
 would otherwise be misinterpreted as
 .Ar format .
 .Pp
+When reading any kind of flash memory area (including the various sub-areas
+in Xmega devices), the resulting output file will be truncated to not contain
+trailing 0xFF bytes which indicate unprogrammed (erased) memory.
+Thus, if the entire memory is unprogrammed, this will result in an output
+file that has no contents at all.
+.Pp
 As an abbreviation, the form
 .Fl U Ar filename
 is equivalent to specifying
diff --git a/doc/avrdude.texi b/doc/avrdude.texi
index 383764f0..c04e562b 100644
--- a/doc/avrdude.texi
+++ b/doc/avrdude.texi
@@ -717,6 +717,12 @@ Note that if @var{filename} contains a colon, the @var{format} field is
 no longer optional since the filename part following the colon would
 otherwise be misinterpreted as @var{format}.
 
+When reading any kind of flash memory area (including the various sub-areas
+in Xmega devices), the resulting output file will be truncated to not contain
+trailing 0xFF bytes which indicate unprogrammed (erased) memory.
+Thus, if the entire memory is unprogrammed, this will result in an output
+file that has no contents at all.
+
 As an abbreviation, the form @code{-U} @var{filename}
 is equivalent to specifying
 @code{-U} @emph{flash:w:}@var{filename}@emph{:a}.
diff --git a/update.c b/update.c
index ecad1054..7bf5539a 100644
--- a/update.c
+++ b/update.c
@@ -243,6 +243,9 @@ int do_op(PROGRAMMER * pgm, struct avrpart * p, UPDATE * upd, enum updateflags f
     size = rc;
 
     if (quell_progress < 2) {
+      if (rc == 0)
+        avrdude_message(MSG_INFO, "%s: Flash is empty, resulting file has no contents.\n",
+                        progname);
       avrdude_message(MSG_INFO, "%s: writing output file \"%s\"\n",
                       progname,
                       strcmp(upd->filename, "-")==0 ? "<stdout>" : upd->filename);