compiler: emit non-PIE executables

This fixes a problem on baremetal targets, where PIE doesn't make any
sense. Specifically, on ARM, the compiler sometimes inserted GOT
pointers for linker-defined globals.
Этот коммит содержится в:
Ayke van Laethem 2018-09-21 14:01:22 +02:00
родитель 3e6750ae23
коммит 2496ae9967
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED
2 изменённых файлов: 6 добавлений и 5 удалений

Просмотреть файл

@ -93,7 +93,7 @@ func NewCompiler(pkgName, triple string, dumpSSA bool) (*Compiler, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
c.machine = target.CreateTargetMachine(triple, "", "", llvm.CodeGenLevelDefault, llvm.RelocPIC, llvm.CodeModelDefault) c.machine = target.CreateTargetMachine(triple, "", "", llvm.CodeGenLevelDefault, llvm.RelocStatic, llvm.CodeModelDefault)
c.targetData = c.machine.CreateTargetData() c.targetData = c.machine.CreateTargetData()
c.mod = llvm.NewModule(pkgName) c.mod = llvm.NewModule(pkgName)

Просмотреть файл

@ -28,6 +28,7 @@ func LoadTarget(target string) (*TargetSpec, error) {
Triple: target, Triple: target,
BuildTags: []string{runtime.GOOS, runtime.GOARCH}, BuildTags: []string{runtime.GOOS, runtime.GOARCH},
Linker: "cc", Linker: "cc",
PreLinkArgs: []string{"-no-pie"}, // WARNING: clang < 5.0 requires -nopie
Objcopy: "objcopy", Objcopy: "objcopy",
} }