This is a latent issue but exposed by recent Algol68 changes and is
need to fix the modules-handling regression there.  Tested on x86_64,
i686 Darwin and on x86_64, powerpc64le Linux, pushed to trunk,
thanks,
Iain

--- 8< ---

In the case where a Mach-O object is embedded inside some container
(e.g. an archive) we must account the offset from the start of that
container when reading.  In most cases, this has been done correctly.
However, we were missing the case for reading segment data.  This
only showed up once we tried using archives (since regular Mach-O
objects start at the begining of the file).

Fixed thus.

libiberty/ChangeLog:

        * simple-object-mach-o.c
        (simple_object_mach_o_segment): Account for the offset of
        this Mach-O object from the start of any container.

Signed-off-by: Iain Sandoe <[email protected]>
---
 libiberty/simple-object-mach-o.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libiberty/simple-object-mach-o.c b/libiberty/simple-object-mach-o.c
index 3e81d6f908a..0897a3edf7d 100644
--- a/libiberty/simple-object-mach-o.c
+++ b/libiberty/simple-object-mach-o.c
@@ -464,7 +464,8 @@ simple_object_mach_o_segment (simple_object_read *sobj, 
off_t offset,
   /* Fetch the section headers from the segment command.  */
 
   secdata = XNEWVEC (unsigned char, nsects * sechdrsize);
-  if (!simple_object_internal_read (sobj->descriptor, offset + seghdrsize,
+  if (!simple_object_internal_read (sobj->descriptor,
+                                   sobj->offset + offset + seghdrsize,
                                    secdata, nsects * sechdrsize, errmsg, err))
     {
       XDELETEVEC (secdata);
-- 
2.50.1 (Apple Git-155)

Reply via email to