When debugging u-boot, after relocation its tedious to calculate positions
of the various sections (.data, .rodata, .bss).  To make it easier, add
the structure "sections" to gd_t that contains the relocated start of
those sections.  Then the gdb command "add-symbol-file" can by used with
"-s <section> <address>" that corresponds to the values in gd_t->sections.

Signed-off-by: Peter Barada <peter.bar...@logicpd.com>
---
 README                                         |    6 ++++++
 arch/arm/cpu/arm1136/start.S                   |   10 ++++++++++
 arch/arm/cpu/arm1136/u-boot.lds                |    6 +++++-
 arch/arm/cpu/arm1176/start.S                   |   10 ++++++++++
 arch/arm/cpu/arm1176/u-boot.lds                |    6 +++++-
 arch/arm/cpu/arm720t/start.S                   |   10 ++++++++++
 arch/arm/cpu/arm720t/u-boot.lds                |    6 +++++-
 arch/arm/cpu/arm920t/ep93xx/u-boot.lds         |   10 ++++++++--
 arch/arm/cpu/arm920t/start.S                   |   10 ++++++++++
 arch/arm/cpu/arm920t/u-boot.lds                |    6 +++++-
 arch/arm/cpu/arm925t/start.S                   |   10 ++++++++++
 arch/arm/cpu/arm925t/u-boot.lds                |    6 +++++-
 arch/arm/cpu/arm926ejs/mx28/start.S            |   10 ++++++++++
 arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds     |    6 +++++-
 arch/arm/cpu/arm926ejs/start.S                 |   10 ++++++++++
 arch/arm/cpu/arm926ejs/u-boot.lds              |    6 +++++-
 arch/arm/cpu/arm946es/start.S                  |   10 ++++++++++
 arch/arm/cpu/arm946es/u-boot.lds               |    6 +++++-
 arch/arm/cpu/arm_intcm/start.S                 |   10 ++++++++++
 arch/arm/cpu/arm_intcm/u-boot.lds              |    6 +++++-
 arch/arm/cpu/armv7/omap-common/u-boot-spl.lds  |   11 +++++++++--
 arch/arm/cpu/armv7/start.S                     |   10 ++++++++++
 arch/arm/cpu/armv7/u-boot.lds                  |    6 +++++-
 arch/arm/cpu/ixp/start.S                       |   10 ++++++++++
 arch/arm/cpu/ixp/u-boot.lds                    |    6 +++++-
 arch/arm/cpu/lh7a40x/start.S                   |   10 ++++++++++
 arch/arm/cpu/lh7a40x/u-boot.lds                |    6 +++++-
 arch/arm/cpu/pxa/start.S                       |   10 ++++++++++
 arch/arm/cpu/pxa/u-boot.lds                    |    6 +++++-
 arch/arm/cpu/s3c44b0/start.S                   |   10 ++++++++++
 arch/arm/cpu/s3c44b0/u-boot.lds                |    6 +++++-
 arch/arm/cpu/sa1100/start.S                    |   10 ++++++++++
 arch/arm/cpu/sa1100/u-boot.lds                 |    6 +++++-
 arch/arm/include/asm/config.h                  |    3 +++
 arch/arm/include/asm/global_data.h             |   13 +++++++++++++
 arch/arm/include/asm/u-boot-arm.h              |    4 ++++
 arch/arm/lib/board.c                           |    7 +++++++
 board/ait/cam_enc_4xx/u-boot-spl.lds           |   11 +++++++++--
 board/davinci/da8xxevm/u-boot-spl-da850evm.lds |   10 ++++++++--
 board/davinci/da8xxevm/u-boot-spl-hawk.lds     |    6 +++++-
 board/vpac270/u-boot-spl.lds                   |    6 +++++-
 common/cmd_bdinfo.c                            |    5 +++++
 nand_spl/board/freescale/mx31pdk/u-boot.lds    |    6 +++++-
 nand_spl/board/karo/tx25/u-boot.lds            |    6 +++++-
 44 files changed, 317 insertions(+), 27 deletions(-)

diff --git a/README b/README
index eba6378..0d7a7a0 100644
--- a/README
+++ b/README
@@ -426,6 +426,12 @@ The following options need to be configured:
                Select high exception vectors of the ARM core, e.g., do not
                clear the V bit of the c1 register of CP15.
 
