summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@c-s.fr>2018-03-16 17:20:53 +0100
committerTom Rini <trini@konsulko.com>2018-04-06 16:30:37 -0400
commit23ac79ff8011c290cc1755b8ab510df80e614db6 (patch)
tree46d1ba2e1ca3f7ed0934a409540ec3e1b2f68bca
parentb3ede3317038abdd75c88f20d9b9685ab062b48a (diff)
downloadu-boot-23ac79ff8011c290cc1755b8ab510df80e614db6.tar.gz
u-boot-23ac79ff8011c290cc1755b8ab510df80e614db6.tar.bz2
u-boot-23ac79ff8011c290cc1755b8ab510df80e614db6.zip
common: env_embedded: allow fine placement of environment object
Commit 7653942b10e9e ("common/env_embedded.c: drop support for CONFIG_SYS_USE_PPCENV") dropped the .ppcenv section which was used in linking scripts to allow fine placement of embedded environment sections. This implies that GCC randomly places objects from env/embedded.o and environment is not guaranteed to be located at the correct address: 04003df8 g F .text 00000038 mii_init 04004000 g O .text 00000004 env_size 04004004 g O .text 00002000 environment 04006004 g F .text 00000040 .hidden __lshrdi3 This patch restores this capability by allocating each object marked with __UBOOT_ENV_SECTION__ into a different section. Hence 'environment' will be alone in .text.environment, allowing a fine placement in u-boot.lds with: . = DEFINED(env_offset) ? env_offset : .; env/embedded.o (.text.environment) Fixes: 7653942b10e9e ("common/env_embedded.c: drop support for CONFIG_SYS_USE_PPCENV") Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
-rw-r--r--env/embedded.c8
-rw-r--r--include/env_default.h2
2 files changed, 5 insertions, 5 deletions
diff --git a/env/embedded.c b/env/embedded.c
index 43694db70f..9b0a6a3c3d 100644
--- a/env/embedded.c
+++ b/env/embedded.c
@@ -35,11 +35,11 @@
* a seperate section.
*/
#if defined(USE_HOSTCC) /* Native for 'tools/envcrc' */
-# define __UBOOT_ENV_SECTION__ /*XXX DO_NOT_DEL_THIS_COMMENT*/
+# define __UBOOT_ENV_SECTION__(name) /*XXX DO_NOT_DEL_THIS_COMMENT*/
#else /* Environment is embedded in U-Boot's .text section */
/* XXX - This only works with GNU C */
-# define __UBOOT_ENV_SECTION__ __attribute__ ((section(".text")))
+# define __UBOOT_ENV_SECTION__(name) __attribute__ ((section(".text."#name)))
#endif
/*
@@ -70,7 +70,7 @@
#include <env_default.h>
#ifdef CONFIG_ENV_ADDR_REDUND
-env_t redundand_environment __UBOOT_ENV_SECTION__ = {
+env_t redundand_environment __UBOOT_ENV_SECTION__(redundand_environment) = {
0, /* CRC Sum: invalid */
0, /* Flags: invalid */
{
@@ -87,7 +87,7 @@ env_t redundand_environment __UBOOT_ENV_SECTION__ = {
* .data/.sdata section.
*
*/
-unsigned long env_size __UBOOT_ENV_SECTION__ = sizeof(env_t);
+unsigned long env_size __UBOOT_ENV_SECTION__(env_size) = sizeof(env_t);
/*
* Add in absolutes.
diff --git a/include/env_default.h b/include/env_default.h
index b574345af2..dd741315ba 100644
--- a/include/env_default.h
+++ b/include/env_default.h
@@ -11,7 +11,7 @@
#include <env_callback.h>
#ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
-env_t environment __UBOOT_ENV_SECTION__ = {
+env_t environment __UBOOT_ENV_SECTION__(environment) = {
ENV_CRC, /* CRC Sum */
#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
1, /* Flags: valid */