Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit a811d96

Browse files
committed
Determine desciptor for pointer-sized fields based on target not host pointer size.
1 parent 1560c11 commit a811d96

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

src/vm/fieldmarshaler.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ VOID ParseNativeType(Module* pModule,
106106
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_BLITTABLE_INTEGER, sizeof(INT32), alignof(INT32));
107107
break;
108108
case MarshalInfo::MARSHAL_TYPE_GENERIC_8:
109-
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_BLITTABLE_INTEGER, sizeof(INT64), alignof(INT64));
109+
#if defined(_TARGET_X86_) && defined(UNIX_X86_ABI)
110+
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_BLITTABLE_INTEGER, sizeof(INT64), 4);
111+
#else
112+
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_BLITTABLE_INTEGER, sizeof(INT64), sizeof(INT64));
113+
#endif
110114
break;
111115
case MarshalInfo::MARSHAL_TYPE_ANSICHAR:
112116
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_INTEGER_LIKE, sizeof(CHAR), sizeof(CHAR));
@@ -126,7 +130,11 @@ VOID ParseNativeType(Module* pModule,
126130
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_R4, sizeof(float), sizeof(float));
127131
break;
128132
case MarshalInfo::MARSHAL_TYPE_DOUBLE:
133+
#if defined(_TARGET_X86_) && defined(UNIX_X86_ABI)
134+
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_R8, sizeof(double), 4);
135+
#else
129136
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_R8, sizeof(double), sizeof(double));
137+
#endif
130138
break;
131139
case MarshalInfo::MARSHAL_TYPE_CURRENCY:
132140
*pNFD = NativeFieldDescriptor(NATIVE_FIELD_CATEGORY_COM_STRUCT, sizeof(CY), sizeof(CY));

src/vm/mlinfo.cpp

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,7 +1920,11 @@ MarshalInfo::MarshalInfo(Module* pModule,
19201920
m_resID = IDS_EE_BADMARSHAL_I;
19211921
IfFailGoto(E_FAIL, lFail);
19221922
}
1923-
m_type = (sizeof(LPVOID) == 4 ? MARSHAL_TYPE_GENERIC_4 : MARSHAL_TYPE_GENERIC_8);
1923+
#ifdef _TARGET_64BIT_
1924+
m_type = MARSHAL_TYPE_GENERIC_8;
1925+
#else
1926+
m_type = MARSHAL_TYPE_GENERIC_4;
1927+
#endif
19241928
break;
19251929

19261930
case ELEMENT_TYPE_U:
@@ -1930,7 +1934,11 @@ MarshalInfo::MarshalInfo(Module* pModule,
19301934
m_resID = IDS_EE_BADMARSHAL_I;
19311935
IfFailGoto(E_FAIL, lFail);
19321936
}
1933-
m_type = (sizeof(LPVOID) == 4 ? MARSHAL_TYPE_GENERIC_U4 : MARSHAL_TYPE_GENERIC_8);
1937+
#ifdef _TARGET_64BIT_
1938+
m_type = MARSHAL_TYPE_GENERIC_8;
1939+
#else
1940+
m_type = MARSHAL_TYPE_GENERIC_4;
1941+
#endif
19341942
break;
19351943

19361944

@@ -1962,7 +1970,11 @@ MarshalInfo::MarshalInfo(Module* pModule,
19621970
m_resID = IDS_EE_BADMARSHAL_PTR;
19631971
IfFailGoto(E_FAIL, lFail);
19641972
}
1965-
m_type = ( (sizeof(void*)==4) ? MARSHAL_TYPE_GENERIC_4 : MARSHAL_TYPE_GENERIC_8 );
1973+
#ifdef _TARGET_64BIT_
1974+
m_type = MARSHAL_TYPE_GENERIC_8;
1975+
#else
1976+
m_type = MARSHAL_TYPE_GENERIC_4;
1977+
#endif
19661978
break;
19671979

19681980
case ELEMENT_TYPE_FNPTR:
@@ -1979,7 +1991,11 @@ MarshalInfo::MarshalInfo(Module* pModule,
19791991
m_resID = IDS_EE_BADMARSHAL_FNPTR;
19801992
IfFailGoto(E_FAIL, lFail);
19811993
}
1982-
m_type = ( (sizeof(void*)==4) ? MARSHAL_TYPE_GENERIC_4 : MARSHAL_TYPE_GENERIC_8 );
1994+
#ifdef _TARGET_64BIT_
1995+
m_type = MARSHAL_TYPE_GENERIC_8;
1996+
#else
1997+
m_type = MARSHAL_TYPE_GENERIC_4;
1998+
#endif
19831999
break;
19842000

19852001
case ELEMENT_TYPE_OBJECT:

src/vm/mlinfo.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -899,7 +899,11 @@ class ArrayMarshalInfo
899899
else if (IsAMIExport64Bit(m_flags))
900900
return 8;
901901
else
902-
return sizeof(LPVOID);
902+
#ifdef _TARGET_64BIT_
903+
return 8;
904+
#else
905+
return 4;
906+
#endif
903907
}
904908

905909
protected:

0 commit comments

Comments
 (0)