-
Notifications
You must be signed in to change notification settings - Fork 561
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This is used for functions that we don't suggest should be inlined, but we think the compiler will generate better code if it has full knowledge about them. At the moment, it only contains a single function which can be tail-call optimized. The Lord of the Rings quote for this file was suggested by Leon Timmermans. The proximal cause of this commit can be gleaned from this email: From - Mon Nov 16 09:20:50 2020 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00800000 X-Mozilla-Keys: Subject: Re: about commit "Revert "croak_memory_wrap is an inline function."" (khw) To: bulk88 <[email protected]>, [email protected] References: <[email protected]> From: Karl Williamson <[email protected]> Message-ID: <[email protected]> Date: Mon, 16 Nov 2020 09:20:41 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.3 MIME-Version: 1.0 In-Reply-To: <[email protected]> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 4/28/20 7:19 PM, bulk88 wrote: > https://perl5.git.perl.org/perl5.git/commitdiff/d68c938a1e6c6b4bfe907decbb4929780ee06eae > > > Why was this done? Perl_croak_memory_wrap is supposed to be a static > linkage, not globally visible C function, in every perl .o file that the > CC/linker should toss the static func if its not used. I wanted to avoid > the PLT/GOT runtime C symbol substitution/LDPRELOAD mechanism and let > the CC turn Perl_croak_memory_wrap into a single conditional jump > (offset from current instruction pointer), with no return and no C stack > entry, jump instruction instead of > > call get_EIP //x86 32 only > mov eax, *(eax_aka_eip+offset into PLT) > call eax I reverted this because, first of all, gcc with the appropriate -W options raised warnings that it was disregarding the request and was not inlining this function, and 2nd of all, there was no indication in the comments as to why this function had been inlined.
- Loading branch information
1 parent
c43e2db
commit d86d178
Showing
6 changed files
with
37 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* perlstatic.h | ||
* | ||
* 'I don't know half of you half as well as I should like; and I like less | ||
* than half of you half as well as you deserve.' | ||
* | ||
* Copyright (C) 2020 by Larry Wall and others | ||
* | ||
* You may distribute under the terms of either the GNU General Public | ||
* License or the Artistic License, as specified in the README file. | ||
* | ||
* This file is a home for static functions that we don't consider suitable for | ||
* inlining, but for which giving the compiler full knowledge of may be | ||
* advantageous. Functions that have potential tail call optimizations are a | ||
* likely component. | ||
*/ | ||
|
||
/* saves machine code for a common noreturn idiom typically used in Newx*() */ | ||
GCC_DIAG_IGNORE_DECL(-Wunused-function); | ||
|
||
STATIC void | ||
Perl_croak_memory_wrap(void) | ||
{ | ||
Perl_croak_nocontext("%s",PL_memory_wrap); | ||
} | ||
|
||
GCC_DIAG_RESTORE_DECL; | ||
|
||
|
||
/* | ||
* ex: set ts=8 sts=4 sw=4 et: | ||
*/ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters