From 376c74980d759ea4f9e8c6c10ecf83ea6565394d Mon Sep 17 00:00:00 2001 From: Luc Van Oostenryck Date: Sun, 1 Dec 2019 22:55:12 +0100 Subject: arch: move handle_arch_finalize() into target_init() Before initaializing the builtin types some 'finalizations' are needed. target_ini() already does most of this. So, move the arch-specific content of handle_arch_finalize() into the corresponding target files and the generic part to target_init(). Signed-off-by: Luc Van Oostenryck --- lib.c | 35 +---------------------------------- lib.h | 1 + target-arm64.c | 8 ++++++++ target-riscv.c | 12 ++++++++++++ target.c | 10 ++++++++++ 5 files changed, 32 insertions(+), 34 deletions(-) diff --git a/lib.c b/lib.c index 82354af7..366acd45 100644 --- a/lib.c +++ b/lib.c @@ -320,7 +320,7 @@ int preprocess_only; enum standard standard = STANDARD_GNU89; -static int arch_msize_long = 0; +int arch_msize_long = 0; int arch_m64 = ARCH_M64_DEFAULT; int arch_big_endian = ARCH_BIG_ENDIAN; int arch_fp_abi = FP_ABI_NATIVE; @@ -714,38 +714,6 @@ static char **handle_switch_m(char *arg, char **next) return next; } -static void handle_arch_msize_long_finalize(void) -{ - if (arch_msize_long) { - size_t_ctype = &ulong_ctype; - ssize_t_ctype = &long_ctype; - } -} - -static void handle_arch_finalize(void) -{ - handle_arch_msize_long_finalize(); - - if (fpie > fpic) - fpic = fpie; - if (fshort_wchar) - wchar_ctype = &ushort_ctype; - - switch (arch_mach) { - case MACH_ARM64: - if (arch_cmodel == CMODEL_UNKNOWN) - arch_cmodel = CMODEL_SMALL; - break; - case MACH_RISCV32: - case MACH_RISCV64: - if (arch_cmodel == CMODEL_UNKNOWN) - arch_cmodel = CMODEL_MEDLOW; - if (fpic) - arch_cmodel = CMODEL_PIC; - break; - } -} - static char **handle_switch_o(char *arg, char **next) { if (!strcmp (arg, "o")) { // "-o foo" @@ -1732,7 +1700,6 @@ struct symbol_list *sparse_initialize(int argc, char **argv, struct string_list if (filelist) { // Initialize type system target_init(); - handle_arch_finalize(); init_ctype(); predefined_macros(); diff --git a/lib.h b/lib.h index 3e565c6f..d0585e36 100644 --- a/lib.h +++ b/lib.h @@ -205,6 +205,7 @@ extern int fpie; extern int fshort_wchar; extern int funsigned_char; +extern int arch_msize_long; extern int arch_m64; extern int arch_big_endian; extern int arch_fp_abi; diff --git a/target-arm64.c b/target-arm64.c index bfada515..1efd0899 100644 --- a/target-arm64.c +++ b/target-arm64.c @@ -3,6 +3,12 @@ #include "machine.h" +static void init_arm64(const struct target *self) +{ + if (arch_cmodel == CMODEL_UNKNOWN) + arch_cmodel = CMODEL_SMALL; +} + const struct target target_arm64 = { .mach = MACH_ARM64, .bitness = ARCH_LP64, @@ -11,4 +17,6 @@ const struct target target_arm64 = { .unsigned_char = 1, .wchar = &uint_ctype, + + .init = init_arm64, }; diff --git a/target-riscv.c b/target-riscv.c index cbec7623..09edfd7a 100644 --- a/target-riscv.c +++ b/target-riscv.c @@ -3,6 +3,14 @@ #include "machine.h" +static void init_riscv(const struct target *self) +{ + if (arch_cmodel == CMODEL_UNKNOWN) + arch_cmodel = CMODEL_MEDLOW; + if (fpic) + arch_cmodel = CMODEL_PIC; +} + const struct target target_riscv32 = { .mach = MACH_RISCV32, .bitness = ARCH_LP32, @@ -10,6 +18,8 @@ const struct target target_riscv32 = { .unsigned_char = 1, .target_64bit = &target_riscv64, + + .init = init_riscv, }; const struct target target_riscv64 = { @@ -19,4 +29,6 @@ const struct target target_riscv64 = { .unsigned_char = 1, .target_32bit = &target_riscv32, + + .init = init_riscv, }; diff --git a/target.c b/target.c index 8d2d1058..006292cc 100644 --- a/target.c +++ b/target.c @@ -181,6 +181,9 @@ void target_init(void) arch_target = target; arch_mach = target->mach; + if (fpie > fpic) + fpic = fpie; + if (target->wchar) wchar_ctype = target->wchar; if (target->wint) @@ -192,4 +195,11 @@ void target_init(void) if (target->init) target->init(target); + + if (arch_msize_long) { + size_t_ctype = &ulong_ctype; + ssize_t_ctype = &long_ctype; + } + if (fshort_wchar) + wchar_ctype = &ushort_ctype; } -- cgit 1.2.3-korg