Message ID | 8465E34A-78A0-4216-B13B-C56A554BC8EE@sandoe.co.uk |
---|---|
State | New |
Headers | show |
Series | [pushed] libiberty, Darwin : Fix simple-object LTO table for cross-endian case. | expand |
On 8/18/21 20:37, Iain Sandoe wrote: > Hi, > > For mach-o, we encapsulate streamed IR for LTO in three special > sections with a table that describes their entries. The table is expected > to be written with native endianness for the target, but for cross-endian > cross-compilation the swapping was omitted. Fixed thus. Hello. I noticed the change produced the following Clang warning: build/libiberty/simple-object-mach-o.c:1231:10: warning: incompatible pointer types passing 'unsigned int *' to parameter of type 'unsigned char *' [-Wincompatible-pointer-types] Can you please take a look? Thanks, Martin > > tested on a cross from x86_64-darwin to powerpc-darwin, > pushed to master, thanks > Iain > > Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> > > libiberty/ChangeLog: > > * simple-object-mach-o.c (simple_object_mach_o_write_segment): > Arrange to swap the LTO index tables where needed. > --- > libiberty/simple-object-mach-o.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/libiberty/simple-object-mach-o.c b/libiberty/simple-object-mach-o.c > index aa5e0952faf..72b69d19c21 100644 > --- a/libiberty/simple-object-mach-o.c > +++ b/libiberty/simple-object-mach-o.c > @@ -1225,6 +1225,11 @@ simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor, > index[4 * i] -= index[0]; > index[0] = 0; > > + /* Swap the indices, if required. */ > + > + for (i = 0; i < (nsects_in * 4); ++i) > + set_32 (&index[i], index[i]); > + > sechdr_offset += sechdrsize; > > /* Write out the section names. >
Hi, > On 23 Aug 2021, at 09:07, Martin Liška <mliska@suse.cz> wrote: > > On 8/18/21 20:37, Iain Sandoe wrote: >> For mach-o, we encapsulate streamed IR for LTO in three special >> sections with a table that describes their entries. The table is expected >> to be written with native endianness for the target, but for cross-endian >> cross-compilation the swapping was omitted. Fixed thus. > I noticed the change produced the following Clang warning: > > build/libiberty/simple-object-mach-o.c:1231:10: warning: incompatible pointer types passing 'unsigned int *' to parameter of type 'unsigned char *' [-Wincompatible-pointer-types] thanks for catching that, fixed as below tested on x86_64-darwin X powerpc-darwin (with clang and GCC). pushed to master, thanks Iain diff --git a/libiberty/simple-object-mach-o.c b/libiberty/simple-object-mach-o.c index 72b69d19c21..a8869e7c639 100644 --- a/libiberty/simple-object-mach-o.c +++ b/libiberty/simple-object-mach-o.c @@ -1228,7 +1228,7 @@ simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor, /* Swap the indices, if required. */ for (i = 0; i < (nsects_in * 4); ++i) - set_32 (&index[i], index[i]); + set_32 ((unsigned char *) &index[i], index[i]); sechdr_offset += sechdrsize;
diff --git a/libiberty/simple-object-mach-o.c b/libiberty/simple-object-mach-o.c index aa5e0952faf..72b69d19c21 100644 --- a/libiberty/simple-object-mach-o.c +++ b/libiberty/simple-object-mach-o.c @@ -1225,6 +1225,11 @@ simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor, index[4 * i] -= index[0]; index[0] = 0; + /* Swap the indices, if required. */ + + for (i = 0; i < (nsects_in * 4); ++i) + set_32 (&index[i], index[i]); + sechdr_offset += sechdrsize; /* Write out the section names.
Hi, For mach-o, we encapsulate streamed IR for LTO in three special sections with a table that describes their entries. The table is expected to be written with native endianness for the target, but for cross-endian cross-compilation the swapping was omitted. Fixed thus. tested on a cross from x86_64-darwin to powerpc-darwin, pushed to master, thanks Iain Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> libiberty/ChangeLog: * simple-object-mach-o.c (simple_object_mach_o_write_segment): Arrange to swap the LTO index tables where needed. --- libiberty/simple-object-mach-o.c | 5 +++++ 1 file changed, 5 insertions(+)