diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | configure.in | 4 | ||||
-rw-r--r-- | time.c | 2 | ||||
-rw-r--r-- | timev.h | 2 |
4 files changed, 13 insertions, 2 deletions
@@ -1,3 +1,10 @@ +Mon Feb 24 20:05:41 2014 Eric Wong <e@80x24.org> + + * configure.in: define PACKED_STRUCT_UNALIGNED for x86* + * timev.h (struct vtm): use PACKED_STRUCT_UNALIGNED + * time.c (struct time_object): ditto + [Bug #9558] non-x86 cannot safely access unaligned addresses + Mon Feb 24 18:10:02 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com> * test/fiddle/test_function.rb: remove unused variables. diff --git a/configure.in b/configure.in index 8d7bfba55e..aa5899bb96 100644 --- a/configure.in +++ b/configure.in @@ -1277,8 +1277,12 @@ AC_CACHE_CHECK(packed struct attribute, rb_cv_packed_struct, [rb_cv_packed_struct=yes], [rb_cv_packed_struct=no])]) if test "$rb_cv_packed_struct" = yes; then AC_DEFINE_UNQUOTED(PACKED_STRUCT, __attribute__((packed))) + AS_CASE(["$target_cpu"], + [x86*|x?86], [AC_DEFINE_UNQUOTED(PACKED_STRUCT_UNALIGNED, PACKED_STRUCT)], + [AC_DEFINE_UNQUOTED(PACKED_STRUCT_UNALIGNED,)]) else AC_DEFINE_UNQUOTED(PACKED_STRUCT,) + AC_DEFINE_UNQUOTED(PACKED_STRUCT_UNALIGNED,) fi AC_DEFUN([RUBY_CHECK_PRINTF_PREFIX], [ @@ -1745,7 +1745,7 @@ struct time_object { struct vtm vtm; uint8_t gmt:3; /* 0:utc 1:localtime 2:fixoff 3:init */ uint8_t tm_got:1; -} PACKED_STRUCT; +} PACKED_STRUCT_UNALIGNED; #define GetTimeval(obj, tobj) ((tobj) = get_timeval(obj)) #define GetNewTimeval(obj, tobj) ((tobj) = get_new_timeval(obj)) @@ -14,7 +14,7 @@ struct vtm { uint8_t sec:6; /* 0..60 */ uint8_t wday:3; /* 0:Sunday, 1:Monday, ..., 6:Saturday 7:init */ uint8_t isdst:2; /* 0:StandardTime 1:DayLightSavingTime 3:init */ -} PACKED_STRUCT; +} PACKED_STRUCT_UNALIGNED; #define TIME_SCALE 1000000000 |