1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

cgen: backtrace and sigaction fixes

This commit is contained in:
Alexander Medvednikov 2020-03-22 14:47:43 +01:00
parent 0609756d36
commit 2738a0c776
4 changed files with 17 additions and 3 deletions

View File

@ -21,7 +21,9 @@ fn C.strlen(s byteptr) int
fn C.isdigit(s byteptr) bool fn C.isdigit(s byteptr) bool
// stdio.h // stdio.h
fn C.popen(c byteptr, t byteptr) voidptr fn C.popen(c byteptr, t byteptr) voidptr
// <execinfo.h> // <execinfo.h>
// backtrace functions are not #included, that's why they have to be defined without C.
fn backtrace(a voidptr, b int) int fn backtrace(a voidptr, b int) int
fn backtrace_symbols(voidptr, int) &byteptr fn backtrace_symbols(voidptr, int) &byteptr

View File

@ -791,12 +791,15 @@ pub fn on_segfault(f voidptr) {
return return
} }
$if macos { $if macos {
C.printf("TODO")
/*
mut sa := C.sigaction{} mut sa := C.sigaction{}
C.memset(&sa, 0, sizeof(sigaction)) C.memset(&sa, 0, sizeof(C.sigaction_size))
C.sigemptyset(&sa.sa_mask) C.sigemptyset(&sa.sa_mask)
sa.sa_sigaction = f sa.sa_sigaction = f
sa.sa_flags = C.SA_SIGINFO sa.sa_flags = C.SA_SIGINFO
C.sigaction(C.SIGSEGV, &sa, 0) C.sigaction(C.SIGSEGV, &sa, 0)
*/
} }
} }

View File

@ -100,7 +100,7 @@ pub fn (g mut Gen) typ(t table.Type) string {
if styp.starts_with('C__') { if styp.starts_with('C__') {
styp = styp[3..] styp = styp[3..]
} }
if styp in ['stat', 'dirent*', 'tm', 'tm*', 'winsize'] { if styp in ['stat', 'dirent*', 'tm', 'tm*', 'winsize', 'sigaction'] {
// TODO perf and other C structs // TODO perf and other C structs
styp = 'struct $styp' styp = 'struct $styp'
} }
@ -536,7 +536,8 @@ fn (g mut Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) {
} }
fn (g mut Gen) gen_fn_decl(it ast.FnDecl) { fn (g mut Gen) gen_fn_decl(it ast.FnDecl) {
if it.is_c || it.name == 'malloc' || it.no_body { if it.is_c || it.name == 'malloc' {
// || it.no_body {
return return
} }
g.reset_tmp_count() g.reset_tmp_count()
@ -583,6 +584,12 @@ fn (g mut Gen) gen_fn_decl(it ast.FnDecl) {
*/ */
// //
g.fn_args(it.args, it.is_variadic) g.fn_args(it.args, it.is_variadic)
if it.no_body {
// Just a function header.
g.definitions.writeln(');')
g.writeln(');')
return
}
g.writeln(') { ') g.writeln(') { ')
if !is_main { if !is_main {
g.definitions.writeln(');') g.definitions.writeln(');')

View File

@ -190,6 +190,7 @@ int load_so(byteptr);
void reload_so(); void reload_so();
void _vinit(); void _vinit();
void _vcleanup(); void _vcleanup();
#define sigaction_size sizeof(sigaction);
// ============== wyhash ============== // ============== wyhash ==============
// Author: Wang Yi // Author: Wang Yi
@ -311,6 +312,7 @@ typedef byte array_fixed_byte_400 [400];
#define true 1 #define true 1
#define false 0 #define false 0
#endif #endif
' '
bare_c_headers = ' bare_c_headers = '