mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	capa should be even number on 64-bit SPARC for 8-byte word alignment
* id_table.c (list_id_table_init): When unaligned word access is prohibited and sizeof(VALUE) is 8 (64-bit machines), capa should always be even number for 8-byte word alignment of the values of a table. This code assumes that sizeof(ID) is 4, sizeof(VALUE) is 8, and xmalloc() returns 8-byte aligned memory. This fixes bus error on 64-bit SPARC Solaris 10. [Bug #12406][ruby-dev:49631] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									a716a2474b
								
							
						
					
					
						commit
						02cafdf491
					
				
					 2 changed files with 18 additions and 0 deletions
				
			
		
							
								
								
									
										10
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,13 @@
 | 
			
		|||
Fri May 20 23:45:53 2016  Naohisa Goto  <ngotogenome@gmail.com>
 | 
			
		||||
 | 
			
		||||
	* id_table.c (list_id_table_init): When unaligned word access is
 | 
			
		||||
	  prohibited and sizeof(VALUE) is 8 (64-bit machines),
 | 
			
		||||
	  capa should always be even number for 8-byte word alignment
 | 
			
		||||
	  of the values of a table. This code assumes that sizeof(ID) is 4,
 | 
			
		||||
	  sizeof(VALUE) is 8, and xmalloc() returns 8-byte aligned memory.
 | 
			
		||||
	  This fixes bus error on 64-bit SPARC Solaris 10.
 | 
			
		||||
	  [Bug #12406][ruby-dev:49631]
 | 
			
		||||
 | 
			
		||||
Fri May 20 22:30:09 2016  Naohisa Goto  <ngotogenome@gmail.com>
 | 
			
		||||
 | 
			
		||||
	* symbol.h (rb_id2sym): Use HAVE_BUILTIN___BUILTIN_CONSTANT_P
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -379,6 +379,14 @@ static struct list_id_table *
 | 
			
		|||
list_id_table_init(struct list_id_table *tbl, size_t capa)
 | 
			
		||||
{
 | 
			
		||||
    if (capa > 0) {
 | 
			
		||||
#if ID_TABLE_USE_CALC_VALUES && \
 | 
			
		||||
    (UNALIGNED_WORD_ACCESS == 0) && (SIZEOF_VALUE == 8)
 | 
			
		||||
	/* Workaround for 8-byte word alignment on 64-bit SPARC.
 | 
			
		||||
	 * This code assumes that sizeof(ID) == 4, sizeof(VALUE) == 8, and
 | 
			
		||||
	 *  xmalloc() returns 8-byte aligned memory block.
 | 
			
		||||
	 */
 | 
			
		||||
	if (capa & (size_t)1) capa += 1;
 | 
			
		||||
#endif
 | 
			
		||||
	tbl->capa = (int)capa;
 | 
			
		||||
#if ID_TABLE_USE_CALC_VALUES
 | 
			
		||||
	tbl->keys = (id_key_t *)xmalloc(sizeof(id_key_t) * capa + sizeof(VALUE) * capa);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue