libiberty, Darwin: Fix handling of file offsets.

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 <iain@sandoe.co.uk>
This commit is contained in:
Iain Sandoe
2026-02-24 11:44:27 +00:00
parent 772499fd7e
commit 0bdbd1fa48

View File

@@ -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);