32-bit DMD compiled programs prints "segmentation fault"
Suleyman
sahmi.soulaimane at gmail.com
Sun Nov 3 21:05:50 UTC 2019
On Sunday, 3 November 2019 at 04:36:50 UTC, Walter Bright wrote:
> On 11/2/2019 10:06 AM, Suleyman wrote:
>> On Saturday, 2 November 2019 at 00:04:27 UTC, Walter Bright
>> wrote:
>>> Why does the PIE code gen work fine on Linux but not Debian?
>>>
>>> (It passes all the 32 bit tests on the autotester.)
>>
>> GCC 6 enabled PIE by default, you have to disable it manually
>> with `-no-pie`. The auto-tester uses and ancient GCC version
>> which is not affected.
>
> Yes, but I'd like to know exactly what code sequence generated
> by dmd is not working, vs what ldc is generating that does work.
There is nothing wrong with DMD, the problem is in the
coordination with the linker.
For example:
```
extern(C):
void printf(const char*, ...);
int g = 10;
void main()
{
printf("OK\n");
int i = g; // crash
printf("%d\n", i);
}
```
Note: compile the program with -betterC to avoid linking druntime.
This program crashes, but if you add the -fPIC switch it works.
LDC has -fPIC by default.
More information about the Digitalmars-d
mailing list