# HG changeset patch # User Paul Boddie # Date 1456326703 -3600 # Node ID 24d8d5589ab5f93269f41685e0800b9b844e6c7e # Parent 9e40bad33af1a381161eb18f11586be0d643c7ac Switched to position-independent code to enable user mode execution. diff -r 9e40bad33af1 -r 24d8d5589ab5 stage2/Makefile --- a/stage2/Makefile Tue Feb 23 23:57:53 2016 +0100 +++ b/stage2/Makefile Wed Feb 24 16:11:43 2016 +0100 @@ -1,6 +1,6 @@ # Makefile - Build the NanoNote payload # -# Copyright (C) 2015 Paul Boddie +# Copyright (C) 2015, 2016 Paul Boddie # Copyright (C) Xiangfu Liu # # This program is free software: you can redistribute it and/or modify @@ -30,7 +30,7 @@ CFLAGS = -O2 -Wall \ -fno-unit-at-a-time -fno-zero-initialized-in-bss \ - -ffreestanding -fno-hosted -fno-builtin \ + -ffreestanding -fno-hosted -fno-builtin -fPIC \ -march=mips32 \ -I../include LDFLAGS = -nostdlib -EL diff -r 9e40bad33af1 -r 24d8d5589ab5 stage2/entry.S --- a/stage2/entry.S Tue Feb 23 23:57:53 2016 +0100 +++ b/stage2/entry.S Wed Feb 24 16:11:43 2016 +0100 @@ -26,14 +26,16 @@ .set noreorder _tlb_entry: - lui $k0, %hi(tlb_handler) - ori $k0, $k0, %lo(tlb_handler) + lui $k0, %hi(_GLOBAL_OFFSET_TABLE_) + ori $k0, $k0, %lo(_GLOBAL_OFFSET_TABLE_) + la $k0, tlb_handler jr $k0 nop _irq_entry: - lui $k0, %hi(interrupt_handler) - ori $k0, $k0, %lo(interrupt_handler) + lui $k0, %hi(_GLOBAL_OFFSET_TABLE_) + ori $k0, $k0, %lo(_GLOBAL_OFFSET_TABLE_) + la $k0, interrupt_handler jr $k0 nop diff -r 9e40bad33af1 -r 24d8d5589ab5 stage2/head2.S --- a/stage2/head2.S Tue Feb 23 23:57:53 2016 +0100 +++ b/stage2/head2.S Wed Feb 24 16:11:43 2016 +0100 @@ -82,6 +82,7 @@ /* Start the program. */ + la $t9, c_main /* load the address of the routine */ j c_main nop diff -r 9e40bad33af1 -r 24d8d5589ab5 stage2/stage2.ld --- a/stage2/stage2.ld Tue Feb 23 23:57:53 2016 +0100 +++ b/stage2/stage2.ld Wed Feb 24 16:11:43 2016 +0100 @@ -19,6 +19,7 @@ _gp = ALIGN(16); + _got_start = ABSOLUTE(.); .got : { *(.got*) } _got_end = ABSOLUTE(.);