Sorry, forgot to cc gcc-patches.
在 2023/11/13 16:05, HAO CHEN GUI 写道: > Andrew, > Could you kindly inform us what's the functionality of __objc_forward? > Does it change the memory content pointed by args? Thanks a lot. > > Thanks > Gui Haochen > > > libobjc/sendmsg.c. > > void *args, *res; > > args = __builtin_apply_args (); > res = __objc_forward (rcv, op, args); > if (res) > __builtin_return (res); > else > ... > > -------- 转发的消息 -------- > 主题: Re: [PATCH, expand] Call misaligned memory reference in > expand_builtin_return [PR112417] > 日期: Fri, 10 Nov 2023 14:39:02 +0100 > From: Richard Biener <richard.guent...@gmail.com> > 收件人: HAO CHEN GUI <guih...@linux.ibm.com> > 抄送: gcc-patches <gcc-patches@gcc.gnu.org>, Kewen.Lin <li...@linux.ibm.com> > > On Fri, Nov 10, 2023 at 11:10 AM HAO CHEN GUI <guih...@linux.ibm.com> wrote: >> >> Hi Richard, >> >> 在 2023/11/10 17:06, Richard Biener 写道: >>> On Fri, Nov 10, 2023 at 8:52 AM HAO CHEN GUI <guih...@linux.ibm.com> wrote: >>>> >>>> Hi Richard, >>>> Thanks so much for your comments. >>>> >>>> 在 2023/11/9 19:41, Richard Biener 写道: >>>>> I'm not sure if the testcase is valid though? >>>>> >>>>> @defbuiltin{{void} __builtin_return (void *@var{result})} >>>>> This built-in function returns the value described by @var{result} from >>>>> the containing function. You should specify, for @var{result}, a value >>>>> returned by @code{__builtin_apply}. >>>>> @enddefbuiltin >>>>> >>>>> I don't see __builtin_apply being used here? >>>> >>>> The prototype of the test case is from "__objc_block_forward" in >>>> libobjc/sendmsg.c. >>>> >>>> void *args, *res; >>>> >>>> args = __builtin_apply_args (); >>>> res = __objc_forward (rcv, op, args); >>>> if (res) >>>> __builtin_return (res); >>>> else >>>> ... >>>> >>>> The __builtin_apply_args puts the return values on stack by the alignment. >>>> But the forward function can do anything and return a void* pointer. >>>> IMHO the alignment might be broken. So I just simplified it to use a >>>> void* pointer as the input argument of "__builtin_return" and skip >>>> "__builtin_apply_args". >>> >>> But doesn't __objc_forward then break the contract between >>> __builtin_apply_args and __builtin_return? >>> >>> That said, __builtin_return is a very special function, it's not supposed >>> to deal with what you are fixing. At least I think so. >>> >>> IMHO the bug is in __objc_block_forward. >> >> If so, can we document that the memory objects pointed by input argument of >> __builtin_return have to be aligned? Then we can force the alignment in >> __builtin_return. The customer function can do anything if gcc doesn't state >> that. > > I don't think they have to be aligned - they have to adhere to the ABI > which __builtin_apply_args ensures. But others might know more details > here. > >> Thanks >> Gui Haochen >> >>> >>> Richard. >>> >>>> >>>> Thanks >>>> Gui Haochen