diff options
-rw-r--r-- | Rules.mak | 36 | ||||
-rw-r--r-- | libc/sysdeps/linux/mips/bits/siginfo.h | 51 |
2 files changed, 45 insertions, 42 deletions
@@ -260,9 +260,17 @@ LDFLAG-fuse-ld := $(filter -fuse-ld=%,$(call qstrip,$(UCLIBC_EXTRA_CFLAGS))) # Could use -Wl,--script,$(top_srcdir)extra/scripts/none.lds as well. $(eval $(call check-ld-var,--no-warn-mismatch)) +$(eval $(call cache-output-var,GCC_VER,$(CC) -dumpversion)) +GCC_VER := $(subst ., ,$(GCC_VER)) +GCC_MAJOR_VER ?= $(word 1,$(GCC_VER)) +GCC_MINOR_VER ?= $(word 2,$(GCC_VER)) + # Flags in OPTIMIZATION are used only for non-debug builds OPTIMIZATION:= +OPTIMIZATION-$(GCC_MAJOR_VER):= +OPTIMIZATION-$(GCC_MAJOR_VER).$(GCC_MINOR_VER):= + # Use '-Os' optimization if available, else use -O2, allow Config to override $(eval $(call check-gcc-var,-Os)) ifneq ($(CFLAG_-Os),) @@ -273,31 +281,9 @@ OPTIMIZATION += $(CFLAG_-O2) endif # Use the gcc 3.4 -funit-at-a-time optimization when available $(eval $(call check-gcc-var,-funit-at-a-time)) -OPTIMIZATION += $(CFLAG_-funit-at-a-time) -# shrinks code by about 0.1% -$(eval $(call check-gcc-var,-fmerge-all-constants)) +OPTIMIZATION-3.4 += $(CFLAG_-funit-at-a-time) $(eval $(call check-gcc-var,-fstrict-aliasing)) -OPTIMIZATION += $(CFLAG_-fmerge-all-constants) $(CFLAG_-fstrict-aliasing) - -$(eval $(call cache-output-var,GCC_VER,$(CC) -dumpversion)) -GCC_VER := $(subst ., ,$(GCC_VER)) -GCC_MAJOR_VER ?= $(word 1,$(GCC_VER)) -#GCC_MINOR_VER ?= $(word 2,$(GCC_VER)) - -ifneq ($(TARGET_ARCH),arc) -ifeq ($(GCC_MAJOR_VER),4) -# shrinks code, results are from 4.0.2 -# 0.36% -$(eval $(call check-gcc-var,-fno-tree-loop-optimize)) -OPTIMIZATION += $(CFLAG_-fno-tree-loop-optimize) -# 0.34% -$(eval $(call check-gcc-var,-fno-tree-dominator-opts)) -OPTIMIZATION += $(CFLAG_-fno-tree-dominator-opts) -# 0.1% -$(eval $(call check-gcc-var,-fno-strength-reduce)) -OPTIMIZATION += $(CFLAG_-fno-strength-reduce) -endif -endif +OPTIMIZATION += $(CFLAG_-fstrict-aliasing) # CPU_CFLAGS-y contain options which are not warnings, # not include or library paths, and not optimizations. @@ -707,6 +693,8 @@ ifeq ($(DODEBUG),y) CFLAGS += -O0 -g3 -DDEBUG else CFLAGS += $(OPTIMIZATION) +CFLAGS += $(OPTIMIZATION-$(GCC_MAJOR_VER)) +CFLAGS += $(OPTIMIZATION-$(GCC_MAJOR_VER).$(GCC_MINOR_VER)) endif ifeq ($(DOSTRIP),y) LDFLAGS += -Wl,-s diff --git a/libc/sysdeps/linux/mips/bits/siginfo.h b/libc/sysdeps/linux/mips/bits/siginfo.h index a6e41354b..5199d4d99 100644 --- a/libc/sysdeps/linux/mips/bits/siginfo.h +++ b/libc/sysdeps/linux/mips/bits/siginfo.h @@ -69,6 +69,22 @@ typedef struct siginfo __uid_t si_uid; /* Real user ID of sending process. */ } _kill; + /* POSIX.1b timers. */ + struct + { + int si_tid; /* Timer ID. */ + int si_overrun; /* Overrun count. */ + sigval_t si_sigval; /* Signal value. */ + } _timer; + + /* POSIX.1b signals. */ + struct + { + __pid_t si_pid; /* Sending process ID. */ + __uid_t si_uid; /* Real user ID of sending process. */ + sigval_t si_sigval; /* Signal value. */ + } _rt; + /* SIGCHLD. */ struct { @@ -83,29 +99,15 @@ typedef struct siginfo struct { void *si_addr; /* Faulting insn/memory ref. */ + short int si_addr_lsb; /* Valid LSB of the reported address. */ } _sigfault; /* SIGPOLL. */ struct { - int si_band; /* Band event for SIGPOLL. */ + long int si_band; /* Band event for SIGPOLL. */ int si_fd; } _sigpoll; - - /* POSIX.1b timers. */ - struct - { - unsigned int _timer1; - unsigned int _timer2; - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; } _sifields; } siginfo_t; @@ -113,6 +115,8 @@ typedef struct siginfo /* X/Open requires some more fields with fixed names. */ # define si_pid _sifields._kill.si_pid # define si_uid _sifields._kill.si_uid +# define si_timerid _sifields._timer.si_tid +# define si_overrun _sifields._timer.si_overrun # define si_status _sifields._sigchld.si_status # define si_utime _sifields._sigchld.si_utime # define si_stime _sifields._sigchld.si_stime @@ -120,6 +124,7 @@ typedef struct siginfo # define si_int _sifields._rt.si_sigval.sival_int # define si_ptr _sifields._rt.si_sigval.sival_ptr # define si_addr _sifields._sigfault.si_addr +# define si_addr_lsb _sifields._sigfault.si_addr_lsb # define si_band _sifields._sigpoll.si_band # define si_fd _sifields._sigpoll.si_fd @@ -142,13 +147,14 @@ enum # define SI_ASYNCIO SI_ASYNCIO SI_QUEUE, /* Sent by sigqueue. */ # define SI_QUEUE SI_QUEUE - SI_USER, /* Sent by kill, sigsend, raise. */ + SI_USER, /* Sent by kill, sigsend. */ # define SI_USER SI_USER SI_KERNEL = 0x80 /* Send by kernel. */ #define SI_KERNEL SI_KERNEL }; +# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 /* `si_code' values for SIGILL signal. */ enum { @@ -207,10 +213,16 @@ enum # define BUS_ADRALN BUS_ADRALN BUS_ADRERR, /* Non-existant physical address. */ # define BUS_ADRERR BUS_ADRERR - BUS_OBJERR /* Object specific hardware error. */ + BUS_OBJERR, /* Object specific hardware error. */ # define BUS_OBJERR BUS_OBJERR + BUS_MCEERR_AR, /* Hardware memory error: action required. */ +# define BUS_MCEERR_AR BUS_MCEERR_AR + BUS_MCEERR_AO /* Hardware memory error: action optional. */ +# define BUS_MCEERR_AO BUS_MCEERR_AO }; +# endif +# ifdef __USE_XOPEN_EXTENDED /* `si_code' values for SIGTRAP signal. */ enum { @@ -219,7 +231,9 @@ enum TRAP_TRACE /* Process trace trap. */ # define TRAP_TRACE TRAP_TRACE }; +# endif +# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 /* `si_code' values for SIGCHLD signal. */ enum { @@ -253,6 +267,7 @@ enum POLL_HUP /* Device disconnected. */ # define POLL_HUP POLL_HUP }; +# endif # undef __need_siginfo_t #endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ |