Răsfoiți Sursa

[BSP] fix GCC compiling issue when enable C++ support

Bernard Xiong 10 ani în urmă
părinte
comite
38be10cf89
2 a modificat fișierele cu 23 adăugiri și 2 ștergeri
  1. 1 1
      bsp/lpc408x/rtconfig.py
  2. 22 1
      bsp/lpc408x/rtthread-lpc408x.ld

+ 1 - 1
bsp/lpc408x/rtconfig.py

@@ -33,7 +33,7 @@ if PLATFORM == 'gcc':
     CXX = PREFIX + 'g++'
     AS = PREFIX + 'gcc'
     AR = PREFIX + 'ar'
-    LINK = PREFIX + 'gcc'
+    LINK = PREFIX + 'g++'
     TARGET_EXT = 'elf'
     SIZE = PREFIX + 'size'
     OBJDUMP = PREFIX + 'objdump'

+ 22 - 1
bsp/lpc408x/rtthread-lpc408x.ld

@@ -38,10 +38,25 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        PROVIDE(__ctors_start__ = .);
+        /* old GCC version uses .ctors */
+        KEEP(*(SORT(.ctors.*)))
+        KEEP(*(.ctors))
+        /* new GCC version uses .init_array */
+        KEEP (*(SORT(.init_array.*)))
+        KEEP (*(.init_array))
+        PROVIDE(__ctors_end__ = .);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0
 
+    .ARM.extab : 
+    { 
+        *(.ARM.extab*) 
+    } > CODE
+
+    /* The .ARM.exidx section is used for C++ exception handling. */
     /* .ARM.exidx is sorted, so has to go in its own output section.  */
     __exidx_start = .;
     .ARM.exidx :
@@ -57,6 +72,12 @@ SECTIONS
 
     .data : AT (_sidata)
     {
+        . = ALIGN(4);
+        PROVIDE(__dtors_start__ = .);
+        KEEP(*(SORT(.dtors.*)))
+        KEEP(*(.dtors))
+        PROVIDE(__dtors_end__ = .);
+
         . = ALIGN(4);
         /* This is used by the startup in order to initialize the .data secion */
         _sdata = . ;
@@ -68,7 +89,7 @@ SECTIONS
         . = ALIGN(4);
         /* This is used by the startup in order to initialize the .data secion */
         _edata = . ;
-    } >DATA
+    } > DATA
 
     .stack : 
     {