+               CONFIG_GDB_SECTIONS_START
+
+               Add to gd_t "sections" structure containing starting addresses
+               of .bss, .data, and .rodata sections to allow
+               "gdb add-symbol-file" to work once u-boot is relocated.
+
 - Linux Kernel Interface:
                CONFIG_CLOCKS_IN_MHZ
 
diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S
index c0db96c..9ab4351 100644
--- a/arch/arm/cpu/arm1136/start.S
+++ b/arch/arm/cpu/arm1136/start.S
@@ -108,6 +108,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/arm1136/u-boot.lds b/arch/arm/cpu/arm1136/u-boot.lds
index d1e2851..751fa21 100644
--- a/arch/arm/cpu/arm1136/u-boot.lds
+++ b/arch/arm/cpu/arm1136/u-boot.lds
@@ -45,10 +45,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/arm1176/start.S b/arch/arm/cpu/arm1176/start.S
index 848144a..0f8f368 100644
--- a/arch/arm/cpu/arm1176/start.S
+++ b/arch/arm/cpu/arm1176/start.S
@@ -127,6 +127,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 /* IRQ stack memory (calculated at run-time) + 8 bytes */
 .globl IRQ_STACK_START_IN
 IRQ_STACK_START_IN:
diff --git a/arch/arm/cpu/arm1176/u-boot.lds b/arch/arm/cpu/arm1176/u-boot.lds
index 27d6638..91bea89 100644
--- a/arch/arm/cpu/arm1176/u-boot.lds
+++ b/arch/arm/cpu/arm1176/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/arm720t/start.S b/arch/arm/cpu/arm720t/start.S
index 540e3c2..947deb8 100644
--- a/arch/arm/cpu/arm720t/start.S
+++ b/arch/arm/cpu/arm720t/start.S
@@ -97,6 +97,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/arm720t/u-boot.lds b/arch/arm/cpu/arm720t/u-boot.lds
index 9370fad..308862b 100644
--- a/arch/arm/cpu/arm720t/u-boot.lds
+++ b/arch/arm/cpu/arm720t/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
        }
 
        . = ALIGN(4);
diff --git a/arch/arm/cpu/arm920t/ep93xx/u-boot.lds 
b/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
index dc6ba34..29a8c9e 100644
--- a/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
+++ b/arch/arm/cpu/arm920t/ep93xx/u-boot.lds
@@ -39,10 +39,16 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(.rodata) }
+       .rodata : { 
+               __rodata_start = .;
+               *(.rodata)
+       }
 
        . = ALIGN(4);
-       .data : { *(.data) }
+       .data : {
+               __data_start = .;
+               *(.data)
+       }
 
        . = ALIGN(4);
        .got : { *(.got) }
diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S
index 8c5612c..be364f1 100644
--- a/arch/arm/cpu/arm920t/start.S
+++ b/arch/arm/cpu/arm920t/start.S
@@ -93,6 +93,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/arm920t/u-boot.lds b/arch/arm/cpu/arm920t/u-boot.lds
index 17ba604..3999a3b 100644
--- a/arch/arm/cpu/arm920t/u-boot.lds
+++ b/arch/arm/cpu/arm920t/u-boot.lds
@@ -44,10 +44,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/arm925t/start.S b/arch/arm/cpu/arm925t/start.S
index dbb93ef..9d01f19 100644
--- a/arch/arm/cpu/arm925t/start.S
+++ b/arch/arm/cpu/arm925t/start.S
@@ -103,6 +103,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/arm925t/u-boot.lds b/arch/arm/cpu/arm925t/u-boot.lds
index 64e76f5..dac4e97 100644
--- a/arch/arm/cpu/arm925t/u-boot.lds
+++ b/arch/arm/cpu/arm925t/u-boot.lds
@@ -39,10 +39,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/arm926ejs/mx28/start.S 
b/arch/arm/cpu/arm926ejs/mx28/start.S
index 2cd4d73..645987d 100644
--- a/arch/arm/cpu/arm926ejs/mx28/start.S
+++ b/arch/arm/cpu/arm926ejs/mx28/start.S
@@ -139,6 +139,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds 
b/arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds
index 0fccd52..4ed5014 100644
--- a/arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds
+++ b/arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds
@@ -42,10 +42,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/arm926ejs/start.S b/arch/arm/cpu/arm926ejs/start.S
index 6f05f1a..c87a99b 100644
--- a/arch/arm/cpu/arm926ejs/start.S
+++ b/arch/arm/cpu/arm926ejs/start.S
@@ -160,6 +160,16 @@ _end:
        .word __bss_end__
 #endif
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/arm926ejs/u-boot.lds 
b/arch/arm/cpu/arm926ejs/u-boot.lds
index 1480e0c..9edaaab 100644
--- a/arch/arm/cpu/arm926ejs/u-boot.lds
+++ b/arch/arm/cpu/arm926ejs/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/arm946es/start.S b/arch/arm/cpu/arm946es/start.S
index 89ba558..af1f9c4 100644
--- a/arch/arm/cpu/arm946es/start.S
+++ b/arch/arm/cpu/arm946es/start.S
@@ -109,6 +109,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/arm946es/u-boot.lds b/arch/arm/cpu/arm946es/u-boot.lds
index ff938e4..a3608ba 100644
--- a/arch/arm/cpu/arm946es/u-boot.lds
+++ b/arch/arm/cpu/arm946es/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/arm_intcm/start.S b/arch/arm/cpu/arm_intcm/start.S
index 2033b36..27b2c3c 100644
--- a/arch/arm/cpu/arm_intcm/start.S
+++ b/arch/arm/cpu/arm_intcm/start.S
@@ -105,6 +105,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/arm_intcm/u-boot.lds 
b/arch/arm/cpu/arm_intcm/u-boot.lds
index f4a146c..0fbe17c 100644
--- a/arch/arm/cpu/arm_intcm/u-boot.lds
+++ b/arch/arm/cpu/arm_intcm/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __rodata_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds 
b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
index 8867e06..fccd824 100644
--- a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
+++ b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
@@ -43,10 +43,17 @@ SECTIONS
        } >.sram
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(.rodata*))
+       } >.sram
 
        . = ALIGN(4);
