This broke the allocator on ARM, and with that the blinky example.
Этот коммит содержится в:
Ayke van Laethem 2018-09-02 18:10:01 +02:00
родитель 88b6b2e7f5
коммит bfff0c33e4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED
3 изменённых файлов: 8 добавлений и 2 удалений

1
arm.ld
Просмотреть файл

@ -80,4 +80,3 @@ __bss_end__ = _ebss;
/* For the memory allocator. */ /* For the memory allocator. */
_heap_start = _ebss; _heap_start = _ebss;
_heap_end = ORIGIN(RAM) + LENGTH(RAM); _heap_end = ORIGIN(RAM) + LENGTH(RAM);
runtime.heapptr = _heap_start; /* necessary? */

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

@ -252,7 +252,7 @@ func (c *Compiler) Parse(mainPath string, buildTags []string) error {
} }
global := llvm.AddGlobal(c.mod, llvmType, g.LinkName()) global := llvm.AddGlobal(c.mod, llvmType, g.LinkName())
g.llvmGlobal = global g.llvmGlobal = global
if !strings.HasPrefix(g.LinkName(), "_extern_") { if !g.IsExtern() {
global.SetLinkage(llvm.InternalLinkage) global.SetLinkage(llvm.InternalLinkage)
initializer, err := getZeroValue(llvmType) initializer, err := getZeroValue(llvmType)
if err != nil { if err != nil {
@ -745,6 +745,9 @@ func (c *Compiler) initMapNewBucket(mapType *types.Map) (llvm.Value, uint64, uin
} }
func (c *Compiler) parseGlobalInitializer(g *Global) error { func (c *Compiler) parseGlobalInitializer(g *Global) error {
if g.IsExtern() {
return nil
}
llvmValue, err := c.getInterpretedValue(g.initializer) llvmValue, err := c.getInterpretedValue(g.initializer)
if err != nil { if err != nil {
return err return err

4
ir.go
Просмотреть файл

@ -220,3 +220,7 @@ func (g *Global) LinkName() string {
return g.g.RelString(nil) return g.g.RelString(nil)
} }
} }
func (g *Global) IsExtern() bool {
return strings.HasPrefix(g.g.Name(), "_extern_")
}