1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

time: only use packed struct on x86*

* 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

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45165 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2014-02-24 11:10:11 +00:00
parent fa7b849f94
commit 131e4bec04
4 changed files with 13 additions and 2 deletions

View file

@ -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.

View file

@ -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], [

2
time.c
View file

@ -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))

View file

@ -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