-       .data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
+       .data : {
+               __data_start = .;
+               *(SORT_BY_ALIGNMENT(.data*))
+       } >.sram
+
        . = ALIGN(4);
        __image_copy_end = .;
        _end = .;
diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
index ef08a55..c29a1d3 100644
--- a/arch/arm/cpu/armv7/start.S
+++ b/arch/arm/cpu/armv7/start.S
@@ -101,6 +101,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/armv7/u-boot.lds b/arch/arm/cpu/armv7/u-boot.lds
index 40ecf78..45011f6 100644
--- a/arch/arm/cpu/armv7/u-boot.lds
+++ b/arch/arm/cpu/armv7/u-boot.lds
@@ -39,10 +39,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/ixp/start.S b/arch/arm/cpu/ixp/start.S
index cb32121..452f093 100644
--- a/arch/arm/cpu/ixp/start.S
+++ b/arch/arm/cpu/ixp/start.S
@@ -118,6 +118,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/ixp/u-boot.lds b/arch/arm/cpu/ixp/u-boot.lds
index 7199de4..3f875f6 100644
--- a/arch/arm/cpu/ixp/u-boot.lds
+++ b/arch/arm/cpu/ixp/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data*)
        }
 
diff --git a/arch/arm/cpu/lh7a40x/start.S b/arch/arm/cpu/lh7a40x/start.S
index 62de8b8..a66a089 100644
--- a/arch/arm/cpu/lh7a40x/start.S
+++ b/arch/arm/cpu/lh7a40x/start.S
@@ -93,6 +93,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/lh7a40x/u-boot.lds b/arch/arm/cpu/lh7a40x/u-boot.lds
index 30934ff..f73a6e0 100644
--- a/arch/arm/cpu/lh7a40x/u-boot.lds
+++ b/arch/arm/cpu/lh7a40x/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/pxa/start.S b/arch/arm/cpu/pxa/start.S
index ba0de8f..f7aa19e 100644
--- a/arch/arm/cpu/pxa/start.S
+++ b/arch/arm/cpu/pxa/start.S
@@ -126,6 +126,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/pxa/u-boot.lds b/arch/arm/cpu/pxa/u-boot.lds
index e86e781..f250876 100644
--- a/arch/arm/cpu/pxa/u-boot.lds
+++ b/arch/arm/cpu/pxa/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/s3c44b0/start.S b/arch/arm/cpu/s3c44b0/start.S
index a29d5b4..11879d7 100644
--- a/arch/arm/cpu/s3c44b0/start.S
+++ b/arch/arm/cpu/s3c44b0/start.S
@@ -84,6 +84,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/s3c44b0/u-boot.lds b/arch/arm/cpu/s3c44b0/u-boot.lds
index 74a259c..0facaaf 100644
--- a/arch/arm/cpu/s3c44b0/u-boot.lds
+++ b/arch/arm/cpu/s3c44b0/u-boot.lds
@@ -36,10 +36,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/cpu/sa1100/start.S b/arch/arm/cpu/sa1100/start.S
index 92546d8..4b1f2fb 100644
--- a/arch/arm/cpu/sa1100/start.S
+++ b/arch/arm/cpu/sa1100/start.S
@@ -94,6 +94,16 @@ _bss_end_ofs:
 _end_ofs:
        .word _end - _start
 
