From cd91ea658a8c29c51aea1d4ab410bfbcc84fe5e5 Mon Sep 17 00:00:00 2001 From: herman ten brugge Date: Mon, 11 Jan 2021 19:26:10 +0100 Subject: [PATCH] OpenBSD: x86 update --- i386-gen.c | 8 ++++---- libtcc.c | 5 +++++ tests/Makefile | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/i386-gen.c b/i386-gen.c index f34072dd..7098a6e9 100644 --- a/i386-gen.c +++ b/i386-gen.c @@ -379,7 +379,7 @@ static uint8_t fastcallw_regs[2] = { TREG_ECX, TREG_EDX }; returning via struct pointer. */ ST_FUNC int gfunc_sret(CType *vt, int variadic, CType *ret, int *ret_align, int *regsize) { -#if defined(TCC_TARGET_PE) || TARGETOS_FreeBSD +#if defined(TCC_TARGET_PE) || TARGETOS_FreeBSD || TARGETOS_OpenBSD int size, align; *ret_align = 1; // Never have to re-align return values for x86 *regsize = 4; @@ -495,7 +495,7 @@ ST_FUNC void gfunc_call(int nb_args) args_size -= 4; } } -#if !defined(TCC_TARGET_PE) && !TARGETOS_FreeBSD +#if !defined(TCC_TARGET_PE) && !TARGETOS_FreeBSD || TARGETOS_OpenBSD else if ((vtop->type.ref->type.t & VT_BTYPE) == VT_STRUCT) args_size -= 4; #endif @@ -545,7 +545,7 @@ ST_FUNC void gfunc_prolog(Sym *func_sym) func_sub_sp_offset = ind; /* if the function returns a structure, then add an implicit pointer parameter */ -#if defined(TCC_TARGET_PE) || TARGETOS_FreeBSD +#if defined(TCC_TARGET_PE) || TARGETOS_FreeBSD || TARGETOS_OpenBSD size = type_size(&func_vt,&align); if (((func_vt.t & VT_BTYPE) == VT_STRUCT) && (size > 8 || (size & (size - 1)))) { @@ -586,7 +586,7 @@ ST_FUNC void gfunc_prolog(Sym *func_sym) /* pascal type call or fastcall ? */ if (func_call == FUNC_STDCALL || func_call == FUNC_FASTCALLW) func_ret_sub = addr - 8; -#if !defined(TCC_TARGET_PE) && !TARGETOS_FreeBSD +#if !defined(TCC_TARGET_PE) && !TARGETOS_FreeBSD || TARGETOS_OpenBSD else if (func_vc) func_ret_sub = 4; #endif diff --git a/libtcc.c b/libtcc.c index 404577fd..f26c5dfb 100644 --- a/libtcc.c +++ b/libtcc.c @@ -1477,6 +1477,11 @@ static int tcc_set_linker(TCCState *s, const char *option) s->filetype |= AFF_WHOLE_ARCHIVE; else s->filetype &= ~AFF_WHOLE_ARCHIVE; + } else if (ret = link_option(option, "z=", &p), ret) { + if (!strcmp(p, "notext")) + ; /* ignore */ + else + goto err; } else if (p) { return 0; } else { diff --git a/tests/Makefile b/tests/Makefile index 50dabc94..445bfeec 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -56,7 +56,7 @@ endif ifeq ($(ARCH),i386) # tcctest.c:get_asm_string uses a construct that is checked too strictly # by GCC in 32bit mode when PIC is enabled. -test.ref: CFLAGS+=-fno-PIC -fno-PIE +test.ref: CFLAGS+=-fno-PIC -fno-PIE -Wl,-z,notext endif ifeq ($(CC_NAME),msvc) test.ref abitest : CC = gcc