| ... |
... |
@@ -345,30 +345,30 @@ addPlatformDepLinkFlags archOs cc ccLink0 = do |
|
345
|
345
|
--
|
|
346
|
346
|
-- On OpenSolaris uses gnu ld whereas SmartOS appears to use the Solaris
|
|
347
|
347
|
-- implementation, which rather uses the -64 flag.
|
|
348
|
|
- return $ ccLink2 & _prgFlags %++ "-m64"
|
|
|
348
|
+ return $ addFlagIfNew "-m64" ccLink2
|
|
349
|
349
|
ArchOS ArchAlpha _ ->
|
|
350
|
350
|
-- For now, to suppress the gcc warning "call-clobbered
|
|
351
|
351
|
-- register used for global register variable", we simply
|
|
352
|
352
|
-- disable all warnings altogether using the -w flag. Oh well.
|
|
353
|
|
- return $ ccLink2 & over _prgFlags (++["-w","-mieee","-D_REENTRANT"])
|
|
|
353
|
+ return $ foldr addFlagIfNew ccLink2 (reverse ["-w","-mieee","-D_REENTRANT"])
|
|
354
|
354
|
-- ArchOS ArchHPPA? _ ->
|
|
355
|
355
|
ArchOS ArchARM{} OSFreeBSD ->
|
|
356
|
356
|
-- On arm/freebsd, tell gcc to generate Arm
|
|
357
|
357
|
-- instructions (ie not Thumb).
|
|
358
|
|
- return $ ccLink2 & _prgFlags %++ "-Wl,-z,noexecstack"
|
|
|
358
|
+ return $ addFlagIfNew "-Wl,-z,noexecstack" ccLink2
|
|
359
|
359
|
ArchOS ArchARM{} OSLinux ->
|
|
360
|
360
|
-- On arm/linux and arm/android, tell gcc to generate Arm
|
|
361
|
361
|
-- instructions (ie not Thumb).
|
|
362
|
|
- return $ ccLink2 & _prgFlags %++ "-Wl,-z,noexecstack"
|
|
|
362
|
+ return $ addFlagIfNew "-Wl,-z,noexecstack" ccLink2
|
|
363
|
363
|
ArchOS ArchAArch64 OSFreeBSD ->
|
|
364
|
|
- return $ ccLink2 & _prgFlags %++ "-Wl,-z,noexecstack"
|
|
|
364
|
+ return $ addFlagIfNew "-Wl,-z,noexecstack" ccLink2
|
|
365
|
365
|
ArchOS ArchAArch64 OSLinux ->
|
|
366
|
|
- return $ ccLink2 & _prgFlags %++ "-Wl,-z,noexecstack"
|
|
|
366
|
+ return $ addFlagIfNew "-Wl,-z,noexecstack" ccLink2
|
|
367
|
367
|
ArchOS ArchAArch64 OSNetBSD ->
|
|
368
|
|
- return $ ccLink2 & _prgFlags %++ "-Wl,-z,noexecstack"
|
|
|
368
|
+ return $ addFlagIfNew "-Wl,-z,noexecstack" ccLink2
|
|
369
|
369
|
ArchOS ArchPPC OSAIX ->
|
|
370
|
370
|
-- We need `-D_THREAD_SAFE` to unlock the thread-local `errno`.
|
|
371
|
|
- return $ ccLink2 & over _prgFlags (++["-D_THREAD_SAFE","-Wl,-bnotextro"])
|
|
|
371
|
+ return $ foldr addFlagIfNew ccLink2 (reverse ["-D_THREAD_SAFE","-Wl,-bnotextro"])
|
|
372
|
372
|
_ ->
|
|
373
|
373
|
return ccLink2
|
|
374
|
374
|
|
| ... |
... |
@@ -383,7 +383,7 @@ addOSMinGW32CcFlags archOs cc link |
|
383
|
383
|
-- See Note [Windows stack allocations].
|
|
384
|
384
|
checkFStackCheck :: Cc -> Program -> M Program
|
|
385
|
385
|
checkFStackCheck cc link = checking "that -fstack-check works" $ do
|
|
386
|
|
- let link' = link & _prgFlags %++ "-fstack-check"
|
|
|
386
|
+ let link' = addFlagIfNew "-fstack-check" link
|
|
387
|
387
|
checkLinkWorks cc link'
|
|
388
|
388
|
return link'
|
|
389
|
389
|
|
| ... |
... |
@@ -393,7 +393,7 @@ addNoAsNeeded archOs cc ccLink |
|
393
|
393
|
| os <- archOS_OS archOs
|
|
394
|
394
|
, osElfTarget os
|
|
395
|
395
|
= checking "that --no-as-needed works" $ do
|
|
396
|
|
- let ccLink' = over _prgFlags (++["-Wl,--no-as-needed"]) ccLink
|
|
|
396
|
+ let ccLink' = addFlagIfNew "-Wl,--no-as-needed" ccLink
|
|
397
|
397
|
checkLinkWorks cc ccLink'
|
|
398
|
398
|
return ccLink'
|
|
399
|
399
|
| otherwise = return ccLink
|