NanoPayload

Changeset

122:24d8d5589ab5
2016-02-24 Paul Boddie raw files shortlog changelog graph Switched to position-independent code to enable user mode execution. stage2-non-pic
stage2/Makefile (file) stage2/entry.S (file) stage2/head2.S (file) stage2/stage2.ld (file)
     1.1 --- a/stage2/Makefile	Tue Feb 23 23:57:53 2016 +0100
     1.2 +++ b/stage2/Makefile	Wed Feb 24 16:11:43 2016 +0100
     1.3 @@ -1,6 +1,6 @@
     1.4  # Makefile - Build the NanoNote payload
     1.5  #
     1.6 -# Copyright (C) 2015 Paul Boddie <paul@boddie.org.uk>
     1.7 +# Copyright (C) 2015, 2016 Paul Boddie <paul@boddie.org.uk>
     1.8  # Copyright (C) Xiangfu Liu <xiangfu@sharism.cc>
     1.9  #
    1.10  # This program is free software: you can redistribute it and/or modify
    1.11 @@ -30,7 +30,7 @@
    1.12  
    1.13  CFLAGS = -O2 -Wall \
    1.14  	-fno-unit-at-a-time -fno-zero-initialized-in-bss \
    1.15 -	-ffreestanding -fno-hosted -fno-builtin \
    1.16 +	-ffreestanding -fno-hosted -fno-builtin -fPIC \
    1.17  	-march=mips32 \
    1.18  	-I../include
    1.19  LDFLAGS = -nostdlib -EL
     2.1 --- a/stage2/entry.S	Tue Feb 23 23:57:53 2016 +0100
     2.2 +++ b/stage2/entry.S	Wed Feb 24 16:11:43 2016 +0100
     2.3 @@ -26,14 +26,16 @@
     2.4  .set noreorder
     2.5  
     2.6  _tlb_entry:
     2.7 -	lui $k0, %hi(tlb_handler)
     2.8 -	ori $k0, $k0, %lo(tlb_handler)
     2.9 +	lui $k0, %hi(_GLOBAL_OFFSET_TABLE_)
    2.10 +	ori $k0, $k0, %lo(_GLOBAL_OFFSET_TABLE_)
    2.11 +	la $k0, tlb_handler
    2.12  	jr $k0
    2.13  	nop
    2.14  
    2.15  _irq_entry:
    2.16 -	lui $k0, %hi(interrupt_handler)
    2.17 -	ori $k0, $k0, %lo(interrupt_handler)
    2.18 +	lui $k0, %hi(_GLOBAL_OFFSET_TABLE_)
    2.19 +	ori $k0, $k0, %lo(_GLOBAL_OFFSET_TABLE_)
    2.20 +	la $k0, interrupt_handler
    2.21  	jr $k0
    2.22  	nop
    2.23  
     3.1 --- a/stage2/head2.S	Tue Feb 23 23:57:53 2016 +0100
     3.2 +++ b/stage2/head2.S	Wed Feb 24 16:11:43 2016 +0100
     3.3 @@ -82,6 +82,7 @@
     3.4  
     3.5  	/* Start the program. */
     3.6  
     3.7 +	la $t9, c_main			/* load the address of the routine */
     3.8  	j c_main
     3.9  	nop
    3.10  
     4.1 --- a/stage2/stage2.ld	Tue Feb 23 23:57:53 2016 +0100
     4.2 +++ b/stage2/stage2.ld	Wed Feb 24 16:11:43 2016 +0100
     4.3 @@ -19,6 +19,7 @@
     4.4  
     4.5  	_gp = ALIGN(16);
     4.6  
     4.7 +	_got_start = ABSOLUTE(.);	
     4.8  	.got : { *(.got*) }
     4.9  	_got_end = ABSOLUTE(.);	
    4.10