Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbb794f9

Browse files
earlephilhowerdevyte
authored andcommitted
Move C++ vtables into IRAM, out of HEAP (esp8266#4179)
GCC places vtables in .rodata, with a mangled name of "_ZTV*." Becausethese are simply address jump tables, there is no need to place them inRAM. Instead, have the linker place them in the .text (aka IRAM) section.This will free up a variable amount of heap space, depending on the numberof classes with virtual functions used in any particular project.
1 parent074402e commitbb794f9

File tree

1 file changed

+67
-66
lines changed

1 file changed

+67
-66
lines changed

‎tools/sdk/ld/eagle.app.v6.common.ld‎

Lines changed: 67 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -84,72 +84,6 @@ SECTIONS
8484
_data_end =ABSOLUTE(.);
8585
} >dram0_0_seg :dram0_0_phdr
8686

87-
.rodata :ALIGN(4)
88-
{
89-
_rodata_start =ABSOLUTE(.);
90-
*(.sdk.version)
91-
*(.rodata)
92-
*(.rodata.*)
93-
*(.gnu.linkonce.r.*)
94-
*(.rodata1)
95-
__XT_EXCEPTION_TABLE__ =ABSOLUTE(.);
96-
*(.xt_except_table)
97-
*(.gcc_except_table)
98-
*(.gnu.linkonce.e.*)
99-
*(.gnu.version_r)
100-
*(.eh_frame)
101-
. = (. +3) & ~3;
102-
/* C++ constructor and destructor tables, properly ordered:*/
103-
__init_array_start =ABSOLUTE(.);
104-
KEEP (*crtbegin.o(.ctors))
105-
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
106-
KEEP (*(SORT(.ctors.*)))
107-
KEEP (*(.ctors))
108-
__init_array_end =ABSOLUTE(.);
109-
KEEP (*crtbegin.o(.dtors))
110-
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
111-
KEEP (*(SORT(.dtors.*)))
112-
KEEP (*(.dtors))
113-
/* C++ exception handlers table:*/
114-
__XT_EXCEPTION_DESCS__ =ABSOLUTE(.);
115-
*(.xt_except_desc)
116-
*(.gnu.linkonce.h.*)
117-
__XT_EXCEPTION_DESCS_END__ =ABSOLUTE(.);
118-
*(.xt_except_desc_end)
119-
*(.dynamic)
120-
*(.gnu.version_d)
121-
. =ALIGN(4);/* this table MUST be 4-byte aligned*/
122-
_bss_table_start =ABSOLUTE(.);
123-
LONG(_bss_start)
124-
LONG(_bss_end)
125-
_bss_table_end =ABSOLUTE(.);
126-
_rodata_end =ABSOLUTE(.);
127-
} >dram0_0_seg :dram0_0_phdr
128-
129-
.bssALIGN(8) (NOLOAD) :ALIGN(4)
130-
{
131-
. =ALIGN (8);
132-
_bss_start =ABSOLUTE(.);
133-
*(.dynsbss)
134-
*(.sbss)
135-
*(.sbss.*)
136-
*(.gnu.linkonce.sb.*)
137-
*(.scommon)
138-
*(.sbss2)
139-
*(.sbss2.*)
140-
*(.gnu.linkonce.sb2.*)
141-
*(.dynbss)
142-
*(.bss)
143-
*(.bss.*)
144-
*(.gnu.linkonce.b.*)
145-
*(COMMON)
146-
. =ALIGN (8);
147-
_bss_end =ABSOLUTE(.);
148-
_heap_start =ABSOLUTE(.);
149-
/* _stack_sentry = ALIGN(0x8);*/
150-
} >dram0_0_seg :dram0_0_bss_phdr
151-
/* __stack = 0x3ffc8000;*/
152-
15387
.irom0.text :ALIGN(4)
15488
{
15589
_irom0_text_start =ABSOLUTE(.);
@@ -231,6 +165,7 @@ SECTIONS
231165
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
232166
*.cpp.o(.iram.text)
233167
*.c.o(.iram.text)
168+
*(.rodata._ZTV*)/* C++ vtables*/
234169
/* PlatformIO*/
235170
/* framework*/
236171
*.pioenvs\\*\\lib*.a:(.iram.text)
@@ -249,6 +184,72 @@ SECTIONS
249184
_etext = .;
250185
} >iram1_0_seg :iram1_0_phdr
251186

187+
.rodata :ALIGN(4)
188+
{
189+
_rodata_start =ABSOLUTE(.);
190+
*(.sdk.version)
191+
*(.rodata)
192+
*(.rodata.*)
193+
*(.gnu.linkonce.r.*)
194+
*(.rodata1)
195+
__XT_EXCEPTION_TABLE__ =ABSOLUTE(.);
196+
*(.xt_except_table)
197+
*(.gcc_except_table)
198+
*(.gnu.linkonce.e.*)
199+
*(.gnu.version_r)
200+
*(.eh_frame)
201+
. = (. +3) & ~3;
202+
/* C++ constructor and destructor tables, properly ordered:*/
203+
__init_array_start =ABSOLUTE(.);
204+
KEEP (*crtbegin.o(.ctors))
205+
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
206+
KEEP (*(SORT(.ctors.*)))
207+
KEEP (*(.ctors))
208+
__init_array_end =ABSOLUTE(.);
209+
KEEP (*crtbegin.o(.dtors))
210+
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
211+
KEEP (*(SORT(.dtors.*)))
212+
KEEP (*(.dtors))
213+
/* C++ exception handlers table:*/
214+
__XT_EXCEPTION_DESCS__ =ABSOLUTE(.);
215+
*(.xt_except_desc)
216+
*(.gnu.linkonce.h.*)
217+
__XT_EXCEPTION_DESCS_END__ =ABSOLUTE(.);
218+
*(.xt_except_desc_end)
219+
*(.dynamic)
220+
*(.gnu.version_d)
221+
. =ALIGN(4);/* this table MUST be 4-byte aligned*/
222+
_bss_table_start =ABSOLUTE(.);
223+
LONG(_bss_start)
224+
LONG(_bss_end)
225+
_bss_table_end =ABSOLUTE(.);
226+
_rodata_end =ABSOLUTE(.);
227+
} >dram0_0_seg :dram0_0_phdr
228+
229+
.bssALIGN(8) (NOLOAD) :ALIGN(4)
230+
{
231+
. =ALIGN (8);
232+
_bss_start =ABSOLUTE(.);
233+
*(.dynsbss)
234+
*(.sbss)
235+
*(.sbss.*)
236+
*(.gnu.linkonce.sb.*)
237+
*(.scommon)
238+
*(.sbss2)
239+
*(.sbss2.*)
240+
*(.gnu.linkonce.sb2.*)
241+
*(.dynbss)
242+
*(.bss)
243+
*(.bss.*)
244+
*(.gnu.linkonce.b.*)
245+
*(COMMON)
246+
. =ALIGN (8);
247+
_bss_end =ABSOLUTE(.);
248+
_heap_start =ABSOLUTE(.);
249+
/* _stack_sentry = ALIGN(0x8);*/
250+
} >dram0_0_seg :dram0_0_bss_phdr
251+
/* __stack = 0x3ffc8000;*/
252+
252253
.lit4 :ALIGN(4)
253254
{
254255
_lit4_start =ABSOLUTE(.);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp