mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-25 16:47:20 +08:00
f5c40e04e5
The build system compiles crt0.S many times to produce independent object files by defining different -DLxxx symbols for each. This complicates the build, and has led to some bugs in the source and build (see the previous cleanup commits in here). The crt_bss.S file has also been duplicated with crt0.S leading to confusion as to which one is the "real" one. The only reason to keep them in one file is to make management of the section numbers when calling START_CRT_FUNC a little easier, but that seems trivial to check with a quick grep across all the files. Considering how complicated the build is now, and the bugs we've had as a result, split the crt0.S file up into multiple source files so we don't have to compile it multiple times. This will also simplify merging it into the top-level Makefile.
73 lines
2.2 KiB
C
73 lines
2.2 KiB
C
/* Copyright (c) 2012-2015 Red Hat, Inc. All rights reserved.
|
|
|
|
This copyrighted material is made available to anyone wishing to use, modify,
|
|
copy, or redistribute it subject to the terms and conditions of the BSD
|
|
License. This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties
|
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license
|
|
is available at http://www.opensource.org/licenses. Any Red Hat trademarks that
|
|
are incorporated in the source code or documentation are not subject to the BSD
|
|
License and may only be used or replicated with the express permission of
|
|
Red Hat, Inc.
|
|
*/
|
|
|
|
/* This file provides macros for various MSP430 instructions
|
|
which have similar, but not identical, versions when assembling
|
|
for the LARGE memory model. */
|
|
|
|
#ifdef __MSP430X_LARGE__
|
|
|
|
#define call_ CALLA
|
|
#define ret_ RETA
|
|
#define mov_ MOVA
|
|
#define movx_ MOVX
|
|
#define br_ BRA
|
|
#define cmp_ CMPA
|
|
#define add_ ADDA
|
|
#define PTRsz 4
|
|
|
|
#else
|
|
|
|
#define call_ CALL
|
|
#define ret_ RET
|
|
#define mov_ MOV
|
|
#define movx_ MOV
|
|
#define br_ BR
|
|
#define cmp_ CMP
|
|
#define add_ ADD
|
|
#define PTRsz 2
|
|
|
|
#endif
|
|
|
|
/* Start a function in its own named and numbered section, so that it
|
|
can be subject to linker garbage collection.
|
|
|
|
The linker links all .crt_* sections in asciibetical order at the same place.
|
|
So, the four digits in .crt_NNNN_xxx name are used to enforce link-time
|
|
ordering of the sections. Make sure to keep them in sequential order. The
|
|
first two digits are set in the files, the second two allow users to insert
|
|
code between our standard code fragments.
|
|
|
|
Note - the construction of the symbol names is critical - they need to match
|
|
the unresolved symbol references created by the compiler and assembler. */
|
|
.macro START_CRT_FUNC number name
|
|
.section .crt_\number\name,"ax",@progbits
|
|
.global __crt0_\name
|
|
.type __crt0_\name , @function
|
|
__crt0_\name:
|
|
.endm
|
|
|
|
|
|
/* End a named function. Sets the size so that GDB does not get confused. */
|
|
.macro END_CRT_FUNC name
|
|
.size __crt0_\name, . - __crt0_\name
|
|
.endm
|
|
|
|
|
|
/* Provide a weak definition of NAME, initialized to zero. */
|
|
.macro WEAK_DEF name
|
|
.global \name
|
|
.weak \name
|
|
\name = 0
|
|
.endm
|