This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Optimizations in Constructors?


On Sat, Jun 22, 2013 at 11:28 AM, David Brown <david.brown@hesbynett.no> wrote:
> On 22/06/13 10:38, Jeffrey Walton wrote:
>>
>> Hi All,
>>
>> I recently encountered a problem with a function was marked as a
>> constructor. The source file was compiled with -O0, but it appears the
>> function was optimized to the point it skipped some of the startup
>> code and jumped into the failure state (which called exit). I was able
>> to restore desired behavior with '#pragma GCC optimize("O0")' around
>> the function (even volatile tricks did not help).
>>
>> The startup code had to do with an integrity check. The expected
>> fingerprint was back-patched after compiling, and then recalculated at
>> runtime. Then, a memcmp was made. It appears the compiler deduced that
>> the allocation was a string of 0's and could never be equal to the
>> runtime fingerprint, so its just omitted the code.
>>
>> Is this expected behavior for functions marked as constructors
>> (compiled with -O0)?
>>
>> Jeff
>>
>
> The usual method is to mark that kind of back-patched memory as "volatile
> const".  And you probably also want to force volatile access of the data you
> are reading through and checking.  Then the code should work as expected
> even for high optimisation levels.
>
> It also seems unlikely that the compiler could deduce that the run-time
> fingerprint was never all zeros.  gcc's optimisers are very impressive, but
> there is a limit to how much the compiler will pre-calculate.  So I suspect
> there is another error of some kind in your code.
Thanks David and Geyslan.

I believe the problem was duplicate symbols - one with global scope
and one with local scope. *The library I'm working with is not well
documented, so its not clear how to work through some steps).

Jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]