7c6e489b23
This patch changes the ENTRY() macro in asm.h to create a new section for every assembler function, thus providing dcache_clean/invalidate_all and friends with the same --gc-sections goodness that our C functions have. This requires a few minor changes of moving around data (to make sure it ends up in the right section) and changing some libgcc functions (which apparently need to have two names?), but nothing serious. (You may note that some of our assembly functions have data, sometimes even writable, within the same .text section. This has been this way before and I'm not looking to change it for now, although it's not totally clean. Since we don't enforce read-only sections through paging, it doesn't really hurt.) BUG=None TEST=Nyan and Snow still boot. Confirm dcache_invalidate_all is not output into any binary anymore since no one actually uses it. Original-Change-Id: I247b29d6173ba516c8dff59126c93b66f7dc4b8d Original-Signed-off-by: Julius Werner <jwerner@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/183891 (cherry picked from commit 4a3f2e45e06cc8592d56c3577f41ff879f10e9cc) Signed-off-by: Marc Jones <marc.jones@se-eng.com> Change-Id: Ieaa4f2ea9d81c5b9e2b36a772ff9610bdf6446f9 Reviewed-on: http://review.coreboot.org/7451 Tested-by: build bot (Jenkins) Reviewed-by: David Hendricks <dhendrix@chromium.org>
54 lines
1.4 KiB
C
54 lines
1.4 KiB
C
/*
|
|
* This file is part of the coreboot project.
|
|
*
|
|
* Copyright 2013 Google Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef __ARM_ASM_H
|
|
#define __ARM_ASM_H
|
|
|
|
/* __arm__ is defined regardless of Thumb mode, so need to order this right */
|
|
#if defined __thumb2__
|
|
# define ARM(x...)
|
|
# define THUMB(x...) x
|
|
# define W(instr) instr.w
|
|
#elif defined __thumb__
|
|
# error You are not compiling Thumb2, this won't work!
|
|
#else
|
|
# define ARM(x...) x
|
|
# define THUMB(x...)
|
|
# define W(instr) instr
|
|
#endif
|
|
|
|
#define ALIGN .align 0
|
|
|
|
#define ENDPROC(name) \
|
|
.type name, %function; \
|
|
END(name)
|
|
|
|
#define ENTRY(name) \
|
|
.section .text.name, "ax", %progbits; \
|
|
.global name; \
|
|
ALIGN; \
|
|
name:
|
|
|
|
#define END(name) \
|
|
.size name, .-name
|
|
|
|
/* Thumb code uses the (new) unified assembly syntax. */
|
|
THUMB( .syntax unified )
|
|
|
|
#endif /* __ARM_ASM_H */
|