diff --git a/core/cplusplus_operators.cpp b/core/cplusplus_operators.cpp index 86f4477..b263838 100644 --- a/core/cplusplus_operators.cpp +++ b/core/cplusplus_operators.cpp @@ -4,22 +4,22 @@ #include #include -void *operator new(size_t size) +void * __attribute__((weak)) operator new(size_t size) { return malloc(size); } -void *operator new[](size_t size) +void * __attribute__((weak)) operator new[](size_t size) { return malloc(size); } -void operator delete(void * ptr) +void __attribute__((weak)) operator delete(void * ptr) { free(ptr); } -void operator delete[](void * ptr) +void __attribute__((weak)) operator delete[](void * ptr) { free(ptr); } diff --git a/ld/program.ld b/ld/program.ld index 0718d6f..e169abd 100644 --- a/ld/program.ld +++ b/ld/program.ld @@ -113,7 +113,11 @@ SECTIONS *libc.a:*bzero.o(.literal .text .literal.* .text.*) *libc.a:*lock.o(.literal .text .literal.* .text.*) - *libc.a:*printf.o(.literal .text .literal.* .text.*) + *libc.a:*-printf.o(.literal .text .literal.* .text.*) + *libc.a:*-sprintf.o(.literal .text .literal.* .text.*) + *libc.a:*-fprintf.o(.literal .text .literal.* .text.*) + *libc.a:*-svfprintf.o(.literal .text .literal.* .text.*) + *libc.a:*-vfprintf.o(.literal .text .literal.* .text.*) *libc.a:*findfp.o(.literal .text .literal.* .text.*) *libc.a:*fputwc.o(.literal .text .literal.* .text.*) @@ -249,10 +253,13 @@ SECTIONS *(.gnu.linkonce.r.*) __XT_EXCEPTION_TABLE__ = ABSOLUTE(.); *(.xt_except_table) - *(.gcc_except_table) + *(.gcc_except_table .gcc_except_table.*) *(.gnu.linkonce.e.*) *(.gnu.version_r) - *(.eh_frame) + . = (. + 3) & ~ 3; + __eh_frame = ABSOLUTE(.); + KEEP(*(.eh_frame)) + . = (. + 7) & ~ 3; . = ALIGN(4); *(.dynamic) *(.gnu.version_d)