+#ifdef CONFIG_GDB_SECTIONS_START
+.globl _data_start_ofs
+_data_start_ofs:
+       .word __data_start - _start
+
+.globl _rodata_start_ofs
+_rodata_start_ofs:
+       .word __rodata_start - _start
+#endif
+
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
diff --git a/arch/arm/cpu/sa1100/u-boot.lds b/arch/arm/cpu/sa1100/u-boot.lds
index e6381da..3cbae0d 100644
--- a/arch/arm/cpu/sa1100/u-boot.lds
+++ b/arch/arm/cpu/sa1100/u-boot.lds
@@ -39,10 +39,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/arch/arm/include/asm/config.h b/arch/arm/include/asm/config.h
index c60dba2..6297be9 100644
--- a/arch/arm/include/asm/config.h
+++ b/arch/arm/include/asm/config.h
@@ -21,6 +21,9 @@
 #ifndef _ASM_CONFIG_H_
 #define _ASM_CONFIG_H_
 
+/* Include section starts for .bss, .data, .rodata for "gdb add-symbol-file" */
+#define CONFIG_GDB_SECTIONS_START
+
 #define CONFIG_LMB
 #define CONFIG_SYS_BOOT_RAMDISK_HIGH
 #endif
diff --git a/arch/arm/include/asm/global_data.h 
b/arch/arm/include/asm/global_data.h
index c3ff789..5f28bbf 100644
--- a/arch/arm/include/asm/global_data.h
+++ b/arch/arm/include/asm/global_data.h
@@ -68,6 +68,19 @@ typedef      struct  global_data {
        unsigned long   timestamp;
 #endif
        unsigned long   relocaddr;      /* Start address of U-Boot in RAM */
+#ifdef CONFIG_GDB_SECTIONS_START
+       /* Section start information. Used with GDB command:
+        * add-symbol-file u-boot $gd->relocaddr \
+        *      -s .data $gd->sections.data \
+        *      -s .rodata $gd->sections.rodata \
+        *      -s .bss $gd->sections.bss
+        */
+       struct {
+               unsigned long   data;
+               unsigned long   rodata;
+               unsigned long   bss;
+       } sections;
+#endif
        phys_size_t     ram_size;       /* RAM size */
        unsigned long   mon_len;        /* monitor len */
        unsigned long   irq_sp;         /* irq stack pointer */
diff --git a/arch/arm/include/asm/u-boot-arm.h 
b/arch/arm/include/asm/u-boot-arm.h
index 4ca75f9..99f05bd 100644
--- a/arch/arm/include/asm/u-boot-arm.h
+++ b/arch/arm/include/asm/u-boot-arm.h
@@ -33,6 +33,10 @@
 extern ulong _bss_start_ofs;   /* BSS start relative to _start */
 extern ulong _bss_end_ofs;             /* BSS end relative to _start */
 extern ulong _end_ofs;         /* end of image relative to _start */
+#ifdef CONFIG_GDB_SECTIONS_START
+extern ulong _data_start_ofs;  /* .data start relative to _start */
+extern ulong _rodata_start_ofs;        /* .rodata start relative to _start */
+#endif
 extern ulong IRQ_STACK_START;  /* top of IRQ stack */
 extern ulong FIQ_STACK_START;  /* top of FIQ stack */
 extern ulong _TEXT_BASE;       /* code start */
diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c
index 500e216..3fdc33e 100644
--- a/arch/arm/lib/board.c
+++ b/arch/arm/lib/board.c
@@ -422,6 +422,13 @@ void board_init_f(ulong bootflag)
        gd->relocaddr = addr;
        gd->start_addr_sp = addr_sp;
        gd->reloc_off = addr - _TEXT_BASE;
+#ifdef CONFIG_GDB_SECTIONS_START
+       /* Save secitons starts of bss, data, rodata for
+        * gdb "add-symbol-file" command */
+       gd->sections.bss = addr + _bss_start_ofs;
+       gd->sections.data = addr + _data_start_ofs;
+       gd->sections.rodata = addr + _rodata_start_ofs;
+#endif
        debug("relocation Offset is: %08lx\n", gd->reloc_off);
        memcpy(id, (void *)gd, sizeof(gd_t));
 
diff --git a/board/ait/cam_enc_4xx/u-boot-spl.lds 
b/board/ait/cam_enc_4xx/u-boot-spl.lds
index 6f6e065..25b583b 100644
--- a/board/ait/cam_enc_4xx/u-boot-spl.lds
+++ b/board/ait/cam_enc_4xx/u-boot-spl.lds
@@ -43,10 +43,17 @@ SECTIONS
        } >.sram
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(.rodata*))
+       } >.sram
 
        . = ALIGN(4);
