On Fri, 2021-04-09 at 17:09 -0400, Michael Meissner wrote: > Fix logic error in 32-bit trampolines, PR target/98952. > > The test in the PowerPC 32-bit trampoline support is backwards. It aborts > if the trampoline size is greater than the expected size. It should abort > when the trampoline size is less than the expected size. > > I verified this by creating a 32-bit trampoline program and manually > changing the size of the trampoline to be 48 instead of 40. The program > aborted with the larger size. I updated this code and ran the test again > and it passed. > > I did a bootstrap build on a big endian power8 system that supports both > 32-bit and 64-bit executables, and there were no regressions. Can I check > this patch into the trunk? > > libgcc/ > 2021-04-09 Michael Meissner <meiss...@linux.ibm.com> > > PR target/98952 > * config/rs6000/tramp.S (__trampoline_setup): Fix trampoline size > comparison in 32-bit. > --- > libgcc/config/rs6000/tramp.S | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/libgcc/config/rs6000/tramp.S b/libgcc/config/rs6000/tramp.S > index 4236a82b402..6b61d892da6 100644 > --- a/libgcc/config/rs6000/tramp.S > +++ b/libgcc/config/rs6000/tramp.S > @@ -64,8 +64,7 @@ FUNC_START(__trampoline_setup) > mflr r11 > addi r7,r11,trampoline_initial-4-.LCF0 /* trampoline address -4 */ > > - li r8,trampoline_size /* verify that the trampoline is big > enough */ > - cmpw cr1,r8,r4 > + cmpwi cr1,r4,trampoline_size /* verify that the trampoline is big > enough */
Hmm, I spent several minutes trying to determine how cmpw behaves differently than cmpwi before noticing you also swapped the order of the r4,r8 operands. That seems OK. A statement in the description indicating that you used a cmpwi instead of a cmpw since you were in the neighborhood would help call that out. The #elif _CALL_ELF == 2 portion of tramp.S (line 159 or so) has a similar compare stanza with respect to the order of operands on the compare. Will this also have a backwards greater-than less-than issue? li r8,trampoline_size /* verify that the trampoline is big enough */ cmpw cr1,r8,r4 srwi r4,r4,3 /* # doublewords to move */ addi r9,r3,-8 /* adjust pointer for stdu */ mtctr r4 blt cr1,.Labort thanks -Will > srwi r4,r4,2 /* # words to move */ > addi r9,r3,-4 /* adjust pointer for lwzu */ > mtctr r4 > -- > 2.22.0 > >