* msp430/Makefile.in (SCRIPTS): Add intr_vectors.ld.
(LIB_CRT): New. (CRT_OBJS): New. (all): Add dependency upon LIB_CRT. (install): Likewise. * msp430/msp430-sim.ld: Include intr_vectors.ld. KEEP crt code, lowtext code and tm_clone_table. Separate the noinit section from the .bss section. Allow for extended .debug_line sections. * msp430/msp430.ld: Likewise. * msp430/msp430F5438A-l.ld: Likewise. * msp430/msp430F5438A-s.ld: Likewise. * msp430/msp430xl-sim.ld: Likewise . * msp430/crt_movedata.S: New. * msp430/crt_bss.S: New. * msp430/intr_vectors.ld: New.
This commit is contained in:
parent
37e1d79259
commit
796a9241b3
|
@ -1,3 +1,22 @@
|
|||
2013-09-18 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* msp430/Makefile.in (SCRIPTS): Add intr_vectors.ld.
|
||||
(LIB_CRT): New.
|
||||
(CRT_OBJS): New.
|
||||
(all): Add dependency upon LIB_CRT.
|
||||
(install): Likewise.
|
||||
* msp430/msp430-sim.ld: Include intr_vectors.ld.
|
||||
KEEP crt code, lowtext code and tm_clone_table.
|
||||
Separate the noinit section from the .bss section.
|
||||
Allow for extended .debug_line sections.
|
||||
* msp430/msp430.ld: Likewise.
|
||||
* msp430/msp430F5438A-l.ld: Likewise.
|
||||
* msp430/msp430F5438A-s.ld: Likewise.
|
||||
* msp430/msp430xl-sim.ld: Likewise
|
||||
. * msp430/crt_movedata.S: New.
|
||||
* msp430/crt_bss.S: New.
|
||||
* msp430/intr_vectors.ld: New.
|
||||
|
||||
2013-09-17 Joey Ye <joey.ye@arm.com>
|
||||
|
||||
* libnosys/Makefile.in: Install nosys.specs.
|
||||
|
|
|
@ -60,6 +60,7 @@ SCRIPTS = $(srcdir)/msp430.ld $(srcdir)/msp430-sim.ld
|
|||
SCRIPTS += $(srcdir)/msp430xl-sim.ld
|
||||
SCRIPTS += $(srcdir)/msp430F5438A-s.ld
|
||||
SCRIPTS += $(srcdir)/msp430F5438A-l.ld
|
||||
|
||||
CRT = gcrt0.o crt0.o crtn.o
|
||||
SIM_BSP = libsim.a
|
||||
LIBNOSYS = libnosys.a
|
||||
|
@ -74,6 +75,12 @@ NOSYS_OBJS = nosyscalls.o \
|
|||
write.o \
|
||||
sbrk.o
|
||||
|
||||
SCRIPTS += $(srcdir)/intr_vectors.ld
|
||||
|
||||
LIB_CRT = libcrt.a
|
||||
|
||||
CRT_OBJS = crt_bss.o crt_movedata.o
|
||||
|
||||
#### Host specific Makefile fragment comes in here.
|
||||
@host_makefile_frag@
|
||||
|
||||
|
@ -82,17 +89,20 @@ NOSYS_OBJS = nosyscalls.o \
|
|||
.S.o:
|
||||
$(CC) -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $<
|
||||
|
||||
all: $(CRT) $(SIM_BSP) $(LIBNOSYS) copy_scripts_to_objdir
|
||||
all: $(CRT) $(SIM_BSP) $(LIBNOSYS) $(LIB_CRT) copy_scripts_to_objdir
|
||||
|
||||
$(SIM_BSP): $(SIM_OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $?
|
||||
$(RANLIB) $@
|
||||
|
||||
|
||||
$(LIBNOSYS): $(NOSYS_OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $?
|
||||
$(RANLIB) $@
|
||||
|
||||
$(LIB_CRT): $(CRT_OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $?
|
||||
$(RANLIB) $@
|
||||
|
||||
copy_scripts_to_objdir: $(SCRIPTS)
|
||||
cp $(SCRIPTS) $(objdir)
|
||||
|
||||
|
@ -126,8 +136,8 @@ unlink.o : $(SDEPS)
|
|||
utime.o : $(SDEPS)
|
||||
write.o : $(SDEPS)
|
||||
|
||||
install: $(CRT) $(SIM_BSP) $(LIBNOSYS) $(SCRIPTS)
|
||||
for c in $(CRT) $(SIM_BSP) $(LIBNOSYS); do \
|
||||
install: $(CRT) $(SIM_BSP) $(LIBNOSYS) $(LIB_CRT) $(SCRIPTS)
|
||||
for c in $(CRT) $(SIM_BSP) $(LIBNOSYS) $(LIB_CRT); do \
|
||||
$(INSTALL_DATA) $$c $(tooldir)/lib${MULTISUBDIR}/$$c ;\
|
||||
done
|
||||
for c in $(SCRIPTS); do \
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
/* Copyright (c) 2012-2013 Red Hat Incorporated.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
The name of Red Hat Incorporated may not be used to endorse
|
||||
or promote products derived from this software without specific
|
||||
prior written permission.
|
||||
|
||||
This software is provided by the copyright holders and contributors
|
||||
"AS IS" and any express or implied warranties, including, but not
|
||||
limited to, the implied warranties of merchantability and fitness for
|
||||
a particular purpose are disclaimed. In no event shall Red Hat
|
||||
incorporated be liable for any direct, indirect, incidental, special,
|
||||
exemplary, or consequential damages (including, but not limited to,
|
||||
procurement of substitute goods or services; loss of use, data, or
|
||||
profits; or business interruption) however caused and on any theory of
|
||||
liability, whether in contract, strict liability, or tort (including
|
||||
negligence or otherwise) arising in any way out of the use of this
|
||||
software, even if advised of the possibility of such damage. */
|
||||
|
||||
#include "memmodel.h"
|
||||
|
||||
.section ".crt_bss", "ax", @progbits
|
||||
|
||||
.global __crt0_init_bss
|
||||
__crt0_init_bss:
|
||||
|
||||
mov_ #__bssstart, R12
|
||||
clr.w R13
|
||||
mov.w #__bsssize, R14
|
||||
#ifdef __MSP430X_LARGE__
|
||||
clr.w R15 ; We assume that __bsssize is never > 64M
|
||||
#endif
|
||||
call_ #memset
|
|
@ -0,0 +1,50 @@
|
|||
/* Copyright (c) 2012-2013 Red Hat Incorporated.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
The name of Red Hat Incorporated may not be used to endorse
|
||||
or promote products derived from this software without specific
|
||||
prior written permission.
|
||||
|
||||
This software is provided by the copyright holders and contributors
|
||||
"AS IS" and any express or implied warranties, including, but not
|
||||
limited to, the implied warranties of merchantability and fitness for
|
||||
a particular purpose are disclaimed. In no event shall Red Hat
|
||||
incorporated be liable for any direct, indirect, incidental, special,
|
||||
exemplary, or consequential damages (including, but not limited to,
|
||||
procurement of substitute goods or services; loss of use, data, or
|
||||
profits; or business interruption) however caused and on any theory of
|
||||
liability, whether in contract, strict liability, or tort (including
|
||||
negligence or otherwise) arising in any way out of the use of this
|
||||
software, even if advised of the possibility of such damage. */
|
||||
|
||||
#include "memmodel.h"
|
||||
|
||||
.section ".crt_movedata", "ax", @progbits
|
||||
|
||||
.global __crt0_movedata
|
||||
__crt0_movedata:
|
||||
|
||||
mov_ #__datastart, R12
|
||||
mov_ #__romdatastart, R13
|
||||
|
||||
;; memmove and memcpy do not currently work when src == dst
|
||||
cmp_ R12, R13
|
||||
jeq 1f
|
||||
|
||||
mov.w #__romdatacopysize, R14
|
||||
#ifdef __MSP430X_LARGE__
|
||||
clr.w R15 ; We assume that __romdatacopysize is never > 64M
|
||||
#endif
|
||||
call_ #memmove
|
||||
1:
|
|
@ -0,0 +1,71 @@
|
|||
MEMORY
|
||||
{
|
||||
VECT0 (w) : ORIGIN = 0x0FFC0, LENGTH = 2
|
||||
VECT1 (w) : ORIGIN = 0x0FFC2, LENGTH = 2
|
||||
VECT2 (w) : ORIGIN = 0x0FFC4, LENGTH = 2
|
||||
VECT3 (w) : ORIGIN = 0x0FFC6, LENGTH = 2
|
||||
VECT4 (w) : ORIGIN = 0x0FFC8, LENGTH = 2
|
||||
VECT5 (w) : ORIGIN = 0x0FFCA, LENGTH = 2
|
||||
VECT6 (w) : ORIGIN = 0x0FFCC, LENGTH = 2
|
||||
VECT7 (w) : ORIGIN = 0x0FFCE, LENGTH = 2
|
||||
VECT8 (w) : ORIGIN = 0x0FFD0, LENGTH = 2
|
||||
VECT9 (w) : ORIGIN = 0x0FFD2, LENGTH = 2
|
||||
VECT10 (w) : ORIGIN = 0x0FFD4, LENGTH = 2
|
||||
VECT11 (w) : ORIGIN = 0x0FFD6, LENGTH = 2
|
||||
VECT12 (w) : ORIGIN = 0x0FFD8, LENGTH = 2
|
||||
VECT13 (w) : ORIGIN = 0x0FFDA, LENGTH = 2
|
||||
VECT14 (w) : ORIGIN = 0x0FFDC, LENGTH = 2
|
||||
VECT15 (w) : ORIGIN = 0x0FFDE, LENGTH = 2
|
||||
VECT16 (w) : ORIGIN = 0x0FFE0, LENGTH = 2
|
||||
VECT17 (w) : ORIGIN = 0x0FFE2, LENGTH = 2
|
||||
VECT18 (w) : ORIGIN = 0x0FFE4, LENGTH = 2
|
||||
VECT19 (w) : ORIGIN = 0x0FFE6, LENGTH = 2
|
||||
VECT20 (w) : ORIGIN = 0x0FFE8, LENGTH = 2
|
||||
VECT21 (w) : ORIGIN = 0x0FFEA, LENGTH = 2
|
||||
VECT22 (w) : ORIGIN = 0x0FFEC, LENGTH = 2
|
||||
VECT23 (w) : ORIGIN = 0x0FFEE, LENGTH = 2
|
||||
VECT24 (w) : ORIGIN = 0x0FFF0, LENGTH = 2
|
||||
VECT25 (w) : ORIGIN = 0x0FFF2, LENGTH = 2
|
||||
VECT26 (w) : ORIGIN = 0x0FFF4, LENGTH = 2
|
||||
VECT27 (w) : ORIGIN = 0x0FFF6, LENGTH = 2
|
||||
VECT28 (w) : ORIGIN = 0x0FFF8, LENGTH = 2
|
||||
VECT29 (w) : ORIGIN = 0x0FFFA, LENGTH = 2
|
||||
VECT30 (w) : ORIGIN = 0x0FFFC, LENGTH = 2
|
||||
VECT31 (w) : ORIGIN = 0x0FFFE, LENGTH = 2
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
__interrupt_vector_0 : { KEEP (*(__interrupt_vector_0)) } > VECT0
|
||||
__interrupt_vector_1 : { KEEP (*(__interrupt_vector_1)) } > VECT1
|
||||
__interrupt_vector_2 : { KEEP (*(__interrupt_vector_2)) } > VECT2
|
||||
__interrupt_vector_3 : { KEEP (*(__interrupt_vector_3)) } > VECT3
|
||||
__interrupt_vector_4 : { KEEP (*(__interrupt_vector_4)) } > VECT4
|
||||
__interrupt_vector_5 : { KEEP (*(__interrupt_vector_5)) } > VECT5
|
||||
__interrupt_vector_6 : { KEEP (*(__interrupt_vector_6)) } > VECT6
|
||||
__interrupt_vector_7 : { KEEP (*(__interrupt_vector_7)) } > VECT7
|
||||
__interrupt_vector_8 : { KEEP (*(__interrupt_vector_8)) } > VECT8
|
||||
__interrupt_vector_9 : { KEEP (*(__interrupt_vector_9)) } > VECT9
|
||||
__interrupt_vector_10 : { KEEP (*(__interrupt_vector_10)) } > VECT10
|
||||
__interrupt_vector_11 : { KEEP (*(__interrupt_vector_11)) } > VECT11
|
||||
__interrupt_vector_12 : { KEEP (*(__interrupt_vector_12)) } > VECT12
|
||||
__interrupt_vector_13 : { KEEP (*(__interrupt_vector_13)) } > VECT13
|
||||
__interrupt_vector_14 : { KEEP (*(__interrupt_vector_14)) } > VECT14
|
||||
__interrupt_vector_15 : { KEEP (*(__interrupt_vector_15)) } > VECT15
|
||||
__interrupt_vector_16 : { KEEP (*(__interrupt_vector_16)) } > VECT16
|
||||
__interrupt_vector_17 : { KEEP (*(__interrupt_vector_17)) } > VECT17
|
||||
__interrupt_vector_18 : { KEEP (*(__interrupt_vector_18)) } > VECT18
|
||||
__interrupt_vector_19 : { KEEP (*(__interrupt_vector_19)) } > VECT19
|
||||
__interrupt_vector_20 : { KEEP (*(__interrupt_vector_20)) } > VECT20
|
||||
__interrupt_vector_21 : { KEEP (*(__interrupt_vector_21)) } > VECT21
|
||||
__interrupt_vector_22 : { KEEP (*(__interrupt_vector_22)) } > VECT22
|
||||
__interrupt_vector_23 : { KEEP (*(__interrupt_vector_23)) } > VECT23
|
||||
__interrupt_vector_24 : { KEEP (*(__interrupt_vector_24)) } > VECT24
|
||||
__interrupt_vector_25 : { KEEP (*(__interrupt_vector_25)) } > VECT25
|
||||
__interrupt_vector_26 : { KEEP (*(__interrupt_vector_26)) KEEP (*(__interrupt_vector_watchdog)) } > VECT26
|
||||
__interrupt_vector_27 : { KEEP (*(__interrupt_vector_27)) } > VECT27
|
||||
__interrupt_vector_28 : { KEEP (*(__interrupt_vector_28)) } > VECT28
|
||||
__interrupt_vector_29 : { KEEP (*(__interrupt_vector_29)) } > VECT29
|
||||
__interrupt_vector_30 : { KEEP (*(__interrupt_vector_30)) KEEP (*(__interrupt_vector_nmi)) } > VECT30
|
||||
__interrupt_vector_31 : { KEEP (*(__interrupt_vector_31)) KEEP (*(__interrupt_vector_reset)) KEEP (*(.resetvec)) } > VECT31
|
||||
}
|
|
@ -18,7 +18,10 @@ ENTRY(_start)
|
|||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
|
||||
MEMORY {
|
||||
INCLUDE intr_vectors.ld
|
||||
|
||||
MEMORY
|
||||
{
|
||||
RAM (w) : ORIGIN = 0x00200, LENGTH = 0x0ee00
|
||||
RESETVEC (w) : ORIGIN = 0x0fffe, LENGTH = 0x00002
|
||||
}
|
||||
|
@ -77,7 +80,12 @@ SECTIONS
|
|||
{
|
||||
. = ALIGN(2);
|
||||
PROVIDE (_start = .);
|
||||
*(.lowtext .text .stub .text.* .gnu.linkonce.t.* .text:*)
|
||||
KEEP (*(.crt_init))
|
||||
KEEP (*(.crt_bss))
|
||||
KEEP (*(.crt_movedata))
|
||||
KEEP (*(.crt_main))
|
||||
KEEP (*(.lowtext))
|
||||
*(.text .stub .text.* .gnu.linkonce.t.* .text:*)
|
||||
KEEP (*(.text.*personality*))
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -88,6 +96,7 @@ SECTIONS
|
|||
. = ALIGN(2);
|
||||
KEEP (*(.init))
|
||||
KEEP (*(.fini))
|
||||
KEEP (*(.tm_clone_table))
|
||||
} > RAM
|
||||
|
||||
.data : {
|
||||
|
@ -127,15 +136,23 @@ SECTIONS
|
|||
*(.dynbss)
|
||||
*(.sbss .sbss.*)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__bssend = .);
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
} > RAM
|
||||
PROVIDE (__bsssize = SIZEOF(.bss));
|
||||
|
||||
/* This section contains data that is not initialised at startup. */
|
||||
.noinit : {
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__noinit_start = .);
|
||||
*(.noinit)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
PROVIDE (__noinit_end = .);
|
||||
} > RAM
|
||||
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
|
||||
.stack (ORIGIN (RAM) + LENGTH(RAM)) :
|
||||
{
|
||||
PROVIDE (__stack = .);
|
||||
|
@ -174,7 +191,7 @@ SECTIONS
|
|||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
|
|
|
@ -18,6 +18,8 @@ ENTRY(_start)
|
|||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
|
||||
INCLUDE intr_vectors.ld
|
||||
|
||||
MEMORY {
|
||||
RAM (w) : ORIGIN = 0x00200, LENGTH = 0x0ee00
|
||||
RESETVEC (w) : ORIGIN = 0x0fffe, LENGTH = 0x00002
|
||||
|
@ -77,7 +79,12 @@ SECTIONS
|
|||
{
|
||||
. = ALIGN(2);
|
||||
PROVIDE (_start = .);
|
||||
*(.lowtext .text .stub .text.* .gnu.linkonce.t.* .text:*)
|
||||
KEEP (*(.crt_init))
|
||||
KEEP (*(.crt_bss))
|
||||
KEEP (*(.crt_movedata))
|
||||
KEEP (*(.crt_main))
|
||||
KEEP (*(.lowtext))
|
||||
*(.text .stub .text.* .gnu.linkonce.t.* .text:*)
|
||||
KEEP (*(.text.*personality*))
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -88,6 +95,7 @@ SECTIONS
|
|||
. = ALIGN(2);
|
||||
KEEP (*(.init))
|
||||
KEEP (*(.fini))
|
||||
KEEP (*(.tm_clone_table))
|
||||
} > RAM
|
||||
|
||||
.data : {
|
||||
|
@ -127,15 +135,23 @@ SECTIONS
|
|||
*(.dynbss)
|
||||
*(.sbss .sbss.*)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__bssend = .);
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
} > RAM
|
||||
PROVIDE (__bsssize = SIZEOF(.bss));
|
||||
|
||||
/* This section contains data that is not initialised at startup. */
|
||||
.noinit : {
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__noinit_start = .);
|
||||
*(.noinit)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
PROVIDE (__noinit_end = .);
|
||||
} > RAM
|
||||
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
|
||||
.stack (ORIGIN (RAM) + LENGTH(RAM)) :
|
||||
{
|
||||
PROVIDE (__stack = .);
|
||||
|
@ -174,7 +190,7 @@ SECTIONS
|
|||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
|
|
|
@ -15,10 +15,13 @@
|
|||
OUTPUT_ARCH(msp430)
|
||||
ENTRY(_start)
|
||||
|
||||
INCLUDE intr_vectors.ld
|
||||
|
||||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
|
||||
MEMORY {
|
||||
MEMORY
|
||||
{
|
||||
RAM (w) : ORIGIN = 0x01c00, LENGTH = 0x04000
|
||||
LOWROM (w) : ORIGIN = 0x05c00, LENGTH = 0x0a3fe
|
||||
RESETVEC (w) : ORIGIN = 0x0fffe, LENGTH = 0x00002
|
||||
|
@ -113,14 +116,23 @@ SECTIONS
|
|||
*(.sbss .sbss.*)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__bssend = .);
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
} > RAM
|
||||
PROVIDE (__bsssize = SIZEOF(.bss));
|
||||
|
||||
/* This section contains data that is not initialised at startup. */
|
||||
.noinit : {
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__noinit_start = .);
|
||||
*(.noinit)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
PROVIDE (__noinit_end = .);
|
||||
} > RAM
|
||||
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
|
||||
.stack (ORIGIN (RAM) + LENGTH(RAM)) :
|
||||
{
|
||||
PROVIDE (__stack = .);
|
||||
|
@ -132,7 +144,11 @@ SECTIONS
|
|||
{
|
||||
PROVIDE (_start = .);
|
||||
. = ALIGN(2);
|
||||
*(.lowtext)
|
||||
KEEP (*(.crt_init))
|
||||
KEEP (*(.crt_bss))
|
||||
KEEP (*(.crt_movedata))
|
||||
KEEP (*(.crt_main))
|
||||
KEEP (*(.lowtext))
|
||||
} > LOWROM
|
||||
|
||||
.text :
|
||||
|
@ -149,6 +165,7 @@ SECTIONS
|
|||
. = ALIGN(2);
|
||||
KEEP (*(.init))
|
||||
KEEP (*(.fini))
|
||||
KEEP (*(.tm_clone_table))
|
||||
} > ROM
|
||||
|
||||
/* The rest are all not normally part of the runtime image. */
|
||||
|
@ -183,7 +200,7 @@ SECTIONS
|
|||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
|
|
|
@ -15,10 +15,13 @@
|
|||
OUTPUT_ARCH(msp430)
|
||||
ENTRY(_start)
|
||||
|
||||
INCLUDE intr_vectors.ld
|
||||
|
||||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
|
||||
MEMORY {
|
||||
MEMORY
|
||||
{
|
||||
RAM (w) : ORIGIN = 0x01c00, LENGTH = 0x04000
|
||||
ROM (w) : ORIGIN = 0x05c00, LENGTH = 0x0a3fe
|
||||
RESETVEC (w) : ORIGIN = 0x0fffe, LENGTH = 0x00002
|
||||
|
@ -78,7 +81,12 @@ SECTIONS
|
|||
{
|
||||
. = ALIGN(2);
|
||||
PROVIDE (_start = .);
|
||||
*(.lowtext .text .stub .text.* .gnu.linkonce.t.* .text:*)
|
||||
KEEP (*(.crt_init))
|
||||
KEEP (*(.crt_bss))
|
||||
KEEP (*(.crt_movedata))
|
||||
KEEP (*(.crt_main))
|
||||
KEEP (*(.lowtext))
|
||||
*(.text .stub .text.* .gnu.linkonce.t.* .text:*)
|
||||
KEEP (*(.text.*personality*))
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
|
@ -89,6 +97,7 @@ SECTIONS
|
|||
. = ALIGN(2);
|
||||
KEEP (*(.init))
|
||||
KEEP (*(.fini))
|
||||
KEEP (*(.tm_clone_table))
|
||||
} > ROM
|
||||
|
||||
.data : {
|
||||
|
@ -128,15 +137,23 @@ SECTIONS
|
|||
*(.dynbss)
|
||||
*(.sbss .sbss.*)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__bssend = .);
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
} > RAM
|
||||
PROVIDE (__bsssize = SIZEOF(.bss));
|
||||
|
||||
/* This section contains data that is not initialised at startup. */
|
||||
.noinit : {
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__noinit_start = .);
|
||||
*(.noinit)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
PROVIDE (__noinit_end = .);
|
||||
} > RAM
|
||||
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
|
||||
.stack (ORIGIN (RAM) + LENGTH(RAM)) :
|
||||
{
|
||||
PROVIDE (__stack = .);
|
||||
|
@ -175,7 +192,7 @@ SECTIONS
|
|||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
|
|
|
@ -19,6 +19,8 @@ ENTRY(_start)
|
|||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
|
||||
INCLUDE intr_vectors.ld
|
||||
|
||||
MEMORY {
|
||||
RAM (rx) : ORIGIN = 0x00200, LENGTH = 0x0ee00
|
||||
LOWROM (w) : ORIGIN = 0x0f000, LENGTH = 0x00800
|
||||
|
@ -114,14 +116,23 @@ SECTIONS
|
|||
*(.sbss .sbss.*)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__bssend = .);
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
} > RAM
|
||||
PROVIDE (__bsssize = SIZEOF(.bss));
|
||||
|
||||
/* This section contains data that is not initialised at startup. */
|
||||
.noinit : {
|
||||
. = ALIGN(2);
|
||||
PROVIDE (__noinit_start = .);
|
||||
*(.noinit)
|
||||
. = ALIGN(2);
|
||||
*(COMMON)
|
||||
PROVIDE (__noinit_end = .);
|
||||
} > RAM
|
||||
|
||||
_end = .;
|
||||
PROVIDE (end = .);
|
||||
|
||||
.stack (ORIGIN (RAM) + LENGTH(RAM)) :
|
||||
{
|
||||
PROVIDE (__stack = .);
|
||||
|
@ -133,8 +144,13 @@ SECTIONS
|
|||
{
|
||||
PROVIDE (_start = .);
|
||||
. = ALIGN(2);
|
||||
*(.lowtext)
|
||||
KEEP (*(.crt_init))
|
||||
KEEP (*(.crt_bss))
|
||||
KEEP (*(.crt_movedata))
|
||||
KEEP (*(.crt_main))
|
||||
KEEP (*(.lowtext))
|
||||
} > LOWROM
|
||||
|
||||
.text :
|
||||
{
|
||||
. = ALIGN(2);
|
||||
|
@ -149,6 +165,7 @@ SECTIONS
|
|||
. = ALIGN(2);
|
||||
KEEP (*(.init))
|
||||
KEEP (*(.fini))
|
||||
KEEP (*(.tm_clone_table))
|
||||
} > ROM
|
||||
|
||||
/* The rest are all not normally part of the runtime image. */
|
||||
|
@ -183,7 +200,7 @@ SECTIONS
|
|||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
|
|
Loading…
Reference in New Issue