-       .data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
+       .data : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(.data*))
+       } >.sram
+
        . = ALIGN(4);
        .rel.dyn : {
                __rel_dyn_start = .;
diff --git a/board/davinci/da8xxevm/u-boot-spl-da850evm.lds 
b/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
index 6f6e065..a48eaf6 100644
--- a/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
+++ b/board/davinci/da8xxevm/u-boot-spl-da850evm.lds
@@ -43,10 +43,16 @@ SECTIONS
        } >.sram
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(.rodata*))
+       } >.sram
 
        . = ALIGN(4);
-       .data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
+       .data : {
+               __data_start = .;
+               *(SORT_BY_ALIGNMENT(.data*))
+       } >.sram
        . = ALIGN(4);
        .rel.dyn : {
                __rel_dyn_start = .;
diff --git a/board/davinci/da8xxevm/u-boot-spl-hawk.lds 
b/board/davinci/da8xxevm/u-boot-spl-hawk.lds
index b3a41af..bf29859 100644
--- a/board/davinci/da8xxevm/u-boot-spl-hawk.lds
+++ b/board/davinci/da8xxevm/u-boot-spl-hawk.lds
@@ -42,10 +42,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(.rodata) }
+       .rodata : {
+               __rodata_start = .;
+               *(.rodata)
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        __datarel_start = .;
                *(.data.rel)
diff --git a/board/vpac270/u-boot-spl.lds b/board/vpac270/u-boot-spl.lds
index 1958c2f..2363fbd 100644
--- a/board/vpac270/u-boot-spl.lds
+++ b/board/vpac270/u-boot-spl.lds
@@ -50,10 +50,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+       .rodata : {
+               __rodata_start = .;
+               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
index 5359a47..8993a33 100644
--- a/common/cmd_bdinfo.c
+++ b/common/cmd_bdinfo.c
@@ -367,6 +367,11 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * 
const argv[])
 #endif
        print_num("relocaddr", gd->relocaddr);
        print_num("reloc off", gd->reloc_off);
+#ifdef CONFIG_GDB_SECTIONS_START
+       print_num("data_start", gd->sections.data);
+       print_num("rodata_start", gd->sections.rodata);
+       print_num("bss_start", gd->sections.bss);
+#endif
        print_num("irq_sp", gd->irq_sp);        /* irq stack pointer */
        print_num("sp start ", gd->start_addr_sp);
        print_num("FB base  ", gd->fb_base);
diff --git a/nand_spl/board/freescale/mx31pdk/u-boot.lds 
b/nand_spl/board/freescale/mx31pdk/u-boot.lds
index d2b08f6..b743b07 100644
--- a/nand_spl/board/freescale/mx31pdk/u-boot.lds
+++ b/nand_spl/board/freescale/mx31pdk/u-boot.lds
@@ -38,10 +38,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(.rodata) }
+       .rodata : {
+               __rodata_start = .;
+               *(.rodata)
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
diff --git a/nand_spl/board/karo/tx25/u-boot.lds 
b/nand_spl/board/karo/tx25/u-boot.lds
index d2b08f6..b743b07 100644
--- a/nand_spl/board/karo/tx25/u-boot.lds
+++ b/nand_spl/board/karo/tx25/u-boot.lds
@@ -38,10 +38,14 @@ SECTIONS
        }
 
        . = ALIGN(4);
-       .rodata : { *(.rodata) }
+       .rodata : {
+               __rodata_start = .;
+               *(.rodata)
+       }
 
        . = ALIGN(4);
        .data : {
+               __data_start = .;
                *(.data)
        }
 
-- 
1.7.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to